我正在用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. Windows命令相當於egrep
- 6. Cygwin - ypcat命令相當於
- 7. MV相當於rsync命令
- 8. 相當於「呼叫」命令
- 9. linux du命令源代碼
- 10. Subversion相當於Git的'show'命令?
- 11. emacs相當於下面的vi命令
- 12. 相當於java中的OpenSSL命令
- 13. 相當於Stata的`compress`命令?
- 14. 相當於MySQL'替換'命令的Informix
- 15. 相當於MATLAB的倍頻命令
- 16. PHP中的命令相當於javascript中的警報
- 17. 轉換ImageMagick的命令到PHP相當於
- 18. Windows Powershell相當於bash命令
- 19. 泊塢窗命令相當於
- 20. 存儲:C#相當於PowerShell命令
- 21. JSP相當於PHP的include()函數嗎?
- 22. PHP相當於在命令行中有-i捲曲
- 23. 自動補全不適用於命令'du'
- 24. 相當於JMX的C++嗎?
- 25. 如何找到相當於正常模式命令的命令模式?
- 26. Java等於()相當於PHP
- 27. 使用dir或du命令獲取文件夾大小的命令或工具
- 28. 相當於asp.net-core中的AntiForgery.Validate()的命令
- 29. 相當於GDB的「info malloc-history <address>」命令的LLDB?
- 30. 這是什麼linux命令的相當於PowerShell的
'system('du');':p – kennytm 2010-07-03 20:28:46
@Kenny這是最簡單但最不便攜的解決方案 – Gordon 2010-07-03 20:37:31