PHP内でPERLスクリプトを実行してエラーメッセージをキャプチャする方法は?

StackOverflow https://stackoverflow.com/questions/2680192

  •  30-09-2019
  •  | 
  •  

質問

私は次のようなPerlスクリプトを実行しようとしています:

/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2'

Perlスクリプトが失敗すると、「Die」を使用して終了し、エラーメッセージを印刷します。手動で実行するときにそのエラーメッセージが表示されますが、PHPを介してキャプチャできません。

私は成功せずに以下を試しました:

exec($command,$output);
echo system($command,$output);
passthru($command);

何か案は?

役に立ちましたか?

解決

あなたは試すことができます:

$command = "/usr/bin/ec2-consistent-snapshot 'vol-dr3131c2' > /tmp/exec.out 2>&1"
exec($command)
echo file_get_contents('/tmp/exec.out');

'> /tmp/exec.out 2>&1'すべての出力を/tmp/exec.outにリダイレクトし、php echoのファイルバックにリダイレクトします。

他のヒント

PHPにはバックティックがありませんか?

$output = `$command 2> /tmp/command.err`;
if (looks_like_command_failed($output)) {
    $error_message = file_get_contents('/tmp/command.err');
}

ドキュメントに記載されている最初の例 システム() 関数は、出力がPHPによって受信されていない場合に機能する可能性があることに言及しています。この例では、TEMPファイルを使用せずに、STDOUTとは別にSTDERを受信します。ポスターは、System()がそうでない場合にこの方法が成功する理由を説明していません。したがって、ルートの問題に対する答えはありませんが、おそらく回避策です。

Perlスクリプトは、メッセージがSTDERRに送られると死ぬので、STDERとSTDOUTをキャプチャする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top