2012-07-10 11 views
6

Wie bereits in vielen anderen Fragen erwähnt, wird der Web-Server mit dem Statuscode 500 Interner Serverfehler statt 200 OK antworten, wenn display_errors in der php.ini auf Aus gestellt wird, wenn ein schwerwiegender Fehler auftritt. Ich habe einen einfachen Test mit einer nicht definierten Funktion auf, um das Verhalten zu erklären:Warum ändert display_errors den HTTP-Statuscode?

php.ini

display_errors = On 

index.php

<?php test(); 

Gibt:

Fatal error: Call to undefined function test() 
in D:\xampp\htdocs\index.php on line 1 

oder eine leere Seite, wenn ich den Funktionsaufruf wie folgt stumm:

<?php @test(); 

In beiden Fällen beantworten Header sind wie folgt:

HTTP/1.1 200 OK 
Date: Tue, 10 Jul 2012 20:08:22 GMT 
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.8 
Content-Length: 0 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

Während php.ini Wechsel:

display_errors = Off 

Ursachen:

HTTP/1.0 500 Internal Server Error 
Date: Tue, 10 Jul 2012 20:10:35 GMT 
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.8 
Content-Length: 0 
Connection: close 
Content-Type: text/html 

Kann mir jemand erklären, die Unterlegung Mechanismus, der den Webserver mit 500 antwortet, wenn display_errors ausgeschaltet ist?

+0

Interressant, würde ich recon, dass es immer eine 500 zurückgeben sollte, sobald es fatale Fehler gibt. Ich würde auch gerne wissen, warum ... –

+0

duplizieren: http://StackOverflow.com/Questions/3570747/Display-500-error-on-any-error-in-Apache –

+0

Das scheint mir eine andere Frage –

Antwort

6

Der Grund ist, dass Sie mit display_errors = On PHP im Wesentlichen bitten, Ihnen eine anständige HTTP-Antwort zu geben, selbst wenn es Fehler in Ihrem Skript gibt. Stellen Sie es sich als eine zusätzliche Ebene zwischen Ihrem Skript und der Antwort vor. Es ist nicht mehr Ihr Skript, das die Ausgabe steuert, sondern PHP.

Wenn Sie diese Option aktivieren, sagen Sie eigentlich: "Wenn ein Fehler auftritt, geben Sie mir immer noch eine gültige HTTP-Antwort-Seite (es kann sogar anständige Markup enthalten), da ich betrachten werde dass statt meinen Protokolle. "

Mit ihm zu Off, die HTTP-Antwort gesetzt bedeutungslos sein sollte, und daher ein 500. Mit ihm auf, wird ein PHP-Fehler zu erwarten, so dass die Anfrage im Großen und ganzen ist nicht 500, obwohl Ihr Skript fehlgeschlagen ist.

Verwandte Themen