Вывод логов на страницу ( php )
Скрипт ищет по указаному пути файлы заданые регулярным выражением glob и
дает выбрать файл для просмотра лога или удаления файла.
function searchLogs($path,$fileFormat) {
### Просмотр лог файлов
#
# searchLogs('/var/log/apache2/','*{log}');
# путь к логом от корня, регулярка искомых файлов glob.
###
# ищем в цикле файлы по формату
foreach (glob($path.$fileFormat,GLOB_BRACE) as $filename) {
# двумерный ассоциативный массивм
$arrfileInfo[basename($filename)] = array (
'base64' => base64_encode(basename($filename)), // инкодируем для навигации в html => select
'filesize' => filesize($filename)
);
}
# получаем и сравниваем данные (защита от левых GET параметров)
if(isset($_GET['file'])) {
if(!array_key_exists(''.base64_decode(trim($_GET['file'])).'', $arrfileInfo)) { // взяв гет, сверяем есть ли в массиве этот ключ
echo '<div>error:',__line__,'</div>';
} else {
$selectFile = base64_decode(trim($_GET['file']));
// очистить файл
if(isset($_POST['del'])) {
file_put_contents($path.$selectFile, '');
}
}
}
echo '<span style="font-size:12px;">'.$path.'</span>';
# выводим список найденых файлов
echo '<select onchange="window.location.href = \'?log&file=\' + this.options[this.selectedIndex].value;"> ';
echo '<option '.((isset($_GET['file'])) ? '' : 'selected').' disabled>выберите файл</option>';
# выводим список файлов в цикле
foreach($arrfileInfo as $namefile=>$value) {
echo '<option value="'.$arrfileInfo[$namefile]['base64'].'" '.((isset($_GET['file']) and $selectFile==$namefile) ? 'selected' : '').'> '.$namefile.' '.$arrfileInfo[$namefile]['filesize'].' byte</option>';
}
echo '</select> <form action="" method="post"> <button type="submit" name="del">очистить</button> <a href="">[обновить]</a></form>';
# выводим данные файла
echo '<div id="wlig" style="overflow:scroll; width:97%; height:400px; border-left:dashed 1px black; border-top:dashed 1px black; white-space:pre; font-size:12px; margin-top:15px;"><div style="padding:10px;">';
if(isset($selectFile)) {
if (file_exists($path.$selectFile)) {
// сбрасывает буфер вывода, избегаем переполнения памяти выделенной под скрипт, если этого не сделать файл будет читаться в память полностью!
//while(ob_get_level()) { ob_end_clean(); }
# читаем файл и отправляем его на экран
if ($fd = fopen($path.$selectFile, 'rb')) {
while (!feof($fd)) {
print fread($fd, 1024);
}
fclose($fd);
}
} else {
echo 'не найдено';
}
}
echo '</div></div> <script>var block = document.getElementById("wlig"); block.scrollTop = block.scrollHeight; </script>';
}