2013-05-16 47 views
-2

我尽量让这个字节到千兆字节的图像主持人,请你帮和感谢,对不起坏英语:PHP:字节转换为GB(文件夹的大小)

function foldersize($dir){ 
$count_size = 0; 
$count = 0; 
$dir_array = scandir($dir); 
foreach($dir_array as $key=>$filename){ 
    if($filename!=".." && $filename!="."){ 
    if(is_dir($dir."/".$filename)){ 
    $new_foldersize = foldersize($dir."/".$filename); 
    $count_size = $count_size + $new_foldersize[0]; 
    $count = $count + $new_foldersize[1]; 
    }else if(is_file($dir."/".$filename)){ 
    $count_size = $count_size + filesize($dir."/".$filename); 
    $count++; 
    } 
    } 

} 

return array($count_size,$count); 
} 

$sample = foldersize("images"); 

echo "" . $sample[1] . " images hosted " ; 
echo "" . $sample[0] . " total space used </br>" ; 

回答

0

这应该自动确定最好的单位。如果你愿意,我可以告诉你如何强制它在任何时候都使用GB。

添加到您的代码:

$units = explode(' ', 'B KB MB GB TB PB'); 

function format_size($size) { 
    global $units; 

    $mod = 1024; 

    for ($i = 0; $size > $mod; $i++) { 
     $size /= $mod; 
    } 

    $endIndex = strpos($size, ".")+3; 

    return substr($size, 0, $endIndex).' '.$units[$i]; 
} 

测试:

echo "" . $sample[1] . " images hosted " ; 
echo "" . format_size($sample[0]) . " total space used </br>" 

来源:https://stackoverflow.com/a/8348396/1136832

+0

爆炸和一个全局的,真的吗?通过同样的成功,您可以将函数单元插入函数中,直接写入数组,而不是写入字符串,然后将其转换为数组。更好的是,如果不是'全局$单位;'你做'$ units = array('B','KB','MB','GB','TB','PB');' – Darthur

3
echo "" . $sample[0]/(1024*1024*1024) . " total space used </br>" ; 
+0

请你澄清一下为什么这里需要空的''“''?我个人认为没有理由为什么会以此开始,而不是仅仅做'echo $ sample [0] ...' – Darthur

0

我个人更喜欢一个简单的,但优雅的解决方案:

function formatSize($bytes,$decimals=2){ 
    $size=array('B','KB','MB','GB','TB','PB','EB','ZB','YB'); 
    $factor=floor((strlen($bytes)-1)/3); 
    return sprintf("%.{$decimals}f",$bytes/pow(1024,$factor))[email protected]$size[$factor]; 
} 
相关问题