我想建立一個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