2010-02-09 15 views
16

Estoy ejecutando nginx con PHP-FPM. Mi configuración de nginx para el manejo de archivos php se parece a esto:PHP FPM devuelve HTTP 500 para todos los errores de PHP

location ~ \.php$ { 
      set $php_root /home/me/www; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
      include /etc/nginx/fastcgi_params; 
     } 

Ahora, tengo un archivo PHP simple como esto:

<?php 
    ech "asd" 
    asd"" 
?> 

Sí, con un error evidente. Cuando intento acceder al archivo php, en lugar de rastrear un error de sintaxis, siempre obtengo un HTTP 500 Internal Server Error. Intenté usar error_reporting(-1); pero igual siempre devuelve HTTP 500. ¿Cómo puedo obtener PHP para imprimir el error exacto en lugar de devolverlo? ¿un HTTP 500 genérico?

+0

Si el archivo no tiene el error, usted conseguiría el código de respuesta correcto (HTTP 200 OK)? – echo

+0

Sí, obtengo un HTTP 200 OK si el archivo no tiene un error. – ErJab

+0

En general, es mejor registrar errores que mostrarlos. – umassthrower

Respuesta

29

Trata de encontrar la siguiente línea en su php.ini:

display_errors = Off 

luego hacer que el

+0

¡Gracias! Utilizo una versión de producción de php.ini en la que display_errors está desactivado. – ErJab

+1

Estaba usando un script de PHP-Fastcgi así que cuando cambié a php-fpm recientemente. No noté que el php.ini cambió a la versión de FPM. Su versión tiene dispaly_errors = Off, así que todas mis páginas comenzaron a aparecer en blanco cuando ocurrió un error. – Xeoncross

+6

no olvide restablecer php-fpm después de eso. (Servicio sudo php-fpm restart) – alioygur

8

Para publicar una respuesta más completa, que había utilizado una versión de producción de php.ini que tiene display_errors = Apagado. En lugar de activarlo globalmente, lo que hago ahora es, para los archivos que necesito reportar errores, utilizo ini_set('display_errors', 'On'); al comienzo del archivo.

+0

El problema es que, de acuerdo con la documentación, no funcionará si ocurre un error fatal. – srcspider

+0

@srcspider Realmente no ¿eh? Incluso los errores fatales están indicados. Todo lo que tienes que hacer es asegurarte de poner '' ini_set ('display_errors', 'On') 'en la parte superior del alcance que estás considerando. –

4

También me encontré con el problema, y ​​configuré display_errors = Off en php.ini pero no funciona. Luego encontré el php[display_errors]=off en php-fpm.conf, y anulará el valor de php.ini y funciona.

+0

'php.ini' no tiene nada que ver con las configuraciones, si está utilizando 'php-fpm', en cuyo caso deberá modificar' php-fpm.conf'. –

1

Los errores de visualización solo afectarán el hecho de que los errores se impriman en la salida o no.

Si tiene activados los errores de registro, los errores seguirán faltando en el registro a menos que la pantalla esté apagada, que no es el comportamiento esperado.

El comportamiento esperado es si el registro está activado, los errores se encuentran allí. Si la pantalla está encendida, los errores se encuentran en la pantalla/salida. Si ambos están en erros se encuentran en ambos.

Las versiones actuales tienen un error que se pierde.

+0

¿Conoces un error en php.net que rastrea este error? ¿Puedes vincularlo? – Sven

+0

Éste: https://bugs.php.net/bug.php?id=61045 - Solucionado en PHP 5.3.14. – jorisw

1

Para Ubuntu 12.10, en el archivo PHP-FPM-piscina-config:

php_flag[display_errors] = on 

En archivo php.ini:

display_errors = On 
Cuestiones relacionadas