在PHP中獲取目錄大小的最佳方式是什麼?我正在尋找一種輕量級的方式來做到這一點,因爲我將使用這個目錄的目錄非常龐大。PHP - 獲取目錄的大小
已經有了另外一個question這個對SO,但它是三歲的解決方案是不合時宜的。(現在fopen
是出於安全原因被禁用。)
在PHP中獲取目錄大小的最佳方式是什麼?我正在尋找一種輕量級的方式來做到這一點,因爲我將使用這個目錄的目錄非常龐大。PHP - 獲取目錄的大小
已經有了另外一個question這個對SO,但它是三歲的解決方案是不合時宜的。(現在fopen
是出於安全原因被禁用。)
你可以嘗試執行運算符與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;
}
它看起來像SO代碼阻止他們,但你需要在unix命令周圍反引號...在分號之前的一個和一個之前。 – 2012-02-06 16:33:28
可在RecursiveDirectoryIterator給你?
$bytes = 0;
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($iterator as $i)
{
$bytes += $i->getSize();
}
http://stackoverflow.com/a/21409562/442022有更全面的版本。 – colan 2017-03-07 16:52:18
fopen在配置中被禁用,但可以打開。你沒有訪問服務器配置? – 2012-02-06 16:29:43
@NeilAitken由於安全原因,它被禁用,所以我不會確保它無法啓用! – 2012-02-06 16:30:11
你在一個明確禁用它的共享主機上嗎?由於默認配置是啓用它。 如果它是一個專用服務器,那麼打開並沒有安全隱患,但我可以看到爲什麼共享主機可能只是爲了確保它不需要它。 – 2012-02-06 16:33:08