Шляхом Альбірео

НовиниЗаписиPHPРозмір директорії

2022.07.14
Скрипт для розрахунку розміру директорії ( теки ).
Note

До уваги надається функція, яка визначає розмір теки з усіма входженнями піддеректорій в байтах і функція для перерахунку їх в кіло- мега- і гіга- байти.

/* Тека, для прикладу, називається "zip" і знаходиться в поточній директорії. */

[PHP]

<?php echo('<blockquote>Folder for calculation: <span class="pad10">' . 'ZIP' . '</span><span class="pad30-l"><code>Size : ' . sizeFormat(sizeFolder( __DIR__ . DIRECTORY_SEPARATOR . 'zip')) . '</code></blockquote>'); function sizeFolder ($dir) // Функція розміру директорії в байтах { $size = 0; foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each) { $size += is_file($each) ? filesize($each) : sizeFolder($each); } return $size; } function sizeFormat($bytes) // Функція розмірності { $label = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); for ($i = 0; $bytes >= 1024 && $i < (count($label) - 1); $bytes /= 1024, $i++) ; return (round($bytes, 2) . " " . $label[$i]); } ?>

Результат роботи майже без стилізації:

Folder for calculation: ZIPSize : 1.69 KB
Note

Або, в зробити snippet в Albireo і виводити на сторінках таким чином:

/* Тека, для прикладу, називається "zip" і знаходиться в поточній директорії. */

[PHP]

<?php // Підключимо сніппет ДО ВИВОДУ результату. Наприклад, на початку сторінки в <body>. snippet('size-folder'); // Виводимо відосно поточної сторінки і стилізуємо за бажанням. echo('<blockquote>Folder for calculation: <span class="pad10">' . 'ZIP' . '</span><span class="pad30-l"><code>Size : ' . sizeFormat(sizeFolder(__DIR__ . DIRECTORY_SEPARATOR . 'zip')) . '</code></blockquote>'); ?>

Результат буде однаковий. При цьому вважається, що у сніппеті size-folder.php містяться самі функції:

/* Сніппет розрахунку і розмірності. */

[PHP]

<?php // Функція розміру теки в байтах function sizeFolder ($dir) { $size = 0; foreach (glob(rtrim($dir, '/').'/*', GLOB_NOSORT) as $each) { $size += is_file($each) ? filesize($each) : sizeFolder($each); } return $size; } // Функція розмірностей function sizeFormat($bytes) { $label = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); for ($i = 0; $bytes >= 1024 && $i < (count($label) - 1); $bytes /= 1024, $i++) ; return (round($bytes, 2) . " " . $label[$i]); } ?>