AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Архивирование протоколов, логов при превышении размера

Готовая универсальная функция архивирования файлов протоколов, логов и прочих подобных. Позволяет перезаписывать файл архива или добавлять в него. При добавлении файл переименовывается добавлением к имени файла текущей даты, что обеспечивает уникальность имени внутри архива.

/** архивирует переданный файл в архив, если он превышает заданный размер
 * @param string $file файл, подлежащий архивированию. Расширение обязательно должно присутствовать!
 * @param boolean $add добавлять или перезаписывать архив
 * @param int $MaxSize максимальный размер лога, который нужно упаковывать, по умолчанию 1Мб
 */

function ArchiveLog($file, $add=false, $MaxSize=1048576){
    if(@filesize($file) < $MaxSize)return;
    $coma=strrpos($file, '.');
    $fileArxive=substr($file,0,$coma).'.zip';
    // переименовываю, т.к. в него может идти запись из паралельного потока
    $fileAdd=substr($file,0,$coma) .'_'. date("Y_m_d") . substr($file,$coma);
    rename($file, $fileAdd);
    $file=basename($add ? $fileAdd : $file );// в архиве должны быть уникальные имена файлов
    $zip = new ZipArchive;
    // CREATE - Создаем архив
    // OVERWRITE - Перезаписываем 
    if($zip->open($fileArxive, ($add&&is_file($fileArxive)? ZIPARCHIVE::CHECKCONS : ZipArchive::OVERWRITE) ) === TRUE){
        // первый параметр - откуда взять, второй как назвать внутри архива
        $zip->addFile($fileAdd, $file);
        $zip->close();
        echo "<br>\nУпаковал ".$file." в ".$fileArxive;
	unlink($fileAdd);
    }else echo 'Ошибка создания архива '.$fileArxive;
}

// пример использования
ArchiveLog($_SERVER['DOCUMENT_ROOT'].'/log/protocol.log',true, 100);

.

© Copyright 2008-2017 by KDG