我正在用PHP編寫一個簡單的文件緩存引擎,需要能夠看到目錄有多大。我正在尋找的是相當於Unix的du
命令來簡單地打印目錄的總文件大小。我可以自己寫,但如果其他人已經想出了所有遞歸和處理符號鏈接等問題,那就太好了。相當於`du`命令的PHP嗎?
2
A
回答
5
沿東西這行:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
'/path/to/a/folder'));
迭代器都將讓您在遞歸在指定的文件夾和子文件夾重複,並返回SplFileInfo
對象。默認選項是僅返回葉子,例如文件,而不是目錄的項目,所以你可以做:
$size = 0;
foreach($iterator as $file) {
$size += filesize($file->getRealPath());
}
echo $size;
通過在文件中使用getRealPath()
,我們保證所有的鏈接被擴大。不知道這是否會將符號鏈接考慮進目錄中。我只是不知道他們是否被認爲是葉子。
不管怎麼說,這是使用Lambda功能的方法:
echo array_reduce(iterator_to_array($iterator), function($size, $file) {
$size += filesize($file->getRealPath());
return $size;
});
而另一種方法使用自定義的迭代器:
class FileSizeIterator extends RecursiveIteratorIterator
{
public function current() {
return filesize($this->getInnerIterator()->current()->getRealpath());
}
}
echo array_sum(iterator_to_array(new FileSizeIterator(
new RecursiveDirectoryIterator('/path/to/a/folder'))));
你可能想要的結果比較du
,以確保它的正確。
相關問題
- 1. 相當於php exec()命令的mod_python
- 2. 命令提示符相當於Bash'printf'嗎?
- 3. du linux命令大小大於df
- 4. GIT commit命令相當於SVN命令
- 5. 相當於「呼叫」命令
- 6. Windows命令相當於egrep
- 7. Cygwin - ypcat命令相當於
- 8. MV相當於rsync命令
- 9. linux du命令源代碼
- 10. 相當於MySQL'替換'命令的Informix
- 11. Powershell:相當於Perl的'for'命令?
- 12. Subversion相當於Git的'show'命令?
- 13. 相當於MATLAB的倍頻命令
- 14. 相當於CURL命令的WebRequest
- 15. 相當於Android的shell命令
- 16. Presto有相當於Hive的SET命令
- 17. PowerShell中相當於時間的命令
- 18. emacs相當於下面的vi命令
- 19. 相當於java中的OpenSSL命令
- 20. 相當於Stata的`compress`命令?
- 21. PHP中的命令相當於javascript中的警報
- 22. 相當於Linux的頂級命令的PHP
- 23. 相當於Subclipse Branch/Tag命令的命令行
- 24. 什麼是PHP相當於這個unix命令的
- 25. 轉換ImageMagick的命令到PHP相當於
- 26. 在Java中相當於grep命令
- 27. 存儲:C#相當於PowerShell命令
- 28. 泊塢窗命令相當於
- 29. curl命令相當於紅寶石
- 30. Windows Powershell相當於bash命令
'system('du');':p – kennytm 2010-07-03 20:28:46
@Kenny這是最簡單但最不便攜的解決方案 – Gordon 2010-07-03 20:37:31