php文件系统目录递归部分一

<?php
header("Content-Type:text/html;charset=gb2312");
date_default_timezone_set('PRC');
$dir = 'filesys';
$dirname = opendir($dir);
while($filename = readdir($dirname))
{
  $file = $dir.'/'.$filename;
  if($filename != '.' && $filename != '..')
    {
      if(is_file($file))
        {
          echo '<font color="red">'.$filename.'------'.'是文件!'.'</font>'.'-------'.'文件创建日期:'.date('Y-m-d H:i:s',filectime($file)).'------'.'文件大小:'.toSize(filesize($file)).'<br>';
        }
        else
        {
            echo '<font color="green">'.$filename.'</font>'.'------'.'目录大小:'.toSize(dirsize($file)).'<br>';
        }
    }
}
<span id="more-237"></span>


function toSize($size)
{
    $dw = 'Byte';
    if($size >= pow(2,30))
    {
        $size = round($size/pow(2,30),2);
        $dw = 'GB';
    }
    else if($size >= pow(2,20))
    {
        $size = round($size/pow(2,20),2);
        $dw = 'MB';
    }
    else if($size >= pow(2,10))
    {
        $size = round($size/pow(2,10),2);
        $dw = 'KB';
    }
    else
    {
        $dw = 'Byte';
    }
    return $size.$dw;
}

function dirsize($dirname)
{
 $dirsize = 0;
 $dir = opendir($dirname);
 while($filename = readdir($dir))
    {
      $file = $dirname.'/'.$filename;
      if($filename != '.' && $filename != '..')
        {
           if(is_dir($file))
            {
               $dirsize+=dirsize($file);
            }
            else
            {
                $dirsize+=filesize($file);
            }
        }
    }
    return $dirsize;
}

dirsize接收传入的是一个目录资源,实际为filesys/images这样的格式, 进入到while后, 就会读出images里的每一个文件, 然后拼接一个images/filename.php 的当前目录, 再然后进入到判断, 如果是一个目录, 就再次调用自身进行readdir, 因为实际打开句柄后, 都已经成了images/xxx.xxx的格式, 所以进入到else执行filesize相加, 最后return出目录总大小得出结果。

此条目发表在php分类目录,贴了, , 标签。将固定链接加入收藏夹。