2014-01-13 49 views
0

我正在开发一个项目,需要阅读日志并检查错误。我使用的是while循环,如下所示:我怎样才能逐行读取文件10秒?

while($count < 10) { 
     $count++; 
     # Stop waiting if an exception is thrown 
     $sdata = file($logfile); 
     $lastline = $sdata[count($sdata)-1]; 
     if(startsWith($lastline, "Running:") == false or startsWith($lastline,"Executing:") == false) { break; } 
     sleep(1); 
} 

这是检查日志每一秒,不过,我需要阅读每一行,因为它进来我如何读取日志的最后一行,因为它是在保持while循环的超时值的情况下写入的?

+0

您是否试图在文件中观察每秒更改一次的文件10秒,或者您是否试图尽可能频繁地轮询文件10秒? – zneak

+0

我试图尽可能频繁地轮询该文件10秒 – user3063045

回答

0

这是否做你所需要的?

$time = time(); 
$stop = $time+10; 
while($time < $stop) { 
    $time = time(); 
    # Stop waiting if an exception is thrown 
    $sdata = file($logfile); 

    $lastline = end($sdata); 
    if(startsWith($lastline, "Running:") == false or startsWith($lastline,"Executing:") == false) { break; } 

} 
+0

我删除了循环,因为你只是在最后一行的loking –

+0

谢谢!完美的作品! – user3063045

+0

请注意,如果您的程序输出速度比您可以在内存中读取整个文件的速度快,则此方法不保证您将处理*每行*。日志文件越大,错过一行的可能性就越大。 – zneak