php – Soll ich exit() aufrufen, nachdem ich Location: header aufgerufen habe?

Lesezeit: 4 Minuten

php Soll ich exit aufrufen nachdem ich Location header
q0987

Soll ich nach dem Aufrufen des Redirect-Funktionsheaders exit aufrufen oder nicht?

<?php // fileA
$urlFailToGoTo = '/formerror.php';

if (sth)
{
   header(sprintf("Location: %s", $urlFailToGoTo));
   exit(); //should I call exit() here? or return?
}

?>

Danke

  • mögliches Duplikat von Warum muss ich ‘exit’ nach der Umleitung durch header(‘Location..’) in PHP aufrufen?

    – Bahnwart.6

    14. Oktober 2014 um 17:52 Uhr

Das sollten Sie auf jeden Fall. Andernfalls wird die Skriptausführung nicht beendet. Das Setzen eines weiteren Headers allein reicht nicht aus, um umzuleiten.

  • Hallo Oliver, Beendet der Exit die Ausführung des Skripts in der formerror.php? Ich denke, meine Frage ist, wenn ich ‘exit’ nach ‘header’ aufrufe. Welches Skript ist betroffen und wird nicht mehr ausgeführt? Danke

    – q0987

    24. August 2010 um 13:28 Uhr


  • exit unterbricht immer das aktuelle Skript (in Ihrem Fall “fileA”). Die Seite, auf die Sie umleiten (“/formerror.php”), ist überhaupt nicht betroffen. Eine Umleitung weist Ihren Browser an, eine neue HTTP-Anfrage an den von Ihnen unter “Standort” angegebenen Ort zu initiieren. Es ist im Grunde dasselbe wie das manuelle Klicken auf einen Link zu “formerror.php”.

    – rgroli

    24. August 2010 um 14:06 Uhr

  • Exit ist also im Grunde nur für den Server, also macht er keine unnötige Arbeit mehr?

    – Gust van de Wal

    22. Mai 2015 um 8:35 Uhr

php Soll ich exit aufrufen nachdem ich Location header
Jan Turoň

Sie sollten, genau wie @rgroli erklärt. Wer sich nicht mit Klammern herumschlagen möchte, kann auch anrufen header() IN exit():

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

Der Location-Header in HTTP/1.1 erfordert immer einen absoluten Pfad siehe Hinweis hier.

Notiz: Dies ist kein Hack, da die Exit-Code wird nur verwendet, wenn der Parameter ganzzahlig ist, while header() erzeugt void (es wird mit code=0 beendet, normaler Ausgang). Betrachten Sie es als exit_header() funktionieren wie es sein sollte nachher Location Header.

  • Ich glaube du meintest header IN exit()? 😉

    – yckart

    10. Juli 2016 um 19:39 Uhr

  • Bedeutet das nicht, dass Sie die Ausgabe von übergeben header als Exit-Code von exit? Wäre das nicht etwas unerwünscht?

    – ADTC

    24. November 2016 um 9:45 Uhr

  • @ADTC header() in PHP gibt void zurück und der Exit-Code wird nur verwendet, wenn der Parameter Integer ist. In diesem Fall stoppt es einfach die Codegenerierung stillschweigend (impliziert Exit-Code=0, normaler Exit).

    – Jan Turoň

    24. November 2016 um 10:02 Uhr

Es ist im Allgemeinen eine gute Praxis, exit; (Beachten Sie – es ist ein Schlüsselwort, also brauchen Sie das nicht ()) nach dem Senden von a Location: Header, da Browser auf die neue Seite umleiten sollen und somit eine weitere Ausführung des aktuellen Skripts meist unerwünscht ist.

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

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 …

Organisiere deinen Code so, dass es keine Ausgabe gibt und das Skript natürlich endet, wenn du eine Weiterleitung verwendest …

  • Ich denke, das ist ein Fehler der Testsoftware, wenn sie das Skript, das sie testet, nicht in einer Sandbox ausführen kann. Es ist wie ein Computer, der heruntergefahren wird, weil ein Shell-Skript mit beendet wurde exit Befehl.

    – ADTC

    27. November 2016 um 7:53 Uhr

  • nein, es ist einfach falsch, irgendetwas zwischen irgendetwas zu beenden. Es gibt einen Grund hinter der Programmierung einen Stack. alles begann mit einem Funktionsaufruf und alles soll mit einem Funktionsaufruf enden.

    – Benjamin Eckstein

    30. November 2016 um 13:15 Uhr

  • Ich habe keine Ahnung, was du sagst :/

    – ADTC

    1. Dezember 2016 um 13:17 Uhr

  • @Umingo Ist es nicht der eigentliche Zweck der exit anrufen (oder auch break, innerhalb einer Funktion/Methode)? Nicht nur in PHP, sondern in fast jeder bekannten Programmiersprache?

    – David Tabernero M.

    16. August 2018 um 17:08 Uhr

  • @Umingo Könntest du bitte eine Quelle oder ein Beispiel posten? Sie antworten nur noch einmal auf dasselbe, und es sieht eher nach einer Meinung als nach einer Programmierungstatsache aus.

    – David Tabernero M.

    17. August 2018 um 14:45 Uhr

  • Ich denke, das ist ein Fehler der Testsoftware, wenn sie das Skript, das sie testet, nicht in einer Sandbox ausführen kann. Es ist wie ein Computer, der heruntergefahren wird, weil ein Shell-Skript mit beendet wurde exit Befehl.

    – ADTC

    27. November 2016 um 7:53 Uhr

  • nein, es ist einfach falsch, irgendetwas zwischen irgendetwas zu beenden. Es gibt einen Grund hinter der Programmierung einen Stack. alles begann mit einem Funktionsaufruf und alles soll mit einem Funktionsaufruf enden.

    – Benjamin Eckstein

    30. November 2016 um 13:15 Uhr

  • Ich habe keine Ahnung, was du sagst :/

    – ADTC

    1. Dezember 2016 um 13:17 Uhr

  • @Umingo Ist es nicht der eigentliche Zweck der exit anrufen (oder auch break, innerhalb einer Funktion/Methode)? Nicht nur in PHP, sondern in fast jeder bekannten Programmiersprache?

    – David Tabernero M.

    16. August 2018 um 17:08 Uhr

  • @Umingo Könntest du bitte eine Quelle oder ein Beispiel posten? Sie antworten nur noch einmal auf dasselbe, und es sieht eher nach einer Meinung als nach einer Programmierungstatsache aus.

    – David Tabernero M.

    17. August 2018 um 14:45 Uhr

989210cookie-checkphp – Soll ich exit() aufrufen, nachdem ich Location: header aufgerufen habe?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy