2014-01-13 86 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