Pregunta

En una página que estoy haciendo varias llamadas AJAX. Todas las llamadas devuelven respuestas con éxito pero el último (no relacionado con otras llamadas ajax) devuelve 500 error interno del servidor como código de respuesta (como se dice Firebug). Sin embargo, a pesar de código de error, el contenido correcto se devuelve desde la llamada AJAX.

Para mi sorpresa, cuando me puse opción display_errors en php.ini como On, desaparece el error y la respuesta de prestado en la página. Tengo el registro de errores de configuración en un archivo, pero no se registra el error correspondiente al error de servidor interno anteriormente mencionado.

Por cierto, estoy usando Apache, jQuery, PHP5, APC (si es relevante).

No hay solución correcta

Otros consejos

La respuesta más probable, dada la limitada información disponible, es que PHP está alcanzando un error fatal después ha terminado haciéndose eco de su salida esperada.

Para probar: en la línea que se ejecuta pasado, se hacen eco de algo. Si ese eco no aparece, entonces usted sabe que su script PHP es detener en alguna parte. En ese momento, es sólo una cuestión de depuración y rastreo.

Eso es muy extraño ... ¿Está utilizando algún tipo de biblioteca u otro código que usted no escribió que podrían estar afectando a la cabecera código de estado independientemente del valor devuelto real?

Tenía este problema exactamente el mismo, resultó ser un error fatal oculta. A su vez en display_errors, encontrar errores, aplastar error, apague display_errors (probablemente mejor para mantener el display_errors para el desarrollo dentro y fuera de la producción).

El intérprete PHP simplemente bloquea durante ésta solicitud. Sé que una de las razones potencial que podría chocar PHP:

Debido a algunos errores en GCC 4.3, PHP compilado con esta versión del compilador tiene la implementación de excepciones rotos. En algunos casos no triviales, lanzar una excepción por el script hace que la violación de segmento y la ejecución del script se termina. La tesis fue confirmada por el equipo de PHP hace un par de meses.

Para verificar, si le sucede a usted, sólo tiene que comprobar, en los accidentes de ejecución del script y si ocurre justo después de lanzar una excepción, que esté en casa. La verificación se puede hacer mediante la colocación de die() más y futher en el guión y ver, lo que ocurre. Otra forma es utilizar declare(ticks=1) y registrar una función garrapata que guarda la última entrada de debug_backtrace() en el fichero de cada pulso, por lo que obtendrá un informe, cómo se ejecuta la secuencia de comandos.

he tenido problema algo similar y el problema fue que el guión era excepciones que lanzan y que no había ningún bloque catch por lo que la excepción se hace burbujear a la superficie y un error grave "excepción no capturada" sucedido. ¿Qué es el comportamiento estándar de PHP, pero en un servidor en particular que también obtendría código de respuesta de 500 error interno del servidor en lugar de 200 OK. La eliminación de excepciones y su sustitución por die () declaraciones solucionado el problema en ese servidor (podríamos hacer eso porque era simple script que realmente no se benefician de excepciones en el primer lugar)

El problema es a menudo fijado por ione de lo siguiente. Compruebe los scripts de permisos, los derechos y la propiedad. Si es devuelto después de una llamada AJAX, comprobar si no hay ningún lugar un error fatal. Compruebe si se dejase me. T accidentalmente uplaoded el archivo en Unix en modo ASCII

Más información se puede leer en http://www.larshemel.com/forum/500_internal_server_error

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top