Question

Sur une page que je fais plusieurs appels AJAX. Tous les appels renvoient des réponses avec succès, mais le dernier (non lié à d'autres appels ajax) renvoie 500 erreur interne du serveur en tant que code de réponse (comme Firebug dit). Cependant, malgré le code d'erreur, le contenu correct est renvoyé par cet appel AJAX.

À mon grand étonnement, quand je mets l'option display_errors dans php.ini comme sur, l'erreur disparaît et la réponse en rendu sur la page. Je journalisation des erreurs de configuration dans un fichier mais aucune erreur est enregistrée correspondant à l'erreur interne du serveur mentionné ci-dessus.

Par ailleurs, je suis en utilisant Apache, JQuery, PHP5, APC (si elle est pertinente).

Pas de solution correcte

Autres conseils

La réponse la plus probable, compte tenu des informations limitées disponibles, est que PHP atteint une erreur fatale après il a fini l'écho de votre résultat attendu.

Pour tester: dans la ligne qui est exécuté dernier, écho quelque chose. Si cet écho ne se présente pas, alors vous savez que votre script PHP est quelque part l'arrêt. À ce moment-là, il est juste une question de débogage et de traçage.

C'est très étrange ... Utilisez-vous une sorte de bibliothèque ou tout autre code que vous ne l'avez pas écrit qui pourraient avoir une incidence sur l'en-tête de code d'état indépendamment de la valeur retournée réelle?

J'ai eu ce même problème exact, avéré être une erreur fatale caché. Allumez display_errors, trouver l'erreur, smash erreur, éteignez display_errors (probablement préférable de garder display_errors sur le développement et hors production).

L'interpréteur PHP se bloque simplement au cours de celui-ci demande. Je sais que l'une des raisons possibles qui pourraient tomber en panne PHP:

En raison de quelques bugs dans GCC 4.3, PHP compilé avec cette version du compilateur a la mise en œuvre des exceptions brisées. Dans certains cas, non triviales, lancer une exception par le script provoque l'erreur de segmentation et l'exécution du script est terminé. La thèse a été confirmée par l'équipe PHP il y a quelques mois.

Pour vérifier, si cela vous arrive, vous pouvez simplement vérifier, où les accidents d'exécution de script et s'il arrive juste après avoir jeté une exception, vous êtes à la maison. Le contrôle peut être fait en plaçant die() plus loin et futher dans le script et voir, ce qui se passe. Une autre façon est d'utiliser declare(ticks=1) et enregistrer une fonction de tique qui sauve la dernière entrée de debug_backtrace() au fichier chaque tic-tac, de sorte que vous aurez un rapport, comment le script est exécuté.

J'ai eu problème un peu similaire et la question est que le script était de lancer des exceptions et il n'y avait pas de bloc catch donc l'exception serait barboter à la surface et erreur fatale « exception non détectée » est arrivé. Ce qui est un comportement standard php, mais sur un serveur particulier, vous obtenez également le code de réponse de 500 erreur interne du serveur au lieu de 200 OK. Suppression d'exceptions et de les remplacer par des déclarations die () Correction du problème sur ce serveur (nous pourrions le faire parce qu'il était vraiment simple script qui ne bénéficiaient pas d'exceptions en premier lieu)

Le problème est souvent fixé par Ione de ce qui suit. Vérifiez les autorisations scripts, les droits et la propriété. En cas de retour après un appel ajax, vérifier s'il n'y a nulle part une erreur fatale. Vérifiez si vous n;. T uplaoded accidentellement le fichier Unix en mode ASCII

Plus d'informations peuvent être lues à http://www.larshemel.com/forum/500_internal_server_error

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top