ホームページ >バックエンド開発 >PHPチュートリアル >PHP は Linux コマンド tail -f を実装します
今日、以前誰かから尋ねられた質問を突然思い出しました。PHP で Linux コマンド tail -f を実装する方法について分析してみましょう。ここで実装します。
これは、考えてみれば非常に単純です。ファイルのサイズが変更されたかどうかを確認するために、ファイルの変更された部分が出力されます。 、その中には詳細な分析がたくさんあります。
このとき、一度に大量の内容が出力され、見づらくなる可能性があるため、ここでは、コンテンツの長さがこのしきい値 8192 を超えた場合、最後の 8192 バイトのみが出力されるため、広い領域のリフレッシュによる視認性の問題は発生しません。
この質問がこのプログラムの核心であり、成功するかどうかはこの部分に依存します。ここでの実装は次のとおりです。
#!/usr/bin/env php <?phpif(2 != count($argv)){ fwrite( STDERR, "调用格式错误!使用格式 ./tail filename".PHP_EOL ); return 1;}$file_name = $argv[1];define("MAX_SHOW", 8192);$file_size = 0;$file_size_new = 0;$add_size = 0;$ignore_size = 0;$fp = fopen($file_name, "r");while(1){ clearstatcache(); $file_size_new = filesize($file_name); $add_size = $file_size_new - $file_size; if($add_size > 0){ if($add_size > MAX_SHOW){ $ignore_size = $add_size - MAX_SHOW; $add_size = MAX_SHOW; fseek($fp, $file_size + $ignore_size); } fwrite( STDOUT, fread($fp, $add_size) ); $file_size = $file_size_new; } usleep(50000);}fclose($fp);
コード実装 ここでの #!/usr/bin/env php の最初の行は、実行可能ファイル、実行可能ファイルを示します。 php はシステム PATH で検索されるため、移植性が高いという利点があります。
2016-02-22 11:28:51 改善
PHP 公式マニュアルを確認しました。fseek 関数はここで改善できます。この関数は 3 番目のパラメーターも受け入れます、オフセット ポインターのタイプを示します。デフォルトは SEEK_SET (先頭からのオフセット) ですが、現在位置からのオフセットを示す SEEK_CUR に設定することもできるため、ここでは fseek($fp, $ignore_size, $ignore_size) に変更されます。 ;