2012-07-10 24 views
6

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?

+0

Interesante, reconocería que siempre debería devolver un 500 tan pronto como haya errores fatales. También me gustaría saber por qué ... –

+0

duplicar: http://stackoverflow.com/questions/3570747/display-500-error-on-any-error-in-apache –

+0

Eso me parece una pregunta diferente –

Respuesta

6

La razón es que con display_errors = On, básicamente le pides a PHP que te proporcione una respuesta decente de HTTP incluso cuando hay errores en tu secuencia de comandos. Piense en ello como una capa adicional entre su secuencia de comandos y la respuesta. Ya no es tu script el que controla la salida, es PHP.

Cuando activa esta opción, está en efecto diciendo, "Si hay un error, por favor todavía me da una página de respuesta HTTP válida (incluso puede incluir marcas decentes), ya que estaré viendo que en lugar de mis registros. "

con él establece en Off, la respuesta HTTP debe ser sin sentido, y por lo tanto un 500. con él encendido, se anticipa un error de PHP, por lo que la solicitud de en todo el es no 500, a pesar de que su secuencia de comandos falló.

Cuestiones relacionadas