令人惊讶的是,我无法在Google或SO上找到任何相关信息。当我在PHP中抛出异常时,它会在我的控制台中出现两次,完成错误消息和堆栈跟踪。它第一次打印出来时说“PHP 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)(建于2012年1月11日17:09:48)
版权所有(c)1997-2012 PHP小组
Zend Engine v2.3.0,版权所有(c)1998-2012 Zend Technologies
http://pastebin.com/iBUGJ2eY
这是为我显示双重例外的确切代码,命名空间和路径编辑为foos。请注意,我总是在此安装的命令行中获得双重例外。我几乎可以肯定,问题在于PHP配置。
答案 0 :(得分:36)
得到了转载。第一条错误消息是log_errors
设置的结果,并转到STDERR
。
第二个是display_errors
的结果,然后转到STDOUT
。
两个设置都可以在运行时更改。所以为了“很好地问问PHP”,这就足够了:
ini_set('log_errors', 1);
ini_set('display_errors', 0);
答案 1 :(得分:0)
就像用answer of Linus Kleen写的一样,出现双重消息的原因是display_errors
进入标准输出。
我发现自php 5.2.4起,甚至在display_errors
设置为1或“ on”时也会发生这种情况。
要恢复正常的行为,这是定义应存储记录的错误的文件的最佳方法,例如添加此:
error_log = 'd:/logs/php_error.log'
到您的php.ini。
定义了error_log的文件后,您仅会收到一条消息,提示您需要测试什么。
对于生产状态,您可以将display_errors
设置为0。