일일 웹 개발에서 때로는 할당량 제한, 리소스 통계 또는 로그 모니터링과 같은 목적과 같은 디렉토리 (하위 디렉토리 포함)가 차지하는 디스크 공간을 얻어야합니다. PHP는 디렉토리의 총 디스크 크기를 쉽게 얻는 데 도움이되는 몇 가지 내장 기능을 제공합니다.
DISK_TOTAL_SPACE ()는 디스크의 총 용량을 직접 얻을 수 있지만 디렉토리가 실제로 차지하는 크기가 아니라 전체 디스크의 용량을 반환합니다.
$directory = "/var/log";
$total_space = disk_total_space($directory);
echo "총 디스크 용량:$total_space 바이트";
디렉토리를 가로 지르고 filesize ()를 사용하여 각 파일의 크기를 읽으면 디렉토리가 점유 한 실제 디스크 공간을보다 정확하게 얻을 수 있습니다.
$directory = "/var/log";
$total_size = 0;
if ($dh = opendir($directory)) {
while (($file = readdir($dh)) !== false) {
if ($file != "." && $file != "..") {
$total_size += filesize($directory . "/" . $file);
}
}
closedir($dh);
}
echo "총 디스크 크기:$total_size 바이트";
리퍼 유형의 이사 레터 레이터 와 재귀 인 테이터 레이터를 결합하면 디렉토리와 하위 디렉터에서 모든 파일의 크기를 재귀 적으로 얻을 수 있으며, 이는 깊은 디렉토리 구조에 적합합니다.
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;
use SplFileInfo;
$directory = "/var/log";
$total_size = 0;
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $file) {
if ($file->isFile()) {
$total_size += $file->getSize();
}
}
echo "총 디스크 크기:$total_size 바이트";
Scandir ()는 디렉토리의 모든 파일 이름을 얻고 Array_Map () 및 Array_Sum ()을 결합하여 총 크기를 간결한 방식으로 계산할 수 있습니다. 그러나이 방법은 재귀 적으로 하위 디렉터가 될 수 없으며 병렬 디렉토리 통계에 적합합니다.
$directory = "/var/log";
$files = scandir($directory);
$total_size = array_sum(array_map("filesize", array_filter(
array_map(function($file) use ($directory) {
return $directory . '/' . $file;
}, $files),
function($file) {
return is_file($file);
}
)));
echo "총 디스크 크기:$total_size 바이트";
PHP는 각각 해당 시나리오와 함께 디렉토리 디스크 크기를 계산하는 다양한 방법을 제공합니다. 올바른 방법을 선택하면 실행 효율성을 향상시킬뿐만 아니라 코드를보다 간결하고 신뢰할 수 있습니다. 개발자는 자신의 요구에 따라 유연하게 사용할 수 있습니다.