38

概要

驚くべきことに、GoogleやSOでこれについて何も見つけることができませんでした。PHP で例外をスローすると、コンソールに 2 回表示され、エラー メッセージとスタック トレースが表示されます。最初に印刷されたときは「PHP Fatal error: ...」と表示され、2 回目は単に「Fatal error: ...」と表示されます。これがApacheプラグインのバージョンであることはテストしていません。

安全のために一部の名前空間とパスは「...」で短縮されています。

$ php コード/com/.../tabular_data.php
PHP 致命的なエラー: /home/codemonkey/.../tabular_data.php:56 でメッセージ「ファイル タイプがサポートされていません」を含むキャッチされない例外「例外」
スタックトレース:
#0 /home/codemonkey/.../tabular_data.php(88): com\...\Tabular_Data->loadFromFile('/home/codemonke...', false)
#1 /home/codemonkey/.../tabular_data.php(95): com\...\Tabular_Data::fromFile('/home/codemonke...')
#2 {メイン}
  /home/codemonkey/.../tabular_data.php の 56 行目にスローされます

致命的なエラー: /home/codemonkey/.../tabular_data.php:56 でメッセージ「ファイル タイプがサポートされていません」を含むキャッチされない例外「例外」
スタックトレース:
#0 /home/codemonkey/.../tabular_data.php(88): com\...\Tabular_Data->loadFromFile('/home/codemonke...', false)
#1 /home/codemonkey/.../tabular_data.php(95): com\...\Tabular_Data::fromFile('/home/codemonke...')
#2 {メイン}
  /home/codemonkey/.../tabular_data.php の 56 行目にスローされます

質問

エラーを出力するstderrとstdoutの両方に関係があると思います。いずれにせよ、PHP に一度だけ、できれば stderr に印刷するようにうまく指示するにはどうすればよいですか?


バージョン出力

PHP 5.3.9 (cli) (ビルド: 2012 年 1 月 11 日 17:09:48)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0、Copyright (c) 1998-2012 Zend Technologies

コード

http://pastebin.com/iBUGJ2eY
これは、名前空間とパスが foos に編集された二重の例外を表示する正確なコードです。このインストールでは、コマンドラインで常に二重の例外が発生することに注意してください。問題がPHP構成にあることはほぼ確実です。

4

2 に答える 2

48

再現しました。最初のエラーメッセージはlog_errors設定の結果であり、に移動しSTDERRます。

2番目はの結果でdisplay_errorsあり、に行きSTDOUTます。

両方の設定は実行時に変更できます。したがって、「PHPにきちんと質問する」には、これで十分です。

ini_set('log_errors', 1);
ini_set('display_errors', 0);
于 2012-01-25T12:25:05.503 に答える