ホームページ >バックエンド開発 >PHPチュートリアル >PHP はシェル スクリプトを実行し、標準出力とエラー出力を取得します。
PHP コードでシェル スクリプトを実行し、標準出力 (stdout) と エラー出力 (stderr) をそれぞれ取得する必要があります。シェルのリダイレクトを使用して標準出力とエラー出力をファイルに配置し、phpを使用してファイルを読み取ることは可能ですが、出力ファイルの内容はphpに転送された後は必要なくなります。シェルの出力を変数にリダイレクトする方法はありますか? スクリプトの機能を実行するには、PHP単体では完結できず(R言語でスクリプトを実行する)、通常出力とエラー出力の両方をフィードバックする必要があります。
2.すでに試しています
は標準出力とエラー出力をそれぞれファイルに入れることができますが、一時ファイルを生成します。 リーリー 次に、php は
ファイルの内容を読み取り、それを返します。
out.txt
和err.txt
これの欠点: 中間ファイルが生成されます。シェルコマンド my_cmd
の実行に長い時間がかかる場合 (おそらく数分)、同じユーザーが短期間に複数の http リクエストを開始すると、PHP は my_cmd
を実行します。 code> を実行する必要があります。記述の競合を避けるために、それぞれの
不要な中間ファイルが大量に生成されますmy_cmd
执行的时间比较长(可能要几分钟),那么同一用户如果短时间内多次发起http请求使得php执行my_cmd
,则需要每次out.txt
和err.txt
。たとえ時間内に削除されたとしても、I/O オーバーヘッドは依然として存在しますが、これは回避できると期待されます。
phpの
リーリー
exec()
内部のパラメータは「スクリプト実行時の画面出力」の内容のみを取得するようですが、これはstdout、またはstdoutとstderrの混合であり、個別に取得することはできません。