2015-03-10 2 views
5

Je cours PHP 5.4 sur CentOS 7 et quand il y a un fichier php qui renvoie une erreur (soit une exception, soit une erreur de syntaxe), il retourne un statut HTTP 200 code au lieu de 500.Apache/PHP renvoie le code d'état HTTP 200 sur les pages d'erreur

Comment puis-je l'obtenir pour renvoyer une erreur 500 serveur lorsque PHP rencontre une erreur? J'ai essayé d'examiner d'autres posts Stackoverflow, et ils semblent tous pointer vers des solutions autour du retour de votre propre code d'erreur 500 (ce qui devrait être le comportement normal de PHP par lui-même sans que je doive déclencher manuellement le En-tête http, selon cette info: PHP emitting 500 on errors - where is this documented?) Il pointe également vers Xdebug comme étant un problème possible, mais mon problème persiste même lorsque je reconstruis le serveur sans Xdebug.

Les paramètres pertinents que j'ai sont:

  • display_errors: sur
  • display_startup_errors: sur
  • error_reporting: -1 (ce qui provoque toutes les erreurs à signaler)
+1

pourquoi voudriez-vous? Les erreurs d'Apache et les erreurs de PHP ne sont pas la même chose –

+0

Mais il traitera probablement n'importe quelle exception de côté PHP d'une manière que PHP répond automatiquement avec '500'. –

+0

@Dagon Je parle de codes d'état http servis par Apache. J'essaye d'obtenir le comportement où une erreur de PHP déclenche le code de statut 500. –

Répondre

7

Selon a PHP bug report, le comportement décrit ici est dû à la définition de display_errors.

[2010-02-03 19:03 UTC] [email protected]

La raison pour laquelle l'affichage des erreurs doit être activée de, est parce que les erreurs affichées génèrent la sortie et la sortie provoque les en-têtes à être envoyé. Je crains que nous ne pouvons pas faire grand-chose à ce sujet.

La réponse à la question est que:

  • Lorsque display_errors est sur elle retournera 200 toujours.
  • Lorsque display_errors est désactivé, il renvoie 500.