ホームページ >バックエンド開発 >PHPチュートリアル >PHP の「exec()」から標準エラー出力をキャプチャするにはどうすればよいですか?

PHP の「exec()」から標準エラー出力をキャプチャするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 07:39:12429ブラウズ

How Can I Capture Standard Error Output from `exec()` in PHP?

PHP の Exec() 後の標準エラー ストリームの取得

問題:

あなた' PHP の exec() 関数を使用してコマンドを再実行し、書き込まれた潜在的なエラー メッセージをキャプチャしたい

解決策:

PHP は、proc_open を使用して標準出力とエラー ストリームの両方を制御およびキャプチャするためのより包括的なアプローチを提供します。

使用方法:

  1. 初期化標準ストリームの動作を定義する入出力 (I/O) 記述子の仕様:
$descriptorspec = [
    0 => ["pipe", "r"],  // stdin
    1 => ["pipe", "w"],  // stdout
    2 => ["pipe", "w"],  // stderr
];
  1. proc_open を使用してコマンドを実行し、記述子の仕様を指定します:
$process = proc_open($command, $descriptorspec, $pipes, dirname(__FILE__), null);
  1. を使用して標準エラー パイプから読み取りますstream_get_contents:
$stderr = stream_get_contents($pipes[2]);

例:

次のスクリプト test.sh について考えます。

#!/bin/bash

echo 'this is on stdout';
echo 'this is on stdout too';

echo 'this is on stderr' >&2;
echo 'this is on stderr too' >&2;

PHP スクリプトでは、 test.sh を実行して stdout をキャプチャできます。標準エラー出力:

$descriptorspec = [0 => ["pipe", "r"], 1 => ["pipe", "w"], 2 => ["pipe", "w"]];
$process = proc_open('./test.sh', $descriptorspec, $pipes);

$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);

echo "stdout: $stdout";
echo "stderr: $stderr";

出力:

stdout: this is on stdout
this is on stdout too

stderr: this is on stderr
this is on stderr too

以上がPHP の「exec()」から標準エラー出力をキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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