上一篇: php文件操作
下一篇: php文件上传与下载
在程序开发中,不仅需要对文件进行操作,而且还需要对文件目录进行操作,如,解析目录、遍历目录,创建和删除目录等等,在php中提供了相应的函数来操作文件的目录
在程序中经常需要对目录进行操作,如获取目录名、文件的扩展名等,在php中提供了basename()函数、dirname()函数和pathinfo()函数来对文件目录解析操作
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;
?>
运行结果
dirname()函数用于返回路径中的目录部分,其声明格式如下:
string dirname(string $path)
在上述申明中,该函数只有一个参数$path,即路径,该函数返回值为文件目录
案例
<?php
$path="D:/phpstudy_pro/WWW/php.bdcom/index.html";
$file=dirname($path);
echo $file."<br>";
?>
运行结果
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中提供了opendir()函数、readdir()函数、closedir()函数和rewinddir()函数等用于实现目录的遍历
opendir()函数用于打开一个目录的句柄,其声明格式如下:
resource opendir(string $path [,resource $context])
$path指定要打开的目录路径,$context是可选参数,表示上下文,通常省略。函数如果执行成功,则返回目录句柄的$resource,否则返回false
raddir()函数用于从目录句柄中读取条目,其声明格式如下:
string readdir(resource $dir_handle)
函数只有一个参数$dir_handle,它用于接收一个目录句柄$resource,函数执行成功返回目录中的下一个文件的文件名,否则返回false
cosedir()函数用于关闭目录句柄,其声明格式如下:
void closedir(resource $dir_handle)
该函数只要一个参数$dir_handle,它用于接受一个目录句柄的$resource,没有返回值
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提供了mkdir()函数和rmdir()函数实现文件的创建和删除工作。
在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); //递归创建目录
?>
运行结果
rmdir()函数用于删除目录,其声明格式如下
bool rmdir(string $dirname)
函数只有一个参数$dirname,即指定要删除的目录名,函数执行成功时返回true,否则返回false
案例
<?php
if(rmdir("path")){
echo "成功删除目录";
}else{
echo "目录删除失败";
}
if(rmdir("path1/path2")){
echo "成功删除目录";
}else{
echo "目录删除失败";
}
?>
运行结果
实现了目录删除功能,删除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提供了两个函数disk_total_space()和disek_free_space()来统计磁盘的总大小和磁盘的可用空间
<?php
echo disk_total_space("D:"); //统计d盘的大小
echo disk_free_space("D:"); //统计d盘的可用空间
?>
注意:这两个函数只对磁盘的根目录起作用,如果是文件夹目录,则会忽略后面的文件夹
上一篇: php文件操作
下一篇: php文件上传与下载
*声明:内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。