Резюме
Удивительно, но я ничего не мог найти об этом в Google или ТАК. Когда я генерирую исключение в PHP, оно появляется в моей консоли дважды, вместе с сообщением об ошибке и трассировкой стека. В первый раз, когда он печатается, написано "PHP Fatal error: ...", а во второй раз просто написано "Fatal error: ...". Я не проверял, это версия плагина Apache.
Пример
С некоторыми пространствами имен и путями, сокращенными на «...» для безопасности:
$ php code/com/.../tabular_data.php
PHP Fatal error: Uncaught exception 'Exception' with message 'File type not supported' in /home/codemonkey/.../tabular_data.php:56
Stack trace:
#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 {main}
thrown in /home/codemonkey/.../tabular_data.php on line 56
Fatal error: Uncaught exception 'Exception' with message 'File type not supported' in /home/codemonkey/.../tabular_data.php:56
Stack trace:
#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 {main}
thrown in /home/codemonkey/.../tabular_data.php on line 56
Вопрос
Я предполагаю, что это как-то связано с тем, что stderr и stdout выводят ошибку. В любом случае, как мне попросить PHP красиво напечатать его только один раз, желательно на stderr?
Версия вывода
PHP 5.3.9 (cli) (сборка: 11 января 2012 г., 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.