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