Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Архивирование протоколов, логов при превышении размера
Готовая универсальная функция архивирования файлов протоколов, логов и прочих подобных. Позволяет перезаписывать файл архива или добавлять в него. При добавлении файл переименовывается добавлением к имени файла текущей даты, что обеспечивает уникальность имени внутри архива.
/** архивирует переданный файл в архив, если он превышает заданный размер
* @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);
.
Прокомментировать/Отблагодарить