【发布时间】:2012-05-31 06:55:18
【问题描述】:
我正在尝试用 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);
?>
【问题讨论】:
-
请将您如何执行此操作的代码添加到您的问题中,以便提出具体的改进建议。
-
@hakre 我添加了一些代码
-
您是否也尝试过流回调php.net/manual/en/function.stream-notification-callback.php?他们可能会给你一些提示。
-
只是回答这个问题,现在问题似乎解决了:它对我不起作用,就像这条评论 php.net/manual/en/… 建议的那样。我猜流函数非常有效地读取任何内容,但不监视其他内容。