Como se señaló en muchas otras preguntas, al desactivar display_errors a Off en php.ini hace que el servidor web responda con el código de estado 500 Error interno del servidor en lugar de 200 OK cuando se produce un error fatal. He creado una prueba simple con una función no definida para explicar el comportamiento:¿Por qué display_errors cambia el código de estado HTTP?
php.ini
display_errors = On
index.php
<?php test();
Da:
Fatal error: Call to undefined function test()
in D:\xampp\htdocs\index.php on line 1
o simplemente una página en blanco si silencio la llamada a la función de esta manera:
<?php @test();
En ambos casos responden a las cabeceras son los siguientes:
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 20:08:22 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Si bien el cambio a php.ini:
display_errors = Off
Causas:
HTTP/1.0 500 Internal Server Error
Date: Tue, 10 Jul 2012 20:10:35 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Content-Length: 0
Connection: close
Content-Type: text/html
¿Alguien puede explicar el subyacente mecanismo que hace que el servidor web responda con 500 cuando display_errors está desactivado?
Interesante, reconocería que siempre debería devolver un 500 tan pronto como haya errores fatales. También me gustaría saber por qué ... –
duplicar: http://stackoverflow.com/questions/3570747/display-500-error-on-any-error-in-apache –
Eso me parece una pregunta diferente –