# Розмір теки
До уваги надається функція, яка визначає розмір теки з усіма входженнями піддеректорій в байтах і функція для перерахунку їх в кіло- мега- і гіга- байти. Вона рекурсивно обходить вкладені директорії, що забезпечує точний розрахунок.
<?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];
}
?>
Error: Folder not accessible.