我正在尝试用 PHP 构建一个小恶魔,用于分析 linux 系统上的日志文件。(例如,遵循系统日志)。
我设法通过打开文件fopen
并使用stream_get_line
. 我的问题从被监控的文件被删除并重新创建时开始(例如在轮换日志时)。然后程序不再读取任何内容,即使文件变得比以前大。
有没有一个优雅的解决方案? stream_get_meta_data
没有帮助,tail -f
在命令行上使用显示同样的问题。
编辑,添加了示例代码我试图将代码精简到最低限度来说明我在寻找什么
<?php
$break=FALSE;
$handle = fopen('./testlog.txt', 'r');
do {
$line = stream_get_line($handle, 100, "\n");
if(!empty($line)) {
// do something
echo $line;
}
while (feof($handle)) {
sleep (5);
$line = stream_get_line($handle, 100, "\n");
if(!empty($line)) {
// do something
echo $line;
}
// a commented on php.net indicated it is possible
// with tcp streams to distinguish empty and lost
// does NOT work here --> need somefunction($handle)
if($line !== FALSE && $line ='') $break=TRUE;
}
} while (!$break);
fclose($handle);
?>