Frage

Auf der einen Seite, die ich mache mehrere AJAX Anrufe. Alle Anrufe Rückantworten erfolgreich, aber die letzten (nicht auf andere Ajax-Aufrufen verwandt) liefert 500 internen Serverfehler als Antwortcode (wie Firebug sagt). Doch trotz des Fehlercode wird korrekter Inhalt von diesem AJAX-Aufruf zurückgegeben.

Zu meinem Erstaunen, als ich display_errors Option in der php.ini auf Ein gesetzt ist, verschwindet der Fehler und Antwort in auf der Seite dargestellt. Ich habe in eine Datei Setup-Fehlerprotokollierung, aber kein Fehler protokolliert wird entsprechend die oben erwähnten internen Serverfehler.

By the way, ich bin mit Apache, JQuery, PHP5, APC (wenn es relevant ist).

Keine korrekte Lösung

Andere Tipps

Die wahrscheinlichste Antwort, angesichts der begrenzten verfügbaren Informationen, ist, dass PHP einen fatalen Fehler erreicht nach es fertig ist Ihre erwartete Ausgabe Echo.

Um Test: in der Zeile, die letzten, Echo etwas ausgeführt wird. Wenn das Echo nicht angezeigt wird, dann wissen Sie, dass Ihre PHP-Skript Anhalten irgendwo ist. An diesem Punkt, es ist nur eine Frage des Debugging und Tracing.

Das ist sehr seltsam ... Sind Sie irgendeine Art von Bibliothek oder anderen Code, dass Sie nicht schreiben das könnte den Statuscode Header unabhängig von dem tatsächlichen Rückgabewert werden zu beeinflussen?

Ich hatte genau dieses gleiche Problem, erwies sich als eine versteckte Fatal Error zu sein. Schalten Sie display_errors, finden Fehler, zertrümmern Fehler, schalten Sie display_errors (wahrscheinlich am besten display_errors halten auf die Entwicklung und aus der Produktion).

Der PHP-Interpreter stürzt einfach während dieser eine Anfrage. Ich weiß, dass ein möglicher Grund, dass PHP abstürzen könnte:

Aufgrund einiger Fehler in GCC 4.3, PHP mit dieser Version von Compiler kompiliert hat die Implementierung von Ausnahmen gebrochen. In einigen nicht-trivialen Fällen, durch das Skript eine Ausnahme werfen bewirkt, dass die segfault und die Skriptausführung beendet. Die Arbeit wurde vorher von PHP-Team ein paar Monaten bestätigt.

Um zu überprüfen, ob es Ihnen passiert, können Sie einfach überprüfen, wo die Skriptausführung abstürzt und wenn geschieht nur nach Auslösen einer Ausnahme, du bist zu Hause. Die Prüfung kann durch Platzieren die() weiter und weitere im Skript und sieht getan werden, was passiert. Ein anderer Weg ist declare(ticks=1) zu verwenden und eine Zecke Funktion zu registrieren, die den letzten Eintrag von debug_backtrace() in die Datei speichert jede Zecke, so dass Sie einen Bericht zu bekommen, wie das Skript ausgeführt wird.

Ich habe etwas ähnliches Problem hat und das Problem war, dass die Skript Ausnahme wirft und es gab keinen catch-Block so die Ausnahme von der Oberfläche gesprudelt werden würde und fatale Fehler „abgefangene Ausnahme“ passiert ist. Welches ist Standard PHP-Verhalten, sondern auf einem bestimmten Server würden Sie auch Antwortcode von 500 internem Serverfehler statt 200 OK bekommen. Entfernen von Ausnahmen und mit dem () Aussagen das Problem behob auf diesem Server zu ersetzen (wir könnten das tun, weil es einfaches Skript, das wirklich nicht von Ausnahmen in erster Linie profitierte)

Das Problem wird oft durch Ione der folgenden festgelegt. Überprüfen Sie die Skripte Berechtigungen, die Rechte und das Eigentum. Wenn nach einem Ajax-Aufruf zurückgegeben, überprüfen, ob es nirgendwo ein fataler Fehler ist. Überprüfen Sie, ob Sie didn;. T versehentlich die Datei auf Unix im ASCII-Modus uplaoded

Weitere Informationen finden Sie unter http://www.larshemel.com/forum/500_internal_server_error

scroll top