Linux システムのログファイルを分析する小さなデーモンを PHP で構築しようとしています。(例:syslogをたどる)。
でファイルを開き、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);
?>