我正在执行一个函数来计算当前使用的空间(计算目录大小)并与可用的用户空间(例如10MB)进行比较,然后它将返回一个百分比数字来填充进度条。
function getDirSpaceLeft($totalSpace) {
$f = 'data/';
$io = popen ( '/usr/bin/du -sk ' . $f, 'r' );
$size = fgets ( $io, 4096);
$size = substr ( $size, 0, strpos ( $size, "\t" ) );
pclose ( $io );
$current = $totalSpace - $size;
$precent = $current * 100 / 2;
return $precent;
}
但是如果我将10Mb(10485760)的值传递给函数,则使用此代码将返回一个奇怪的数字,如523557400。
我认为我做错了什么,谢谢。
答案 0 :(得分:2)
虽然这不是您的代码的修复,但这就是我的做法......
<?php
// folder to check
$dir = '/';
// get disk space free (in bytes)
$disk_free = disk_free_space($dir);
// get disk space total (in bytes)
$disk_total = disk_total_space($dir);
// calculate the disk space used (in bytes)
$disk_used = $disk_total - $disk_free;
// percentage of disk used
$disk_used_p = sprintf('%.2f',($disk_used / $disk_total) * 100);
// this function will convert bytes value to KB, MB, GB and TB
function convertSize( $bytes )
{
$sizes = array( 'B', 'KB', 'MB', 'GB', 'TB' );
for( $i = 0; $bytes >= 1024 && $i < ( count( $sizes ) -1 ); $bytes /= 1024, $i++ );
return( round( $bytes, 2 ) . " " . $sizes[$i] );
}
// format the disk sizes using the function (B, KB, MB, GB and TB)
$disk_free = convertSize($disk_free);
$disk_used = convertSize($disk_used);
$disk_total = convertSize($disk_total);
echo '<ul>';
echo '<li>Total: '.$disk_total.'</li>';
echo '<li>Used: '.$disk_used.' ('.$disk_used_p.'%)</li>';
echo '<li>Free: '.$disk_free.'</li>';
echo '</ul>';
?>
PHP手册:
答案 1 :(得分:1)
这是我发现的一个函数(不是我的),该函数以字节为单位返回文件夹(包括子文件夹)中文件使用的大小:
/* Get size of files in folder including subfolders, in bytes.
From: https://gist.github.com/eusonlito/5099936
*/
function getSizeUsed($dir) {
$size = 0;
foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each)
$size += is_file($each) ? filesize($each) : getSizeUsed($each);
return $size;
}
然后您可以计算使用的总数的百分比,如下所示:
$total = 10000000;
$dir = "data/";
echo (getSizeUsed($dir)/$total)*100;