有意思的一个操作实例(需要在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对应地区
精彩图集
精彩文章






