文件遍历及文件夹的删除
文件遍历有两种方法,一种使用glob函数以数组的形式取到指定目录下的文件;另一种是用opendir与closedir通过打开关闭资源的方法用readdir
函数取到所有文件,但是通过这种方法会取到“.”与“..”两个文件,这两个会返回上级目录,遍历时应跳过这两项。
1.利用glob函数遍历文件,并用filesize()函数取到制定目录下文件的总大小:
function ShuLiang($filename) { $attr = glob($filename."/*"); //取到所有文件 $size = 0; foreach($attr as $v) { if(is_dir($v)) //如果是文件夹,用递归的方法回调。 { $size += ShuLiang($v); } else { $size += filesize($v); } } return $size; } echo ShuLiang("路径"); ?>
2.是用opendir与closedir通过打开关闭资源的方法用readdir函数取到所有文件,同样取文件总大小:
function Fsize($fname) { $size = 0; $dir = opendir($fname); //打开资源 //遍历目录,找到文件,累加大小 while($u = readdir($dir)) { if($u!="." && $u!="..") { $zfname = $fname."/".$u; if(is_dir($zfname)) { $size += Fsize($zfname); //用递归回调 } else { $size += filesize($zfname); } } } closedir($dir); //关闭资源 return $size; } echo Fsize("路径");
结果正确。
文件夹删除
没有直接删除文件夹的函数,但是有删除文件的函数unlink()与删除空文件夹的函数rmdir(),同样运用递归遍历到所有文件都删除掉,最后删除这个空文件夹:
function ShanChu($fname) { //遍历该文件夹,找到所有文件删除 $dir = opendir($fname); while($n = readdir($dir)) { if($n!="." && $n!="..") { $zname = $fname."/".$n; if(is_file($zname)) { unlink($zname); } else { ShanChu($zname); } } } closedir($dir); //删除文件夹 rmdir($fname); } ShanChu("路径");