До уваги надається функція, яка визначає розмір теки з усіма входженнями піддеректорій в байтах і функція для перерахунку їх в кіло- мега- і гіга- байти.
/* Тека, для прикладу, називається "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
Або, в зробити 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]);
}
?>