Запись, хранение и удаление логов через несколько дней на PHP

01.07.2020

Если стоит задача сохранять логи на несколько дней и чистить более старые, очень хорошо выручает функция ниже.

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

В итоге в определенной папке будут для каждого дня сохранятся логи в отдельный файл, а после старые удаляться. Так же для удобства в каждую запись ставим текущую дату и время.

function saveLogSomeDays($toWrite = false, $logName = "", $days = 3)
	{
		if(empty($logName) || empty($toWrite))
			return false;

		$days = (int) $days;

		$dateTime = date("d.m.Y H:i:s");

		$dir = $_SERVER['DOCUMENT_ROOT'].'/ТУТ_ПУТЬ_ДО_ПАПКИ_ГДЕ_БУДЕМ_ХРАНИТЬ_ЛОГИ/'.$logName.'/';

		if(!file_exists($dir))
			mkdir($dir, 0777, "true");

		// Записываем информацию в файл текущего дня
		$fileName = $logName ."__". date("Y-m-d") . ".log";

		$fp = fopen ($dir . $fileName, "a");

		fwrite($fp, "Дата/время: ".$dateTime."\n\n");

		fwrite($fp, print_r($toWrite, true)."\n\n");

		fwrite($fp, "-----------------------------\n\n");

		fclose($fp);

		// Пройдемся по файлам папки, если файл старше $days дней, удалим его
		foreach (glob($dir."*") as $file)
		{
			if(time() - filectime($file) > (86400 * $days)) {
				unlink($file);
			}
		}
	}

Возврат к списку