PHP에서 디렉토리가 얼마나 큰지를 알아볼 수 있어야하는 간단한 파일 캐싱 엔진을 작성하고 있습니다. 내가 찾고있는 것은 단순히 Unix의 du
명령과 같은 것으로 디렉토리의 총 파일 크기를 인쇄하는 것입니다. 나는 그것을 직접 작성할 수있다. 그러나 다른 누군가가 이미 심볼릭 링크를 반복하고 다루는 등의 모든 문제를 이미 파악했다면 그것은 훌륭 할 것이다. 이의 라인을 따라PHP는`du` 명령과 동일합니까?
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()
을 사용하여, 우리는 심볼릭 링크가 확장되어 있는지 확인합니다. 그러나 이것이 디렉토리에 대한 심볼릭 링크를 고려할 지 확실하지 않습니다. 나는 그들이 잎으로 여겨지는지 여부를 모른다.
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
에 결과를 비교 할 수 있습니다 : 사용자 정의 반복자를 사용하여
echo array_reduce(iterator_to_array($iterator), function($size, $file) {
$size += filesize($file->getRealPath());
return $size;
});
그리고 또 다른 방법 :
어쨌든, 여기에 람다를 사용하여 기능적 접근 방식 옳은.
관련 문제
- 1. PHP는 ASP.NET/SharePoint Webparts와 동일합니까?
- 2. linux du 명령 소스 코드
- 3. nodejs는 PHPlivedocx와 동일합니까?
- 4. 명령과 명령문의 차이점은 무엇입니까
- 5. PHP는
- 6. PHP는
- 7. PHP는
- 8. PHP는
- 9. PHP는
- 10. PHP는
- 11. PHP는
- 12. PHP는
- 13. PHP는
- 14. PHP는
- 15. PHP는
- 16. PHP는
- 17. PHP는
- 18. PHP는 :
- 19. PHP는
- 20. PHP는
- 21. PHP는
- 22. PHP는
- 23. PHP는
- 24. PHP는, •
- 25. PHP는
- 26. Rscript + PHP exec() 명령과 rapache
- 27. mod_python은 PHP exec() 명령과 동일합니다.
- 28. x86 ASM 명령과 동일합니다. XADD
- 29. PHP는 Objective-C와 Object가 같은가요?
- 30. 루비는 PHP의 "unserialize"함수와 동일합니까?
'system ('du');': p – kennytm
@Kenny는 가장 쉽지만 이동성이 가장 적은 솔루션입니다. – Gordon