php对文件夹进行相关操作(遍历、计算大小)

时间:2022-09-09 13:24:56

为大家分享的第一个操作内容: 遍历并打印指定目录下所有文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
//功能:遍历并打印指定目录下所有文件
 
function scan_dir($dir_name,$dir_flag=1) {
  static $FILE_COUNT=1;        //记录文件数目 初值为1 目录名称不记
  $FILE_COUNT--;            //每调用一次scan_dir()函数自减1
  @$dir_handle=opendir($dir_name);   //抑制错误信息显示 便于自定义错误显示
  if(!$dir_handle)
  die("目录打开错误!");
  while(false!==($filename=readdir($dir_handle))) //文件名为‘0'时,readdir返回 FALSE,判断返回值是否不全等
  {                  
 
    $flag=$dir_flag;         //古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false
    if($filename!='.'&&$filename!='..')
    {
      $FILE_COUNT++;          //不记录当前路径和上一级路径
      while($flag>0&&--$flag)     //负数仍为真
        echo '&nbsp';
      if(is_dir($dir_name.$filename)) //判断 是否为一个目录
      {
        echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>";
        scan_dir($dir_name.$filename.'/',$dir_flag+1);   //$dir_flag标志目录树层次
      }
      else
      {
        echo "<a href=".$dir_name.$filename.">".$filename."</a><br>";
      }
    }
  }
  closedir($dir_handle);         //关闭目录句柄
  echo "文件总数:".$FILE_COUNT.'<br>';
}
 
scan_dir('D:/AppServ/www/mytest/shopping/payment/');
 
 
/*总结:
1,关于路径 目录的路径末尾都加上 '/' 以便后面与文件名字符串连接 形成新的 路径字符串
2,目录遍历 这是一个关于树的问题
3,is_dir()函数第一个参数必须是一个能够识别的PATH否则会因目录不存在而返回一个false容易误解
得出 “这不是一个目录”的错误结论 形成逻辑上的错误
4,注意当前路径'.'和上一级路径'..'的剔除 否则 在递归环节造成死循环 直至内存耗尽出错。
5,dir_flag这个变量是记录树的深度 以便于目录分级分层输出                */
/*不足
1,输出排版不完善
2,逻辑与表示层混乱 不分明 大忌!
3,面向过程
*/

#####单目录#####

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 列出目录内容 $dir 不要加 '/'
function list_files($dir)
{
  if(is_dir($dir))
  {
    if($handle = opendir($dir))
    {
      while(($file = readdir($handle)) !== false)
      {
        if($file != "." && $file != ".." && $file != "Thumbs.db")
        {
          echo '<a href="'.$dir.'/'.$file.'">'.$file.'</a><br>'."\n";
        }
      }
      closedir($handle);
    }
  }
}
 
list_files('D:/AppServ/www/mytest/shopping/payment');

 PHP 对文件进行的第二个操作内容:获得文件夹大小 计算文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php 
function getDirSize($dir)
{
  $handle = opendir($dir);
  while (false!==($FolderOrFile = readdir($handle)))
  {
    if($FolderOrFile != "." && $FolderOrFile != "..")
    {
      if(is_dir("$dir/$FolderOrFile"))
      {
        $sizeResult += getDirSize("$dir/$FolderOrFile");
      }
      else
      {
        $sizeResult += filesize("$dir/$FolderOrFile");
      }
    }  
  
  closedir($handle);
  return $sizeResult;
}
 
//单位自动转换函数
function getRealSize($size)
{
  $kb = 1024;     //Kilobyte
  $mb = 1024 * $kb//Megabyte
  $gb = 1024 * $mb//Gigabyte
  $tb = 1024 * $gb//Terabyte
     
  if($size < $kb)
  {
    return $size." B";
  }
  else if($size < $mb)
  {
    return round($size/$kb,2)." KB";
  }
  else if($size < $gb)
  {
    return round($size/$mb,2)." MB";
  }
  else if($size < $tb)
  {
    return round($size/$gb,2)." GB";
  }
  else
  {
    return round($size/$tb,2)." TB";
  }
}
 
echo getRealSize(getDirSize('D:/AppServ/www/mytest/'));
 
 
 
// get byte
function dirsize($dir)
{
  $handle=opendir($dir);
  $size = 0;
  while ( $file=readdir($handle) )
  {
  if ( ( $file == "." ) || ( $file == ".." ) ) continue;
  if ( is_dir("$dir/$file") )
  $size += dirsize("$dir/$file");
  else
  $size += filesize("$dir/$file");
  }
  closedir($handle);
  return $size;
}
 
$big=dirsize(dirname($_SERVER['SCRIPT_FILENAME'])."/");
echo '('.$big.' bytes)';

以上就是关于php对文件夹的进行的基本操作,希望对大家的学习有所帮助。