我正在用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