18

MacOSのNSTaskを介してPHPCLIを実行していますが、この質問はCLI自体に関するものです。

パイプを聞いていstderrますが、実行しようとしているファイルに関係なく、何も出力されません。

  • ファイルタイプがプレーンテキストでない場合は、にstdout設定し?ます。
  • ファイルがエラーのあるphpスクリプトである場合でも、エラーメッセージはに出力されstdoutます。

エラーを処理するためのインタプリタへの切り替えはありstderrますか?解析以外のエラーを検出するオプションはありますstdoutか?

4

4 に答える 4

23

display_errorsディレクティブ(どこにでも設定可能)は、オプションでパラメーター " "を取り、 stdoutまたは完全に無効化されたエラー出力の代わりにstderrstderrにエラーを報告します。PHPのマニュアルエントリからの引用:

「stderr」は、エラーをstdoutではなくstderrに送信します。この値は、PHP5.2.4以降で使用できます。

または、コマンドラインインターフェイスを使用していて、独自のエラーを出力する場合は、コマンドラインのnput/outputストリームを再利用できます。

fwrite(STDERR, 'error message');

STDERRこれは、すでに開かれているstderrへのストリームです

または、CLIではなくこのスクリプトに対してのみ実行する場合は、filedハンドラーを開いて、php://stderrそこにエラーメッセージを書き込むことができます。

$fe = fopen('php://stderr', 'w');
fwrite($fe, 'error message');
于 2011-06-22T23:08:44.563 に答える
9

phpインタープリターによって送信されたエラーメッセージをstderr-pipeに送信する場合は、次のように設定display_errorsする必要があります。stderr

于 2011-06-22T23:06:43.903 に答える
2

これは、エラーメッセージを適切に解析するために、PHPレルムからシェル環境に戻るために必要です。PHPからシェルに終了ステータスコードを返すには、exit(1)または任意の整数を使用する必要があります。

fwrite(STDERR, 'error message'); //output message into 2> buffer
exit(0x0a); //return error status code to shell 

次に、crontabエントリは次のようになります。

30 3 * * * /usr/bin/php /full/path/to/phpFile.php >> /logdir/fullpath/journal.log 2>> /logdir/fullpath/error_journal.log
于 2016-06-16T08:51:51.197 に答える
1

file_put_contents()「php:// stderr」とともに使用して、次のような標準エラーに出力することもできます。

php -r 'file_put_contents("php://stderr", "Hiya, PHP!\n"); echo "Bye!\n";' 1>/dev/null

これは、Bashシェルで実行すると、「Hiya、PHP!\ n」を標準エラーに出力し、標準出力には何も出力しません。

于 2013-05-24T16:44:43.087 に答える