2、统计目录大小
思路:
(1)指定路径是否存在
(2)指定路径是否是目录
(3)判断目录下文件是否是目录,累加文件大小
实现方法:
function getDirSize($dir){
//累计目录大小
$dir_size = 0;
//判断路径文件或目录是否存在
if(file_exists($dir)){
//判断指定路径是否是目录
if(is_dir($dir)){
//打开目录
$dir_handle = opendir($dir);
//遍历目录中文件
while($filename = readdir($dir_handle)){
//剔除目录中的.和..文件夹
if($filename != "." && $filename != ".."){
$subfile = $dir . "/" . $filename;
//目录中文件是普通文件
if(is_file($subfile)){
$dir_size += filesize($subfile);
}
//目录中文件是目录,递归计算大小
if(is_dir($subfile)){
$dir_size += getDirSize($subfile);
}
}
}
closedir($dir_handle);
$res = $dir . "目录大小为:" . round($dir_size/pow(1024, 1), 2) . "KB";
}else{
$res = "指定路径指向普通文件,其大小是" . filesize($dir) . "B";
}
}else{
$res = "请检查指定目录是否存在";
}
return $res;
}
echo getDirSize("test.php")."<br/>";#指定路径指向普通文件,其大小是2055B
echo getDirSize("example1")."<br/>";#请检查指定目录是否存在
echo getDirSize("example");#example目录大小为:9.92KB
3、建立和删除目录
PHP中,使用mkdir()函数即可创建一个新目录;使用rmdir()函数删除指定的目录。
删除目录步骤:
(1)判断指定路径是否存在;
(2)判断指定路径文件类型;
(3)如果文件类型是目录,遍历目录中文件,逐个删除,如果目录中文件是文件夹,使用递归删除。
自定义删除目录方法如下,
/*
* 删除传入的路径文件
* @param $dir 待删除的文件路径
*/
function delDir($dir){
//判断路径文件是否存在
if(file_exists($dir)){
//判断路径文件是否是普通文件
if(is_file($dir)){
unlink($dir);
}
//判断路径文件是否是目录文件
if(is_dir($dir)){
//打开目录
$dir_handle = opendir($dir);
//遍历目录中文件
while($filename = readdir($dir_handle)){
if($filename != "." && $filename != ".."){
$subfile = $dir . "/" . $filename;
if(is_file($subfile)){
unlink($subfile);
}
if(is_dir($subfile)){
delDir($subfile);
}
}
}
closedir($dir_handle);
//删除空目录
rmdir($dir);
}
$res = "指定路径文件删除成功";
}else{
$res = "指定路径文件不存在";
}
echo $res;
}
delDir('example');
4、复制目录
php提供了copy()函数,用于复制普通文件。没有专门的函数用于复制目录。
/*
* 复制目录
* @param $dirSrc 被复制的目录
* @param $dirTo 复制到的目录
*/
function copyDir($dirSrc, $dirTo){
//判断被复制参数是否存在
if(!file_exists($dirSrc)){
exit("被复制文件不存在");
}
//判断被复制文件是否是目录
if(!is_dir($dirSrc)){
exit("被复制文件不是目录");
}
//判断目标文件是否存在
if(!file_exists($dirTo)){
mkdir($dirTo);
if(!is_dir($dirTo)){
echo "目标文件不是目录";
unlink($dirTo);exit;
}
}elseif(!is_dir($dirTo)){
exit("目标文件不是目录");
}
//复制
$dir_handle = opendir($dirSrc);
while($filename = readdir($dir_handle)){
if($filename != "." && $filename != ".."){
$subfile = $dirSrc . "/" . $filename;
if(is_file($subfile)){
copy($subfile, $dirTo . "/" . $filename);
}
if(is_dir($subfile)){
copyDir($subfile, $dirTo . "/" . $filename);
}
}
}
closedir($dir_handle);
}
copyDir("copy","example");
—-细说PHP读书笔记