Скрипт на PHP работает только на Linux, т.к. использует в работе команду 'du'.
Отображает данные о занимаемом размере для указанных папок.
Выводит общий размер файлов на диске и размер занимаемый каждой папкой сайта в МБ.
Для полноты подстчета осталось добавить подсчет размера баз данных (пока не делал).
$ROOT_DIR = '/home/u/username';
$CONFIG = array(
'ROOT_DIR' => $ROOT_DIR,
'SPACE_LIMIT_MB' => 3200,
'SITE_QUOTA_MB' => 320,
'SITES' => array(
'example.org' => $ROOT_DIR . '/public_html',
'sitedemo.ru' => $ROOT_DIR . '/sites/sitedemo.ru'
)
);
function GetDirSizeKb($dir)
{
$res = exec("du -s $dir");
preg_match("/\d+/", $res, $KB);
return $KB[0];
}
function GetFreeSizeKb($space_used_kb, $space_limit_kb)
{
return $space_limit_kb - $space_used_kb;
}
function MakeHumanReadableSize($size_kbytes, $unit = 'auto')
{
if ($unit == 'auto') {
$size_bytes = (($size_bytes >= (1024 * 1024 * 1024)) ? round($size_kbytes / (1024 * 1024 * 1024), 2) . " TB" : (($size_kbytes >= (1024 * 1024)) ? round($size_kbytes / (1024 * 1024), 2) . " GB" : round($size_kbytes / 1024, 2) . " MB"));
} else {
switch (strtoupper($unit)) {
case 'TB':
$size_bytes = round($size_kbytes / (1024 * 1024 * 1024), 2) . " TB";
break;
case 'GB':
$size_bytes = round($size_kbytes / (1024 * 1024), 2) . " GB";
break;
case 'MB':
$size_bytes = round($size_kbytes / 1024, 2) . " MB";
break;
case 'KB':
$size_bytes = $size_kbytes . " KB";
break;
}
}
return $size_bytes;
}
function GetSiteSpaceUsage($sites)
{
$data = array();
foreach ($sites as $site => $site_dir) {
$data[$site] = GetDirSizeKb($site_dir);
}
return $data;
}
function FormatSiteSpaceUsageData($site_data)
{
$html = '';
global $CONFIG;
$quota_width = 500;
foreach ($site_data as $site => $used_space_kb) {
$used_space_width = round($quota_width * ($used_space_kb / ($CONFIG['SITE_QUOTA_MB'] * 1024)));
$free_space_width = $quota_width - $used_space_width;
$html .= "" . "$site" . '' . '' . MakeHumanReadableSize(GetFreeSizeKb($used_space_kb, $CONFIG['SITE_QUOTA_MB'] * 1024), 'MB') . "" . '' . MakeHumanReadableSize($used_space_kb, 'MB') . '' . "" . "";
}
return $html;
}
function ShowUsedSpaceDiagram($used_size_kb, $space_limit_kb)
{
$free_size_kb = GetFreeSizeKb($used_size_kb, $space_limit_kb);
$table_width = 500;
$used_width = round($table_width * ($used_size_kb / $space_limit_kb), 0);
$free_width = $table_width - $used_width;
$DATA = array(
used_width => $used_width,
free_width => $free_width,
space_used => MakeHumanReadableSize($used_size_kb, 'MB'),
space_free => MakeHumanReadableSize($free_size_kb, 'MB')
);
global $CONFIG;
$sites_data = FormatSiteSpaceUsageData(GetSiteSpaceUsage($CONFIG['SITES']));
$html = <<Занято / Свободно
Всего
$DATA[space_free]
$DATA[space_used]
$sites_data
HTML;
return $html;
}
function CreatePage($head, $body)
{
$html = <<http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
$head
$body
HTML;
echo $html;
}
function SetHeader()
{
return 'Данные использования дискового пространства';
}
function SetBody()
{
global $CONFIG;
$used_size_kb = GetDirSizeKb($CONFIG['ROOT_DIR']);
$space_limit_kb = $CONFIG['SPACE_LIMIT_MB'] * 1024;
return 'Данные использования дискового пространства
' . ShowUsedSpaceDiagram($used_size_kb, $space_limit_kb);
}
function main()
{
CreatePage(SetHeader(), SetBody());
}
main();
?>