PHP-Fehler: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet [duplicate]

Lesezeit: 5 Minuten

PHP Fehler Header Informationen konnen nicht geandert werden – Header wurden bereits
Markus

Mögliches Duplikat:

Header bereits von PHP gesendet

Ich habe also diese Ausgabe auf meiner Seite. Ich verstehe nicht, warum sie auftaucht. Ich bin aber neu in PHP, also ist es vielleicht etwas einfach zu beheben

-Ich habe eine header.php-Datei, die alle wichtigen Informationen enthält, sowie das Banner der Seite. Diese header.php ist auf jeder Seite eingebunden.

– Ich lasse den Sitzungswert überprüfen, um sicherzustellen, dass der Benutzer auf einer bestimmten Seite sein darf. Wenn der Benutzer nicht dort sein darf, werfe ich ihn zurück zur Anmeldeseite

Hier kommt aber der Fehler. Das habe ich:

include_once ("header.php");

if ($_SESSION['uid']!='programmer')
{                        
header('Location: index.php');
echo 'you cannot be here';
exit;
}   

Der Index, auf den umgeleitet wird, enthält auch den Header. Gibt es also diesen Fehler, wenn ich diese mehreren Header-Referenzen habe? Ich sehe keinen anderen Weg, dies zu tun, und es macht mich verrückt!

  • Was ist in der Datei “header.php”?

    – Ivan Newostruev

    24. November 2009 um 22:49 Uhr

  • Banner, Config-Include, um mich mit db zu verbinden, und etwas jquery. Sehr wichtige Datei.

    – Markus

    24. November 2009 um 23:13 Uhr

  • Warum heißt es dann ‘header.php’? Warum nicht ‘init.php’ oder so?

    – ceejayoz

    24. November 2009 um 23:28 Uhr

  • Ich habe immer gelernt, die überflüssigen Dinge in die Header-Datei aufzunehmen und diese in alle Seiten einzufügen. Diese Header-Datei enthält nicht das Sitzungsmaterial, das jedoch enthalten ist. Das war aber noch nie ein Problem.

    – Markus

    24. November 2009 um 23:53 Uhr

  • Dies ist wahrscheinlich die am besten dokumentierte Fehlermeldung in PHP. Das Googeln der Fehlermeldung ergibt über 3 Millionen Ergebnisse.

    – Mike B

    25. November 2009 um 0:55 Uhr

PHP Fehler Header Informationen konnen nicht geandert werden – Header wurden bereits
ceejayoz

Sie können nicht verwenden header() sobald der Text an den Browser ausgegeben wurde. Wie dein header.php enthält vermutlich HTML-Ausgaben, header() kann nicht benutzt werden.

Sie können dies auf zwei Arten lösen:

  • Verschieben Sie die if-Anweisung über den Header include (dies funktioniert nicht, da Sie in den Kommentaren darauf hingewiesen haben, dass header.php legt die UID-Sitzung und andere wichtige Dinge fest).
  • Anruf ob_start() oben im Skript, um die Ausgabe zu puffern.

  • Beachten Sie auch, dass dieser Fehler auftreten kann, wenn Sie die Ausgabe nicht puffern, wenn auch nur eine einzelne Leerzeile (oder ein Leerzeichen?) vor dem Start-PHP-Tag steht, da selbst Leerzeichen als Ausgabe zählen, um festzustellen, ob Sie Header senden können.

    – Datan

    24. November 2009 um 22:54 Uhr

  • Okay, also habe ich den Include-Header NACH der if-Anweisung hinzugefügt, und das hat den Fehler beseitigt, aber jetzt, wenn ich mich richtig anmelde, werde ich zur index.php umgeleitet, egal was passiert.. warum ist das so? URL: nait.jtlnet.com/~fpkj5v0r/index.php Benutzer: Programmierer Passwort: prog123 -das ist jetzt mein Code:

    – Markus

    24. November 2009 um 22:56 Uhr

  • Und ja, danke für die Warnung, Dathan, ich habe über den Leerraum-Bug gelesen, und das scheint es nicht zu sein. Ich wünschte, es wäre so einfach!

    – Markus

    24. November 2009 um 22:57 Uhr

  • Header.php ist verantwortlich für die Logik, die den Benutzer authentifiziert und die $_SESSION zuweist[“uid”] Wert? Wenn dies der Fall ist, fragt Ihre if-Anweisung immer den Wert von uid ab, bevor er festgelegt wird.

    – Datan

    24. November 2009 um 23:16 Uhr

Wenn die header.php-Datei „das Banner hat“, dann gibt sie vermutlich HTML-Inhalte an die Seite aus.

Sie können keine HTTP-Header ausgeben, nachdem Sie Inhalte ausgegeben haben.

Sie können keine Kopfzeilen senden, nachdem Sie andere Inhalte gesendet haben. Ein sehr wahrscheinlicher Schuldiger sind zusätzliche Leerzeichen nach dem Schließen ?> -Tag in Ihrer header.php. Es ist im Allgemeinen eine gute Praxis, das schließende Tag in allen reinen Skript-PHP-Dateien vollständig wegzulassen.

Ihr Fehler sollte Ihnen genau sagen, welche Zeile (und welche Datei) die Ausgabe sendet.

Ich bin auf einen ähnlichen Fehler (ebenfalls scheinbar aus dem Nichts) in Bezug auf eine Umleitungsfunktion gestoßen, die früher wie folgt lautete:

function Redirect($url) {
        flush(); // Flush the buffer
        header("Location: $url"); // Rewrite the header
        die;
    }

Anscheinend müssen Sie auch hinzufügen ob_flush(); um den alten Header vollständig auszuspülen. Die neue Funktion lautet:

function Redirect($url) {
        flush(); // Flush the buffer
        ob_flush();
        header("Location: $url"); // Rewrite the header
        die;
    }

Hoffe, das hilft jemand anderem, der dieses Problem hat!

PHP Fehler Header Informationen konnen nicht geandert werden – Header wurden bereits
Markus

Okay, also ist es behoben …… ich bin mir nicht sicher wie, vielleicht kann jemand erklären, warum das plötzlich funktioniert.

Das ist mein Code:

include_once ("header.php");

if ($_SESSION['uid']!='programmer') {  
    if(isset($_SESSION['uid'])) {
        echo $_SESSION['uid'];
    }                           

    header('Location: index.php');
    exit;
}

Lassen Sie mich wiederholen, es funktioniert jetzt alles! PHP… warum arbeitest du jetzt?

  • Das wird nicht funktionieren, ist $_SESSION[‘uid’] eingestellt ist. Dann tritt das Echo vor dem Aufruf des Headers auf, was eine schlechte Sache ist! Wenn Sie also die Ausgabepufferung in header.php nicht einschalten, funktioniert dies nur, wenn $_SESSION[‘kid’] ist nicht eingestellt.

    – Peter Bagall

    3. Juni 2012 um 18:22 Uhr

  • @PeterBagnall ist richtig, die Logik dort ist fehlerhaft; Zuerst prüfen Sie den Wert $_SESSION[‘uid’] wenn Sie glauben, dass es möglicherweise nicht gesetzt ist, und DANN prüfen Sie, ob es gesetzt ist … if(isset($_SESSION[‘uid’])) { sollte stattdessen in der ersten if-Anweisung stehen. Sekunde: Der Grund, warum es funktionieren könnte, ist, wenn $_SESSION[‘uid’] = NULL; daher werden keine Daten an den Browser gesendet.

    – Valerie

    24. Februar 2016 um 4:12 Uhr

  • Das wird nicht funktionieren, ist $_SESSION[‘uid’] eingestellt ist. Dann tritt das Echo vor dem Aufruf des Headers auf, was eine schlechte Sache ist! Wenn Sie also die Ausgabepufferung in header.php nicht einschalten, funktioniert dies nur, wenn $_SESSION[‘kid’] ist nicht eingestellt.

    – Peter Bagall

    3. Juni 2012 um 18:22 Uhr

  • @PeterBagnall ist richtig, die Logik dort ist fehlerhaft; Zuerst prüfen Sie den Wert $_SESSION[‘uid’] wenn Sie glauben, dass es möglicherweise nicht gesetzt ist, und DANN prüfen Sie, ob es gesetzt ist … if(isset($_SESSION[‘uid’])) { sollte stattdessen in der ersten if-Anweisung stehen. Sekunde: Der Grund, warum es funktionieren könnte, ist, wenn $_SESSION[‘uid’] = NULL; daher werden keine Daten an den Browser gesendet.

    – Valerie

    24. Februar 2016 um 4:12 Uhr

1001940cookie-checkPHP-Fehler: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet [duplicate]

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

Privacy policy