我想建立一个PHP小恶魔,分析在Linux系统上的日志文件时检测在PHP中丢失的FileHandler。 (例如,遵循系统日志)。听日志文件
我设法通过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);
?>
请你怎么做到这一点的代码添加到您的问题,这样的改进具体的建议可以进行。 – hakre
@hakre我添加了一些代码 – Martin
你有与流回调试验以及http://php.net/manual/en/function.stream-notification-callback.php?他们可能会给你一些提示。 – hakre