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(); nach header();
  • 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.

InformationsquelleAutor Olivier | 2011-05-27
Schreibe einen Kommentar