• 微信号
目录

php基础

您当前的位置:首页 > 我的笔记 > php基础>php目录操作

php目录操作

在程序开发中,不仅需要对文件进行操作,而且还需要对文件目录进行操作,如,解析目录、遍历目录,创建和删除目录等等,在php中提供了相应的函数来操作文件的目录

解析目录

在程序中经常需要对目录进行操作,如获取目录名、文件的扩展名等,在php中提供了basename()函数dirname()函数pathinfo()函数来对文件目录解析操作

1.basename()函数

basename()函数用于对返回路径中的文件名,其声明格式如下

string basename(string $path [,string $suffix])

在上述声明中,$path用于指定路径名,$suffix是可选参数,如果指定了参数,且文件名是以$suffix结尾的,则返回的结果中去掉这一部分的字符串。

案例

<?php
    $path="D:/phpstudy_pro/WWW/php.bdcom/index.html";
    $file=basename($path);
    echo $file."<br>";
    $file2=basename($path,".html");
    echo $file2;
?>

运行结果

陵小宇博客-php目录操作bansename函数

2.dirname()函数

dirname()函数用于返回路径中的目录部分,其声明格式如下:

string dirname(string $path)

在上述申明中,该函数只有一个参数$path,即路径,该函数返回值为文件目录

案例

<?php
    $path="D:/phpstudy_pro/WWW/php.bdcom/index.html";
    $file=dirname($path);
    echo $file."<br>";
?>

运行结果

陵小宇博客-php目录操作dirname()函数

3.pathinfo()函数

pathinfo()函数用于以数组的形式返回路径的信息,包括目录名、文件名、文件基本名和扩展名。其声明格式如下

mixed pathinfo(string $path [,int $options])

参数$path表示指定路径名,可选参数$options指定返回哪些项,默认返回全部。该函数返回值是一个关联数组。

返回的数组元素如下:

[dirname]: 目录路径

[basename]: 文件名

[extension]: 文件后缀名

[filename]: 不包含后缀的文件名

案例

<?php
    $path="D:/phpstudy_pro/WWW/php.bdcom/index.html";
    $file=pathinfo($path);
    $file2=pathinfo($path,2);
    echo "<pre>";
    print_r($file);
    echo"<hr>";
    print_r($file2);
    echo "</pre>";
?>

运行结果

陵小宇博客-php目录操作pathinfo()函数

遍历目录

在程序中有时需要对某个目录下的所有子目录或文件进行遍历。在php中提供了opendir()函数readdir()函数closedir()函数rewinddir()函数等用于实现目录的遍历

1.opendir()函数

opendir()函数用于打开一个目录的句柄,其声明格式如下:

resource opendir(string $path [,resource $context])

$path指定要打开的目录路径,$context是可选参数,表示上下文,通常省略。函数如果执行成功,则返回目录句柄的$resource,否则返回false

2.readdir()函数

raddir()函数用于从目录句柄中读取条目,其声明格式如下:

string readdir(resource $dir_handle)

函数只有一个参数$dir_handle,它用于接收一个目录句柄$resource,函数执行成功返回目录中的下一个文件的文件名,否则返回false

3.cosedir()函数

cosedir()函数用于关闭目录句柄,其声明格式如下:

void closedir(resource $dir_handle)

该函数只要一个参数$dir_handle,它用于接受一个目录句柄的$resource,没有返回值

4.rewinddir()函数

rewinddir()函数用于倒回目录句柄,其声明格式如下:

void rewinddir(resource $dir_handle)

该函数只要一个参数$dir_handle,它指定有opendir()函数打开的目录句柄的$resource,执行该函数将$dir_handle的目录流重置到目录的开头,没有返回值

案例

<?php
    $path="D:/phpstudy_pro/WWW/php.bdcom/";
    $handle=opendir($path); //打开目录句柄
    //通过while循环使用reddir()函数来获取目录句柄中的条目
    while(false!==($file=readdir($handle))){
        echo $file ."<br>";
    }
    closedir($handle);//关闭目录句柄
?>

运行结果

陵小宇博客-php目录操作遍历目录

需要注意的是,在遍历任何一个目录时,都包含“”和“”两个特殊的目录,前者表示当前目录,后者表示上一级目录

创建和删除目录

在php进行文件管理时,经常需要对文件目录进行创建和删除。为此php提供了mkdir()函数rmdir()函数实现文件的创建和删除工作。

1.mkdir()函数

在php中,mkdir()函数永固新建目录,其声明格式如下

bool mkdir(string $pathname [,int $mode [,bool $recursive [,resource $context]]])

$pathname指定创建的目录。$mode为可选参数,指定目录的访问权限,默认值为0777.$recursive为可选菜蔬,指定是否递归创建目录,默认值为false。$context为可选参数,指定上下文,通常可以忽略,盖汉书执行成功后返回true,失败则返回false

案例

<?php
    mkdir("path"); //创建目录path
    mkdir("path1/path2",0777,true); //递归创建目录
?>

运行结果

陵小宇博客-php目录操作bansename函数

2.rmdir()函数

rmdir()函数用于删除目录,其声明格式如下

bool rmdir(string $dirname)

函数只有一个参数$dirname,即指定要删除的目录名,函数执行成功时返回true,否则返回false

案例

<?php
    if(rmdir("path")){
        echo "成功删除目录";
    }else{
        echo "目录删除失败";
    }
    if(rmdir("path1/path2")){
        echo "成功删除目录";
    }else{
        echo "目录删除失败";
    }
?>

运行结果

陵小宇博客-php目录操作bansename函数

实现了目录删除功能,删除path目录,如果该目录存在且为空,则可以删除,否则删除失败;递归删除path1/path2目录,但在目录为空的情况下,只能删除二级目录path2,也就是说rmdir()函数只能删除空的单层目录

需要注意的是,在删除文件时,必须保证该目录是空的,且具备相应的权限

统计目录中所有文件的大小

我们都需要复制文件,通常需要看一下该目录的有多少文件和文件的总大小。这个文件总大小是通过计算机统计的。如果程序中要实现统计目录的中所有文件的总大小,则需要使用递归的思想,首先读取一个目录,然后遍历该目录,对该目录下的每一个文件进行判断,如果是普通文件,则计算器大小并将纳入统计结果,如果是目录,则进入该目录重复上述操作,直至遍历完所有文件和文件夹

案例

<?php
    //定义一个函数统计目录下的所有文件大小
    function getDirSize($dirname){
        $dirsize=0; //初始化大小为0
        $handle=opendir($dirname);
        //从目录句柄中循环读取条目,并按照系统中的顺序返回目录中下一个文件的文件名
        while($filename=readdir($handle)){
            if($filename !="." && $filename != ".."){
                $file = $dirname .'/'.$filename;
                 //判断给定文件名是否是一个目录
                if(is_dir($file)){
                    //如果是一个目录,则调用函数gteDirSize()
                    $dirsize+=getDirSize($file);
                }else{
                    //如果不是一个文件,则获取其大小并且累加到变量$dirsize
                    $dirsize+=filesize($file);
                }
            }
        }
        closedir($handle); //关闭目录句柄
        return $dirsize; //返回累加的大小
    }
    $dirname="D:/phpstudy_pro/WWW/php";
    echo $dirname . "目录中所有的文件大小为:". getDirSize($dirname)."B";
?>

运行结果

陵小宇博客-php目录操作bansename函数

查看磁盘大小和可用空间

上面的递归方式不仅可以用于统计目录中所有文件的代销,还可以统计某个磁盘中所有文件大小。但是如果使用这种方式来统计磁盘的大小就会变得很慢。

因此,php提供了两个函数disk_total_space()disek_free_space()来统计磁盘的总大小和磁盘的可用空间

<?php
    echo disk_total_space("D:"); //统计d盘的大小
    echo disk_free_space("D:"); //统计d盘的可用空间
?>

注意:这两个函数只对磁盘的根目录起作用,如果是文件夹目录,则会忽略后面的文件夹