2011-08-22 15 views
40

Tengo un problema cuando tengo una aplicación php que devuelve un error interno del servidor (500) pero no aparece nada en el registro de errores.php return 500 error pero no error log

Ahora sé que hay un error con lo que estoy tratando de ejecutar, sé que me faltan algunos archivos y algo, pero algo debe mostrarse en el registro de errores de apache (de lo contrario, ¿cómo se supone que sé exactamente lo que me falta?)

Creé un script de prueba en el que se produce un error en la misma configuración de vhost y esos errores aparecen bien, por lo que todo parece configurado en cuanto a php/apache. ¿Hay ciertos errores de php que aparecen en el registro de errores (php es configurado para mostrar cualquier tipo de aviso, advertencia, error, error fatal, etc.)?

Esto se ejecuta en ubunut 10.04 con el estándar apache y php del repositorio de ubuntu con apt-get.

+0

esto es con Windows e IIS, ¿correcto? – Neal

+0

lo siento, debería haber incluido: ubuntu 10.04 – ryanzec

+0

Apache y PHP tanto del repositorio estándar de ubuntu con apt-get – ryanzec

Respuesta

45

Escanee sus archivos fuente para encontrar @.

From php documentation site

Actualmente, el prefijo del operador de control de errores "@" deshabilitará incluso informe de errores para los errores críticos que terminarán guión ejecución. Entre otras cosas, esto significa que si utiliza "@" en suprime los errores de una función determinada y o bien no está disponible o ha sido mal escrita, la secuencia de comandos morirá allí sin ninguna indicación de por qué.

+18

Fue así. Parece que CodeIgniter adora usar estos en el framework, agregue otra razón por la cual no me gusta CodeIgniter. – ryanzec

+6

esto exactamente. En mi caso El 'return @mysql_connect (...' de CodeIgniter enmascaraba el hecho de que no había podido instalar el módulo mysql de php en un servidor nuevo. Estúpido de mí, horas perdidas, lección aprendida. – rymo

+0

Oh, hombre, espero que sea esto. También la aplicación CI ... –

0

Debe habilitar el registro de errores de PHP.

Esto se debe a un error aleatorio en el servidor web cuando tiene un error de php, arroja un error interno de 500 (tengo el mismo problema).

Si mira en el registro de errores de PHP, debería encontrar su solución.

see here in the doc of how to enable it in the php.ini

+0

Creo que ha entendido mal la pregunta ... su registro de error de PHP está habilitado, pero este error particular del servidor interno 500 no se estaba registrado. Tengo este problema ahora en Laravel por un error generado al intentar acceder a un método privado. Se registran otros 500 errores, pero no ese ... no se puede entender por qué :( – geoidesic

6

Tal vez algo se apaga la salida de error. (¿Entiendo que está tratando de decir que otros scripts emiten correctamente sus errores al registro de errores?)

Puede comenzar a depurar el script determinando dónde sale el script (comience agregando un echo 1; exit; a la primera línea del script y comprobar si el navegador muestra 1 y luego mueve esa línea hacia abajo).

5

En el pasado, no tenía registros de errores en dos casos:

  1. El usuario bajo el que Apache se ejecuta no tenía permisos para modificar php_error_log archivo.
  2. Se produjo el error 500 debido a la mala configuración de .htaccess, por ejemplo, la configuración incorrecta del módulo de reescritura. En esta situación, los errores se registran en el archivo Apache error_log.
2

Aquí es otra razón por la cual los errores pueden no ser visibles:

que tenían el mismo problema. En mi caso, copié la fuente de un entorno de producción.Por lo tanto, la variable ENVIRONMENT definida en index.php se estableció en 'production'. Esto provocó que error_reporting se establezca en 0 (sin registro). Simplemente configúrelo en 'development' y debería comenzar a ver los mensajes de error en el registro de Apache.

apagó las 500 se debió a un punto y coma que faltan en la base de datos de configuración :-)

1

otro caso que me sucedió, es que hice un rizo a algunos de mis páginas, y ha obtenido un error interno del servidor y nada estaba en los registros de apache, incluso cuando habilité todos los informes de errores.

Mi problema fue que en el rizo me puse curl_setopt($CR, CURLOPT_FAILONERROR, true);

Que luego no me mostró mi error, aunque había uno, esto ocurrió debido a que el error estaba en un nivel marco y no un PHP uno, por lo que no apareció en los registros.

2

Para proyectos Symfony, asegúrese de revisar los archivos de la aplicación project'es/logs

Más detalles disponibles en este post:
How to debug 500 Error in Symfony 2

Por cierto, otros marcos o CMS comparten este tipo de comportamiento .

0

Asegúrate de que los permisos de tus archivos son correctos. Si apache no tiene permiso para leer el archivo, entonces no puede escribir en el registro.

+1

Apache ya debe tener permisos de root independientemente del sistema operativo y, por lo tanto, debe poder escribir en cualquier archivo, sin importar su propio archivo de registro. –

+0

Ningún Apache nunca debería tener permiso de root. Eso sería una grave violación de seguridad. –

1

Copiar y pegar el siguiente en un nuevo archivo de .htaccess y colocarlo en la carpeta raíz de su sitio web:

php_flag display_errors     on 
php_flag display_startup_errors   on 

Los errores se muestran directamente en su página.

Esa es la mejor manera de depurar rápidamente pero no lo use durante mucho tiempo porque podría ser una violación de seguridad.

Cuestiones relacionadas