Linux コマンドを実装する
php メソッド: 1. PHP サンプル ファイルを作成します; 2. 最初の行に「#!/usr/bin/env php」と入力します; 3. 「if(2 != count」を渡します) ($argv)){...}" およびその他のコードは、Linux コマンド "tail -f" を実装できます。
この記事の動作環境: linux5.9.8 システム、PHP バージョン 7.1、Dell G3 コンピューター。
php は Linux コマンドをどのように実装しますか?
PHP は Linux コマンドを実装しますtail -f
突然今日は、以前に誰かが私に尋ねた質問、つまり PHP を介して Linux でコマンド tail -f
を実装する方法を考えて、ここで分析して実装してみます。
これは考えてみれば非常に単純で、ファイルのサイズが変化したかどうかをループで検出し、変化があればファイルの変更部分を出力するというものです。には、多くの詳細が含まれます。詳細な分析は次のとおりです。
このとき、一度に多くの内容が出力され、見づらくなる可能性があるため、ここでのしきい値8192
、コンテンツの長さがこのしきい値を超える場合、最後の8192
バイトのみが出力されるため、広い領域の更新による不鮮明な視認性の問題は発生しません。 。
この質問はこのプログラムの核心であり、成功するかどうかはこの部分のパフォーマンスに依存します。
私の実装は次のとおりです:
$fp
. ここでのファイル ハンドルは、全体で 1 回だけ開いたり閉じたりする必要があることに注意してください。したがって、ループの外に置きます。 file_size
および file_size_new
を 0 に初期化します。 file_size_new
ファイル サイズ。php でファイル サイズを取得する前に、関数 clearstatcache()
を実行してファイルをクリアする必要があることに注意してください。ステータス キャッシュ、それ以外の場合は取得 ファイル サイズは異なる場合があります。 add_size = file_size_new - file_size
を計算して、ファイル サイズが変化するかどうかを確認します。変化する場合は、ファイル ポインタを指定された位置に移動し、新しく追加されたコンテンツを出力して、file_size を更新します
値は new_file_size
です。 #!/usr/bin/env php <?php if(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);
PHP ビデオ チュートリアル>>
以上がPHPでLinuxコマンドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。