ホームページ >バックエンド開発 >PHPの問題 >PHPでLinuxコマンドを実装する方法

PHPでLinuxコマンドを実装する方法

藏色散人
藏色散人オリジナル
2021-12-08 11:00:493543ブラウズ

Linux コマンドを実装する

php メソッド: 1. PHP サンプル ファイルを作成します; 2. 最初の行に「#!/usr/bin/env php」と入力します; 3. 「if(2 != count」を渡します) ($argv)){...}" およびその他のコードは、Linux コマンド "tail -f" を実装できます。

PHPでLinuxコマンドを実装する方法

この記事の動作環境: 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 です。
    • usleep(50000)、1/20 秒間スリープします。

コードの実装

#!/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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。