Розмір теки
До уваги надається функція, яка визначає розмір теки з усіма входженнями піддеректорій в байтах і функція для перерахунку їх в кіло- мега- і гіга- байти. Вона рекурсивно обходить вкладені директорії, що забезпечує точний розрахунок.
<?php /** * Виводить розмір папки 'zip' у форматованому вигляді. */ // Шлях до цільової директорії $targetFolder = __DIR__ . DIRECTORY_SEPARATOR . 'zip'; // Перевірка доступності директорії if (!is_readable($targetFolder)) { echo '<blockquote><span class="error">Error: Folder not accessible.</span></blockquote>'; exit; } // Розрахунок розміру та форматування $rawSize = sizeFolder($targetFolder); $formattedSize = sizeFormat($rawSize); // Вивід результату з семантичним HTML echo <<<HTML <blockquote> Folder for calculation: <span class="pad10">ZIP</span> <span class="pad30-l"><code>Size: {$formattedSize}</code></span> </blockquote> HTML; /** * Рекурсивно обчислює розмір директорії в байтах */ function sizeFolder(string $dir): int { $size = 0; $items = glob(rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . '*', GLOB_NOSORT); if ($items === false) { return 0; // Уникнення warning при недоступності } foreach ($items as $item) { if (is_file($item)) { $size += filesize($item); } elseif (is_dir($item)) { $size += sizeFolder($item); // Рекурсивний виклик } } return $size; } /** * Форматує байти у зручні одиниці (KB, MB, ...) */ function sizeFormat($bytes): string { $units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; $i = 0; while ($bytes >= 1024 && $i < count($units) - 1) { $bytes /= 1024; $i++; } return round($bytes, 2) . ' ' . $units[$i]; } ?>
Folder for calculation: ZIP
Size: 430.38 KB
В загальному випадку, необхідно правильно зформувати шлях до цільової директорії. В прикладі вище, цільова папка буде розшукуватись у поточній директорії зі скриптом, але можна й де-інде за потреби. При необхідності, можна у поточній папці обійти всі файли, використавши й таку функцію:
/* * Обхід всіх файлів у папці */ function read_all ($dir){ if(!is_dir($dir)) return false; $handle = opendir($dir); if($handle){ while(($fl = readdir($handle)) !== false){ $temp = iconv('GBK','utf-8',$dir.DIRECTORY_SEPARATOR.$fl); // конвертується в utf-8 формат if(is_dir($temp) && $fl!='.' && $fl != '..'){ echo 'Фолдер: ' . $temp. '<br>'; read_all($temp); }else{ if($fl!='.' && $fl != '..'){ echo 'Файл: '.$temp.'<br>'; } } } } } echo "<blockquote>"; read_all(__DIR__ ); echo "</blockquote>";
Ну й на цьому все сьогодні.