Информер контроля расхода памяти сайта

Описание работы, исходники, коментирование.


Информер контроля памяти сайтаНеобходимость в оперативном контроле оставшейся памяти на диске, выделенной для конкретного сайта, возникает, когда на одном хостинге расположено несколько сайтов и с каждым администратор работает только через панель управления без возможности входа в админку хоста. Например, если Вы разрабатываете сайты для клиентов и размещаете из на своём хосте или сервере, то скорее всего объём выделенной под сайт дисковой памяти будет ограничен и заранее обговорен с заказчиком. Но как отслеживать текущий размер занимаемых файлов и оперативно извещать администратора?
Описываемое ниже решение реализует следующие задачи:

  1. Подсчитывает суммарный объём файлов в папке (корневой) и подпапках.
  2. Переводит в процентное отношение свободно / занято.
  3. Создаёт графический информер с необходимой информацией

В построении информера задействованы всего три файла:

  1. Исполнительный файл – informer.php
  2. Файл шрифта - hooge05_55cyr10_6.gdf
  3. Графический файл индикатора наполнения - gr100rgb.png

Архив с файлами можно скачать здесь с облака  или здесь напрямую и распаковать в папке сайта на Ваше усмотрение. На хостинге должена работать библиотека PHP GD library, но на сегодняшний день эти возможности предоставляют по умолчанию практически все хостинг провайдеры.

Ниже приведён програмный код исполняемого файла с достаточным для понимания коментированием процессов.

PHP
<?php
/**
 * @author admin@my-skills.ru
 * @copyright 2012
 * @http://my-skills.ru/public/informer_kontrolya_pamyati_sayta.html
 */
 //Функция определения объёма данных в папке и подпапках
$path='../../'; //Относительное смещение до корневой или целевой папки с файлами
function getFilesSize($path)
{
    $fileSize = 0;
    $dir = scandir($path);
    
    foreach($dir as $file)
    {
        if (($file!='.') && ($file!='..'))
            if(is_dir($path . '/' . $file))
                $fileSize += getFilesSize($path.'/'.$file);
            else
                $fileSize += filesize($path . '/' . $file);
    }
    
    return $fileSize;
}
$saizes = getFilesSize($path);//Получаем размер папки в байтах
$new_string = substr_replace (number_format($saizes, -3, ',', ' '), ",", -4, 1);//Форматируем в удобочитаемую 
//echo "Вес сайта - ".$new_string." Kb.";//Выводим размер папки в килобайтах
$saizhost = 3300000000;//Размер хоста
function grafic_saiz($saizes, $saizhost){
    $procent = $saizhost/100;
    $procentout = round($saizes/$procent);//Задействованая память в процентах
    $available_memory_kb=$saizhost-$saizes;//Доступная память
    $available_memory = number_format( round($available_memory_kb/1000000, 1), 1, ',', ' ');//Округляем и формaтируем для мегабайтного представления
    $textzaiz= "Использовано: ".$procentout." %";
    $textzaiz2= "Доступно ".$available_memory."Mb";

    $im = ImageCreate(120, 35);//задаём размер информера
    //Задаём цвета палитры 
    $red = ImageColorAllocate ($im, 255, 0, 0);
    $black = ImageColorAllocate ($im, 0, 0, 0);
    $wait = ImageColorAllocate ($im, 200, 200, 200);
    $fonwait = ImageColorAllocate ($im, 255, 255, 255);
    $grin = ImageColorAllocate ($im, 0, 100, 0);
    $yellow = ImageColorAllocate ($im, 255, 200, 0);
    //Загружаем шрифт из файла
    $font = imageloadfont("hooge05_55cyr10_6.gdf");
    imagefill($im, 0, 0, $wait);//Заливка фона информера
    //Чертим внутренний прямоугольник индикатора
    ImageLine($im, 10, 10, 110, 10, $grin); ImageLine($im, 10, 15, 110, 15, $grin);
    ImageLine($im, 9, 10, 9, 15, $grin); ImageLine($im, 110, 10, 110, 15, $grin);
    //Чертим бордер информера
    ImageLine($im, 0, 0, 119, 0, $grin); ImageLine($im, 0, 34, 119, 34, $grin);
    ImageLine($im, 0, 0, 0, 34, $grin); ImageLine($im, 119, 0, 119, 34, $grin);
    imagefilledrectangle($im, 10, 11, 100+9, 14, $fonwait);//нижний слой индикатора-белый
    imagestring($im, $font, 3, 2, "|-Informer memory-|", $grin);//пишем название информера
    //проводим анализ использованной памяти и выводим информацию в информер
    if($procentout>100){$limitmemory=100;
    imagestring($im, $font, 5, 17, $textzaiz, $black);
    imagestring($im, $font, 5, 25, "Превышение лимита !", $red);
    }else{$limitmemory=$procentout;
    imagestring($im, $font, 5, 17, $textzaiz, $black);
    imagestring($im, $font, 5, 25, $textzaiz2, $black);
    }
    //Наложение индикатора индикатора
    $dest = imagecreatefrompng('gr100rgb.png');
    imagecopymerge ( $im, $dest, 10, 11, 0, 0, $limitmemory, 4, 100);
        
    header('Content-type: image/png');//задаём формат вывода
    imagepng($im);//вывод в поток
    imagedestroy($im);//освобождаем память
}
grafic_saiz($saizes, $saizhost);
?>

В переменной $path='../../'; необходимо выставить относительный путь смещения до целевой или корневой папки, а в $saizhost необходимо указать допустимый объём памяти в байтах.

Внедряется информер как обычный графический объект.

HTML
<img src="http://ваш-домен.ру/admin/informer/informer.php" />

Информер состояния расхода памяти сайта Информер контроля расхода памяти сайта - предел

Теперь при загрузке страницы на которой установлен информер скрипт выполнит подсчёт рабочего пространства и выведет информацию. По мере приближения к критическим отметкам полоса индикатора будет плавно переходить сначала в жёлтый, а после в красный цвет. При превышении выделенной памяти появится сообщение: «превышение лимита !».

Совершенно не сложно подключить отправку почтового сообщения администратору при приближении к границе доступной памяти.

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика