ホームページ  >  記事  >  バックエンド開発  >  PHP はシェル スクリプトを実行し、標準出力とエラー出力を取得します。

PHP はシェル スクリプトを実行し、標準出力とエラー出力を取得します。

WBOY
WBOYオリジナル
2016-09-08 08:29:361528ブラウズ

1.質問

PHP コードでシェル スクリプトを実行し、標準出力 (stdout)エラー出力 (stderr) をそれぞれ取得する必要があります。シェルのリダイレクトを使用して標準出力とエラー出力をファイルに配置し、phpを使用してファイルを読み取ることは可能ですが、出力ファイルの内容はphpに転送された後は必要なくなります。シェルの出力を変数にリダイレクトする方法はありますか? スクリプトの機能を実行するには、PHP単体では完結できず(R言語でスクリプトを実行する)、通常出力とエラー出力の両方をフィードバックする必要があります。

2.すでに試しています

shell の

Redirection

は標準出力とエラー出力をそれぞれファイルに入れることができますが、一時ファイルを生成します。 リーリー 次に、php は

ファイルの内容を読み取り、それを返します。

out.txterr.txtこれの欠点: 中間ファイルが生成されます。シェルコマンド my_cmd の実行に長い時間がかかる場合 (おそらく数分)、同じユーザーが短期間に複数の http リクエストを開始すると、PHP は my_cmd を実行します。 code> を実行する必要があります。記述の競合を避けるために、それぞれの

の名前は異なります。これにより、

不要な中間ファイルが大量に生成されますmy_cmd执行的时间比较长(可能要几分钟),那么同一用户如果短时间内多次发起http请求使得php执行my_cmd,则需要每次out.txterr.txt。たとえ時間内に削除されたとしても、I/O オーバーヘッドは依然として存在しますが、これは回避できると期待されます。 phpの

関数:

リーリー exec()内部のパラメータは「スクリプト実行時の画面出力」の内容のみを取得するようですが、これはstdout、またはstdoutとstderrの混合であり、個別に取得することはできません。

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