php对文件夹进行相关操作(遍历、计算大小)
这篇文章主要介绍了php对文件夹进行相关操作,包括遍历并打印指定目录下所有文件和计算文件大小去空白,以及去重复值等,感兴趣的小伙伴们可以参考一下。
为大家分享的第一个操作内容: 遍历并打印指定目录下所有文件
- <?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 ' ';
- 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,面向过程
- #####单目录#####
- // 列出目录内容 $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 对文件进行的第二个操作内容:获得文件夹大小 计算文件
- <?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对文件夹的进行的基本操作,希望对大家的学习有所帮助。