Ich muss unter bestimmten Bedingungen "500 Internal Server Error" von einem PHP-Skript senden. Das Skript soll von einer Drittanbieter-App aufgerufen werden. Das Skript enthält einige die("this happend")
Anweisungen, für die ich 500 Internal Server Error
anstelle des üblichen den Antwortcode senden muss 200 OK
. Das Skript eines Drittanbieters sendet die Anforderung unter bestimmten Bedingungen erneut, einschließlich des Nichtempfangs des 200 OK
Antwortcodes.
Zweiter Teil der Frage: Ich muss mein Skript folgendermaßen einrichten:
<?php
custom_header( "500 Internal Server Error" );
if ( that_happened ) {
die( "that happened" )
}
if ( something_else_happened ) {
die( "something else happened" )
}
update_database( );
// the script can also fail on the above line
// e.g. a mysql error occurred
remove_header( "500" );
?>
Ich muss den 200
Header erst senden, nachdem die letzte Zeile ausgeführt wurde.
Bearbeiten
Eine Nebenfrage: Kann ich seltsame 500 Header wie diese senden:
HTTP/1.1 500 No Record Found
HTTP/1.1 500 Script Generated Error (E_RECORD_NOT_FOUND)
HTTP/1.1 500 Conditions Failed on Line 23
Werden solche Fehler vom Webserver protokolliert?
php
http-headers
Salman A.
quelle
quelle
Antworten:
quelle
http_response_code()
lässt diesen Header weg.PHP 5.4 hat eine Funktion namens http_response_code . Wenn Sie also PHP 5.4 verwenden, können Sie einfach Folgendes tun:
Ich habe eine Polyfüllung für diese Funktion (Gist) geschrieben, wenn Sie eine Version von PHP unter 5.4 ausführen.
Zur Beantwortung Ihrer Folgefrage lautet der HTTP 1.1-RFC:
Das heißt, Sie können nach dem Code selbst beliebigen Text verwenden (ausgenommen Zeilenumbrüche oder Zeilenvorschübe), und es funktioniert. Im Allgemeinen gibt es jedoch normalerweise einen besseren Antwortcode. Anstatt beispielsweise eine 500 für keinen gefundenen Datensatz zu verwenden, könnten Sie eine 404 (nicht gefunden) senden , und für etwas wie "Bedingungen fehlgeschlagen" (ich vermute einen Validierungsfehler) könnten Sie eine 422 senden (nicht verarbeitbar) Entität).
quelle
Sie können die folgende Funktion verwenden, um eine Statusänderung zu senden:
Sie können es als solches verwenden:
quelle
;
Afterdie()
?Sie können einfach sagen:
innerhalb Ihrer Bedingungen wie:
Bei der Datenbankabfrage können Sie dies wie folgt tun:
Sie sollten sich daran erinnern, dass Sie diesen Code vor jedem HTML-Tag (oder jeder Ausgabe) einfügen müssen.
quelle
Sie können es folgendermaßen vereinfachen:
Es wird folgender Header zurückgegeben:
Hinzugefügt: Wenn Sie genau wissen müssen, was schief gelaufen ist, gehen Sie wie folgt vor:
quelle
'x'
soll nun sein?header
eine nicht leere Zeichenfolge sein muss. Dass es'x'
nicht wirklich wichtig ist.Ihr Code sollte folgendermaßen aussehen:
Ich gehe davon aus, dass Sie die Ausführung beenden, wenn etwas schief geht.
quelle