PHP if-Anweisung ignoriert, wenn die header(Location: xxx) ist im inneren
Habe ich ein komisches problem. Es ist eine if-Anweisung am Anfang von meiner Seite, scheint ignoriert zu werden, wenn ein header(location: xxx) Befehlszeile ist im inneren.
$check = $authorisation->check();
//i know this results in true by echoing the value
//(you've got to believe me on this one)
if(!$check){
//redirect to message
header("Location: message.php");
exit;
}else{
//do nothing, continue with page
}
Diese IMMER leitet Sie an das message.php Seite, egal, was das Ergebnis von $Ermächtigung->check() ist!
Merkwürdige ist, wenn ich kommentiere den header-Befehl, und setzen echo in der if-Anweisung zur überprüfung, alles funktioniert wie zu erwarten:
$check = $authorisation->check(); //true
if(!$check){
//redirect to message
echo "you are not welcome here";
}else{
echo "you may enter";
}
Ist das Ergebnis "geben Sie";
Funktioniert das auch wie erwartet:
$check = true;
if(!$check){
//redirect to message
header("Location: message.php");
exit;
}else{
//do nothing
}
Diese nur Weiterleitungen auf die Seite " Nachricht, wenn $check = false;
Letzte komische ist, dass ich das problem nur auf 1 server, gleiche Skript funktioniert einwandfrei auf dem testserver.
Jede Hilfe wäre sehr geschätzt werden!
- Sorry.. nicht klar, was ist Los..?
- Vorschlag: Schreibe auch
exit();
nachheader();
- Hinzugefügt "exit;" nach Weiterleitungen (danke für die Anregung), aber das macht keinen Unterschied.
- So blöd wie es klingt, hast du ein var_dump($check) auf dem fehlerhaften server?
- Das zeigt 'bool(true)' wie erwartet
- Es scheint unmöglich zu sein. Keine chance, dass die Seite zweimal aufgerufen? Hab das error reporting geben Ihnen einige Hinweise?
- Leider ist die Fehlerberichterstattung nicht mehr Informationen. Das problem besteht nur unmittelbar nach der Anmeldung. Wenn ich auf durchsuchen, um die gleiche Seite nach der ersten laden (nach der unerwünschten redirect), das problem ist Weg, und ich sehe die Seite, die ich sehen möchte...
- Machen Sie anderen Weiterleitungen auf andere Seiten mit einem fehlenden exit? Könnte Sie stören? Ich vermute, das problem liegt außerhalb dieser Seite (oder der code, den wir hier sehen können).
- Wenn ich raten müsste, würde ich denke, Sie waren Umgang mit einer race-Bedingung während des login-Prozesses. (Login-Zeug auf einer anderen Seite setzt eine session-variable, springt dann auf die Hauptseite...aber der redirect geschieht so schnell, dass die session-Datei wurde nicht aktualisiert, noch nicht.) Ich habe gesehen es ein paar mal...und in der Regel eine
session_write_close
vor dem senden der redirect-header macht es Weg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rufen Sie die Ausfahrt - Funktion nach der Weiterleitung zu einer anderen Seite, da sonst der folgende code wird ausgeführt, sowieso.
sollten Sie immer ausführen
exit
nachdem Sie fertig sind mit Headern, so dass die übertragung schneller und stabiler für den browser.Diesem Weg versuchen:
Bitte Lesen Sie den Kommentar für andere Tipp ' s, warum dies ist eine gute Idee.
Versuchen
error_reporting(-1);
Sie werden sehen, etwas neues. Auf einem der Server, die PHP-error-reporting eingestellt ist, um niedriger Ebene.Diese Art von Fehler wird Häufig dadurch verursacht, dass die Inhalte an den browser gesendet, bevor die header-Funktion aufgerufen wird.
Selbst wenn Sie nicht denken, Sie Inhalte senden, wenn die Datei beginnt mit einem Leerzeichen oder blankline vor "< ? php" dann werden Sie auf einen Fehler - das ist oft eine feine Sache, um zu bemerken/finden.
Output buffering können Sie rufen Sie die header Funktion auch nach der, die dir "geschickt" Inhalte aus - das ist wahrscheinlich der Grund, warum die Seite funktioniert auf einem server und nicht einem anderen.
Vorschlag:
schreiben
ob_start()
an der Spitze undschreiben auch
exit();
nachheader();
Debuggen mit
error_reporting(-1)
wie vorgeschlagen in einer AntwortIch hatte das gleiche problem, Sie sind dem Aufruf header('Location: blahblah') irgendwo im code. prüfen Sie es.