С помощью программы ncdu и ей подобных можно легко проанализировать объем занятого дискового пространства, но не всегда удобно подключаться к серверу, писать необходимые комманды, поэтому я решил написать для себя web вариант подобной программы, буду рад если кому-то еще он пригодится.
Для получения размера конкретного каталога будет использоваться команда du
с параметрами -sh
, что вернет размер каталога в человекопонятном виде, например: 1K, 234M, 2G.
Суть работы самого скрипта проста: получаем путь до каталога, который необходимо проанализировать, далее запрашиваем размер вложеных в него файлов и папок. Путь до интересующего нас каталога задан по-умолчанию и может быть изменен с помощью значения GET параметра.
<?php
$path = '/var/www/test';
if(!empty($_GET["dir"])) {
$path = $_GET["dir"];
}
if (!empty($path) && is_dir($path)) {
$size = getSize($path);
echo "<h2>Директория: {$path} ({$size})</h2>";
$directorys = scandir($path);
unset($directorys[0]);
unset($directorys[1]);
if (!empty($directorys)) {
echo '<ul>';
foreach ($directorys as $one) {
$size = getSize($path . '/' . $one);
echo '<li><a href="?dir=' . $path . '/' . $one . '">' . $one . '</a> ' . $size . '</li>';
unset($out);
}
echo '</ul>';
}
}
else {
echo '<p>Неверный или пустой путь!</p>';
}
function getSize($path)
{
exec("du -sh {$path}", $out);
$temp = explode(' ', $out[0]);
return $temp[0];
}
Результат:
Подключив bootstrap и добавив нужных классов можно улучшить отображение к примеру до такого:
Переходя по ссылкам (названия поддиректорий) можно более детально посмотреть информацию по интересующим каталогам.
Скрипт можно доработать, чтобы результат сортировался в порядке убывания занимаемого дискового пространства.