有意思的一个操作实例(需要在linux环境下跑)-PH
分别使用Linux系统命令du -b与PHP系统函数filesize来获取指定目录下的大小,得到的结果值存在很大的差异。br / br / Google相关知识点,截取内容如下:br / 1. 大部分人都搞错了 du 的作用,
分别使用Linux系统命令du -b与PHP系统函数filesize来获取指定目录下的大小,得到的结果值存在很大的差异。
Google相关知识点,截取内容如下:
1. 大部分人都搞错了 du 的作用,du 不是显示文件大小,而是显示文件所占用的 block 大小,你的分区的 block size 是 4k ,也就是说即使文件只有1个字节,也会占用 4KB 。
不过还是不敢确定是不是这个原因,希望看到此代码的Linux高手能够给予相关指点。 谢谢!
Google相关知识点,截取内容如下:
1. 大部分人都搞错了 du 的作用,du 不是显示文件大小,而是显示文件所占用的 block 大小,你的分区的 block size 是 4k ,也就是说即使文件只有1个字节,也会占用 4KB 。
不过还是不敢确定是不是这个原因,希望看到此代码的Linux高手能够给予相关指点。 谢谢!
<?php /** * 获取目录大小(分别采用Linux的du命令及PHP系统函数filesize实现) * */ function _dirSize($path, $_isCmd = TRUE) { $size = 0; if ($_isCmd) { //注意,linux下文件夹大小位4096byte, 而windows下文件夹大小为0, 所以造成 du统计的大小与filesize统计的大小不一致 $size = intval(exec('du -b '.escapeshellarg($path))); } else { $list = scandir($path); foreach($list as $val) { if ($val == '.' OR $val == '..') continue; $p = $path.'/'.$val; if (is_dir($p)) { $size += _dirSize($p, $_isCmd); } else { $size += filesize($p); } } } return $size; } /** * 获取指定目录下子文件夹个数(linux环境下执行) * */ function _getDirCount($path) { return intval((_dirSize($path, TRUE) - _dirSize($path, FALSE))/4096); } /** * 格式化输出文件大小 * */ function _sizeFormat($size, $unit = '') { if ($unit == '') { if($unit/1024 >=0 AND $unit/1024 <=1024) { $unit = 'K'; } else if ( $unit/1024 >1024 AND $unit/1024 <= 1024*1024 ) { $unit = 'M'; } else { $unit = 'G'; } } switch(strtolower($unit)) { case 'k': $size = ($size/1024); $suffix = 'KB'; break; case 'm': $size = ($size/1024/1024); $suffix = 'MB'; break; case 'g': $size = ($size/1024/1024/1024); $suffix = 'GB'; break; } $size = sprintf("%.2f%s", $size, $suffix); return $size; } $path = 'min'; var_dump(_dirSize($path, FALSE)); var_dump(_dirSize($path, TRUE)); var_dump(_getDirCount($path)); /*end of php*/
- 上一篇:xml2array
- 下一篇:PHP获取ip对应地区
精彩图集
精彩文章