navegador - ¿Por qué los errores de PHP se imprimen dos veces?
php error log (1)
Lo tengo reproducido. El primer mensaje de error es el resultado de la configuración de log_errors
y va a STDERR
.
El segundo es el resultado de display_errors
y va a STDOUT
.
Ambas configuraciones se pueden modificar durante el tiempo de ejecución. Así que para "preguntar PHP muy bien", esto es suficiente:
ini_set(''log_errors'', 1);
ini_set(''display_errors'', 0);
Resumen
Sorprendentemente no pude encontrar nada sobre esto en Google o SO. Cuando lanzo una excepción en PHP aparece dos veces en mi consola, completa con un mensaje de error y un seguimiento de la pila. La primera vez que se imprime dice "Error grave de PHP: ..." y la segunda vez solo dice "Error grave: ...". No he probado esta es la versión del plugin de Apache.
Ejemplo
Con algunos espacios de nombres y caminos acortados con ''...'' para seguridad:
$ 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
Pregunta
Supongo que tiene algo que ver con stderr y stdout imprimiendo el error. En cualquier caso, ¿cómo le pido a PHP que lo imprima solo una vez, preferiblemente a stderr?
Salida de versión
PHP 5.3.9 (cli) (construido: 11 de enero de 2012 17:09:48)
Copyright (c) 1997-2012 El grupo PHP
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
El código
http://pastebin.com/iBUGJ2eY
Este es el código exacto que muestra dobles excepciones para mí, con espacios de nombres y rutas editadas a foos. Tenga en cuenta que siempre obtengo dobles excepciones en la línea de comandos en esta instalación. Estoy casi seguro de que el problema radica en la configuración de PHP.