PHPでtailコマンドなどの動きをしたいのですが、どうやってファイルに追加するのを見ることができますか?
25470 次
6 に答える
24
魔法のような方法があるとは思えません。ファイルサイズを継続的にポーリングし、新しいデータを出力するだけです。これは実際には非常に簡単で、実際に注意する必要があるのは、ファイル サイズやその他の統計データが php にキャッシュされることだけです。clearstatcache()
これに対する解決策は、データを出力する前に呼び出すことです。
エラー処理を含まない簡単なサンプルを次に示します。
function follow($file)
{
$size = 0;
while (true) {
clearstatcache();
$currentSize = filesize($file);
if ($size == $currentSize) {
usleep(100);
continue;
}
$fh = fopen($file, "r");
fseek($fh, $size);
while ($d = fgets($fh)) {
echo $d;
}
fclose($fh);
$size = $currentSize;
}
}
follow("file.txt");
于 2009-07-09T07:27:53.963 に答える
11
$handle = popen("tail -f /var/log/your_file.log 2>&1", 'r');
while(!feof($handle)) {
$buffer = fgets($handle);
echo "$buffer\n";
flush();
}
pclose($handle);
于 2013-01-04T20:31:05.967 に答える
5
Google コードで php-tail をチェックアウトします。これは PHP と Javascript を使用した 2 つのファイルの実装であり、私のテストではオーバーヘッドがほとんどありません。
grep キーワードによるフィルタリングもサポートしています (フレームレートなどを毎秒吐き出す ffmpeg に役立ちます)。
于 2012-12-11T12:52:54.193 に答える
2
$handler = fopen('somefile.txt', 'r');
// move you at the end of file
fseek($handler, filesize( ));
// move you at the begining of file
fseek($handler, 0);
おそらく、 stream_get_lineの使用を検討したいと思うでしょう。
于 2009-07-09T07:17:12.300 に答える
2
ファイルサイズをポーリングする代わりに、ファイルの変更時刻を定期的にチェックします: filemtime
于 2009-07-09T09:31:17.413 に答える