7 нояб. 2009 г.

Вывод логов Apache с помощью PHP

Скрипт для показа логов Apache.
Выводит последние 150 строчек файла в обратном порядке.

Вывод списка файлов для просмотра:

<?php

//функция возвращает список файлов в папке
function getFiles(){
$files = array();
if ($handle = opendir("/var/www/httpd-logs")) { //папка с логами апача
while (false !== ($file = readdir($handle))) {
//берём только файлы, оканчивающиеся на '.log'
if(end(explode(".", $file)) == "log"){
$files[] = $file;
}
}
}
closedir($handle);
sort($files); //сортируем файлы по имени
return $files;
}

$files = getFiles();

//для каждого файла выводим ссылку, по которой будет вызываться второй скрипт
for($i=0;$i<sizeof($files);$i++){
print "<a href=\"log.php?log=".substr($files[$i], 0, strlen($files[$i])-4)."\">".$files[$i]."</a><br /> ";
}

?>


Вывод содержимого файла:


<?php

$logFilename = $_GET["log"];
if(!isset($logFilename)){
$logFilename = "myserver.error"; //лог файл по умолчанию (без расширения)
}

//убираем плохие символы
$logFilename = str_replace("/","", $logFilename);
$logFilename = str_replace("\\","", $logFilename);
$logFilename = str_replace("..","", $logFilename);
$logFilename = str_replace(";","", $logFilename);
$logFilename = str_replace("\n","", $logFilename);
$logFilename = str_replace("\"","", $logFilename);
$logFilename = str_replace("\'","", $logFilename);

$logFilename = $logFilename.".log"; //добавляем к файлу расширение

if(!file_exists("/var/www/httpd-logs/".$logFilename)){
$logContent = "file not found.";
} else {
exec("/usr/bin/tail -n 150 /var/www/httpd-logs/".$logFilename, $logContent, $error);
$logContent = array_reverse($logContent);
$logContent = implode($logContent, "<br />\n");
print "<b>".$logFilename."</b><br /><br />";
}
print $logContent;

?>

Комментариев нет: