文件遍历有两种方法,一种使用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("路径");
原文:http://www.cnblogs.com/cyrfr/p/6288103.html