我正在用PHP编写一个简单的文件缓存引擎,它需要能够查看目录的大小.我正在寻找的是相当于Unix的du
命令来简单地打印目录的总文件大小.我可以自己写,但如果其他人已经弄清楚了递归和处理符号链接的所有问题等等,那就太好了.
有点像这样:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
'/path/to/a/folder'));
Run Code Online (Sandbox Code Playgroud)
迭代器将让您递归迭代指定的文件夹和子文件夹并返回SplFileInfo
对象.默认选项是仅返回叶子,例如文件,但不返回目录项,因此您可以执行以下操作:
$size = 0;
foreach($iterator as $file) {
$size += filesize($file->getRealPath());
}
echo $size;
Run Code Online (Sandbox Code Playgroud)
通过getRealPath()
在文件上使用,我们确保扩展所有符号链接.不知道这是否会考虑到目录的符号链接.我只是不知道他们是否被认为是叶子.
无论如何,这是一个使用lambda的功能方法:
echo array_reduce(iterator_to_array($iterator), function($size, $file) {
$size += filesize($file->getRealPath());
return $size;
});
Run Code Online (Sandbox Code Playgroud)
另一种使用自定义迭代器的方法:
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'))));
Run Code Online (Sandbox Code Playgroud)
您可能希望比较结果以du
确保它是正确的.
归档时间: |
|
查看次数: |
540 次 |
最近记录: |