php - Soll ich nach dem Aufruf von Location: header exit () aufrufen?

Antworten:

80

Das solltest du auf jeden Fall. Andernfalls wird die Skriptausführung nicht beendet. Das Festlegen eines anderen Headers allein reicht nicht aus, um umzuleiten.

rgroli
quelle
Hallo Oliver, Beendet der Exit die Ausführung des Skripts in Formerror.php? Ich denke, meine Frage ist, wenn ich nach "Header" "exit" rufe. Welches Skript ist betroffen und wird nicht mehr ausgeführt? Vielen Dank
q0987
2
exit unterbricht immer das aktuelle Skript (in Ihrem Fall "fileA"). Die Seite, zu der Sie umleiten ("/formerror.php"), ist überhaupt nicht betroffen. Eine Umleitung weist Ihren Browser an, eine neue HTTP-Anfrage an den unter "Ort" angegebenen Ort zu initiieren. Es ist im Grunde das gleiche wie das manuelle Klicken auf einen Link zu "Formerror.php".
Rgroli
Das Beenden ist also im Grunde nur für den Server, damit es keine unnötige Arbeit mehr erledigt?
Gust van de Wal
30

Sie sollten, genau wie @rgroli erklärt. Wenn Sie sich nicht mit Klammern beschäftigen möchten, können Sie auch header() IN aufrufen exit():

if(sth) exit(header("Location: http://example.com"));

Der Standortheader in HTTP / 1.1 erfordert immer einen absoluten Pfad ( siehe Hinweis hier) .

Hinweis: Dies ist kein Hack, da der Exit-Code nur verwendet wird, wenn der Parameter eine Ganzzahl ist, während er header()void erzeugt (er wird mit Code = 0 beendet, normaler Exit). Betrachten Sie es als exit_header()Funktion, wie sie nach dem LocationHeader sein sollte.

Jan Turoň
quelle
1
Ich denke du meintest header IN exit() ? ;)
Yckart
Bedeutet das nicht, dass Sie die Ausgabe headerals Exit-Code von übergeben exit? Wäre das nicht etwas unerwünscht?
ADTC
@ADTC header()in PHP gibt void zurück und der Exit-Code wird nur verwendet, wenn der Parameter eine Ganzzahl ist. In diesem Fall wird die Codegenerierung nur stillschweigend gestoppt (was bedeutet, dass der Exit-Code = 0 ist, normaler Exit).
Jan Turoň
20

Es wird im Allgemeinen exit;empfohlen, ()nach dem Senden eines Location:Headers (beachten Sie, dass es sich um ein Schlüsselwort handelt, das Sie also nicht benötigen ) zu verwenden , da Browser auf die neue Seite umleiten sollen und die weitere Ausführung des aktuellen Skripts normalerweise unerwünscht ist.

Bernstein
quelle
8

Wenn Sie keinen Code (PHP oder HTML) unter der Kopfzeile haben, müssen Sie dies nicht tun.

Hydrino
quelle
Hallo aromawebdesign.com, ich habe Code in Formerror.php. Ist das ein Problem? Vielen Dank
q0987
Wenn Sie nach dem Aufruf des Headers einen Code haben, sollten Sie die () aufrufen. oder exit ();
Hydrino
4

exit ist eine schlechte Codierung.

Wenn Sie jemals ein großes Projekt entwickeln und PHP Unit Testcases erstellen möchten, wird Exit Sie vermasseln.

exit beendet das Skript und Ihren laufenden Test! Es gibt keine Möglichkeit, den Test wiederherzustellen und festzustellen, ob er fehlgeschlagen ist oder nicht ...

Organisieren Sie Ihren Code so, dass keine Ausgabe erfolgt und das Skript natürlich endet, wenn Sie eine Umleitung verwenden ...

Benjamin Eckstein
quelle
4
Ich denke, das ist ein Fehler der Testsoftware, wenn sie das zu testende Skript nicht sandboxen kann. Es ist wie das Herunterfahren eines Computers, weil ein Shell-Skript mit dem exitBefehl beendet wurde.
ADTC
Nein, es ist einfach falsch, irgendetwas zwischen irgendetwas zu beenden. Es gibt einen Stapel aus einem Grund hinter der Programmierung. Alles begann mit einem Funktionsaufruf und alles endete mit einem Funktionsaufruf.
Benjamin Eckstein
5
Ich habe keine Ahnung, was Sie sagen:/
ADTC
1
@Umingo Ist es nicht der eigentliche Zweck des exitAufrufs (oder auch breakinnerhalb einer Funktion / Methode)? Nicht nur in PHP, sondern in fast jeder bekannten Programmiersprache?
David Tabernero M.
@Davdriver Nr. exit verhindert nur das automatische Testen Ihres Codes und ist ein schlechter Stil. Es ist nur ein Symptom für schlecht gestalteten Code, um exit zu verwenden.
Benjamin Eckstein