PHP スクリプトで Linux コマンドが複数回実行されるのを避けるための解決策を探しています

PHP スクリプトで Linux コマンドが複数回実行されるのを避けるための解決策を探しています

Angular に出力を提供する PHP スクリプトがあります。このスクリプトは、Perl スクリプトから情報を取得するのに役立ちます。exec()コマンドを使用して、PHP でスクリプトを呼び出しています。必要なことは得られていますが、問題は時間がかかることです。PHP で配列を作成するために、同じスクリプトを 3 回実行しています。例:

exec("/usr/bin/reports -h -r -t ".$this->name." | grep -o '^\S*' | sed '1 d'",$report_id);
exec("/usr/bin/reports -h -r -t ".$this->name." | grep -oP '(?<= ).*' | sed '1 d'",$titles);
exec("/usr/bin/reports -h -r -n ".$this->name." | grep -oP '(?<= ).*' | sed '1 d'",$fullnames); 

ご覧のとおり、パラメータを変更するためだけに同じスクリプトを複数回実行しています。

最初のコマンドで を保存しreport_id、2 番目のコマンドで位置を保存し、3 番目のコマンドでフルネームを保存します。これらの 3 つのコマンドを 1 つにまとめるソリューションが必要です。時間の複雑さを回避するためにご協力ください。

答え1

  1. AWK を使用することをお勧めします。AWK は複数の正規表現を解析し、フィールドを自動的に分離できます。AWK はすべての Unix で使用できる簡単で小さな言語で、特にこのような作業のために作成されています。
  2. より良い方法は、出力を取得して PHP で処理することです。実行()出力を行の配列で返します。preg_split()grep/sed/cut ジョブを実行できます。
  3. tee コマンドを使用すると、レポートの出力を複数のパイプで使用できます。
  4. 最後に、カスタマイズされたロック機構を使用することもできますが、お勧めしません。

関連情報