С помощью программы 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 и добавив нужных классов можно улучшить отображение к примеру до такого:
Переходя по ссылкам (названия поддиректорий) можно более детально посмотреть информацию по интересующим каталогам.
Скрипт можно доработать, чтобы результат сортировался в порядке убывания занимаемого дискового пространства.
Рубрики:
PHP
grep - удобная и быстрая команда, здесь приведены примеры как произвести рекурсивный поиск в каталоге, поиск среди запущенных процессов и другие.
В статье приводится пример кода для получения директории в которой находится файл компонента.
В статье приводится пример того как можно получить путь до зарегистрированного файла по его ID с помощью метода CFile::getPath($fileId). Так же показано где можно получить ID зарегистрированного файла.
В статье приводится пример кода подключения bitrix без подключения шаблона сайта. Так же описано когда это может пригодится.
В статье приводится пример регистрации собственного события в bitrix и добавления на него обработчика.
В статье приводится пример того как можно подключить только компонент битрикс без подключения его шаблона, чтобы можно было вызвать его метод или получить значения свойств