2012-02-06 63 views
2

在PHP中獲取目錄大小的最佳方式是什麼?我正在尋找一種輕量級的方式來做到這一點,因爲我將使用這個目錄的目錄非常龐大。PHP - 獲取目錄的大小

已經有了另外一個question這個對SO,但它是三歲的解決方案是不合時宜的。(現在fopen是出於安全原因被禁用。)

+0

fopen在配置中被禁用,但可以打開。你沒有訪問服務器配置? – 2012-02-06 16:29:43

+1

@NeilAitken由於安全原因,它被禁用,所以我不會確保它無法啓用! – 2012-02-06 16:30:11

+0

你在一個明確禁用它的共享主機上嗎?由於默認配置是啓用它。 如果它是一個專用服務器,那麼打開並沒有安全隱患,但我可以看到爲什麼共享主機可能只是爲了確保它不需要它。 – 2012-02-06 16:33:08

回答

2

你可以嘗試執行運算符與unix命令杜:

$ output = du -s $folder;

FROM:http://www.darian-brown.com/get-php-directory-size/

或者編寫自定義函數來總目錄中的所有文件的文件大小:

function getDirectorySize($path) 
{ 
    $totalsize = 0; 
    $totalcount = 0; 
    $dircount = 0; 
if($handle = opendir($path)) 
{ 
    while (false !== ($file = readdir($handle))) 
    { 
     $nextpath = $path . '/' . $file; 
     if($file != '.' && $file != '..' && !is_link ($nextpath)) 
     { 
     if(is_dir($nextpath)) 
     { 
     $dircount++; 
     $result = getDirectorySize($nextpath); 
     $totalsize += $result['size']; 
      $totalcount += $result['count']; 
     $dircount += $result['dircount']; 
     } 
     else if(is_file ($nextpath)) 
     { 
      $totalsize += filesize ($nextpath); 
      $totalcount++; 
     } 
    } 
    } 
} 
closedir($handle); 
$total['size'] = $totalsize; 
$total['count'] = $totalcount; 
$total['dircount'] = $dircount; 
return $total; 
} 
+0

它看起來像SO代碼阻止他們,但你需要在unix命令周圍反引號...在分號之前的一個和一個之前。 – 2012-02-06 16:33:28

5

可在RecursiveDirectoryIterator給你?

$bytes = 0; 
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)); 
foreach ($iterator as $i) 
{ 
    $bytes += $i->getSize(); 
} 
+0

http://stackoverflow.com/a/21409562/442022有更全面的版本。 – colan 2017-03-07 16:52:18