2013-05-16 45 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]; 
} 
相關問題