PHP Individueller "Header already sent by.." Fehler

trtwx

Cadet 3rd Year
Registriert
März 2017
Beiträge
39
Heyhey und guten Tag!


Aktuell bin ich dabei ein kleines, anfängliches CMS zu erstellen und treffe dabei schon auf ein eigentlich kleines Problem.
Und zwar handelt es sich dabei um Sessions, welche ich durch eine Weiterleitung auf eine "logout.inc.php" per "header(Location: ...);" und "session_destroy();" löschen möchte. Hierbei wird aber grundsätzlich vorher auf der Seite meine "header.inc.php" included um den eigentlichen Code etwas übersichtlicher zu machen. Nach nun mehreren Stunden ist mir aufgefallen woran es liegt, dass ich die Fehlermeldung "Cannot modify header information - headers already sent by.." bekomme:

Das komplette in der "header.inc.php" folgende HTML-"Skript" nachdem ich dort die Session gesetzt habe. Sprich: Meine header.inc.php wird grundsätzlich überall included, darin enthalten die Session und alle anderen, wichtigen Informationen um die Seiten zu strukturieren (css-Verlinkung, meta-Tags....).

Existiert dieses HTML-Getippe also nicht mehr in dieser File, so funktioniert alles einwandfrei. Andernfalls muss ich gleich doppelt auf Logout klicken - einmal mit Fehler, danach reibungslos.


Ideen wie ich drum rum komme?




Edit:

Ich habe jetzt in der home.php im PHP-Script jeweils zu Beginn und zum Ende folgende Zeilen eingefügt: "
ob_start();" und "ob_end_flush();". Allerdings kann dies ja nicht die finale Lösung sein, oder?
 
Zuletzt bearbeitet:
Naja, die offensichtliche (und auch praktizierte) Lösung ist ja, den header()-Aufruf einfach vor jeglicher Textausgabe zu stellen. Aber ich habe den Eindruck, dass du das schon weißt...?
 
Mein erster Absatz wäre Session Handling und HTML und CSS in ne eigene Datei auszulagern. So kannst Du beides getrennt bei Bedarf einbinden. Und das HTML Zeugs erst includne wenn sämtliches Session Handling abgeschlossen ist.
 
  • Gefällt mir
Reaktionen: trtwx
Naja, manchmal beißt sich die Katze da schon ein bißchen in den Schwanz, und Leerzeichen reichen auch schon. um das Problem auszulösen.

-- Output Buffering anstellen (ist sowieso immer eine gute Idee)
-- Code strukturieren. Ja, mit OB = on kann man header(...) prinzipiell auch ans Ende des Codes hängen, aber das heißt nicht, daß man das tun sollte.
-- Außerdem auch mal das header() durch etwas anderes ersetzen, zB print* und damit dann das Ergebnis nicht in den Headerbereich, sondern ins Dokument reinschreiben.

Dann sieht man meist sofort, was das Problem ist. Headerzeilen müssen ganz oben stehen und es darf nichts(!) davor geschrieben werden außer andere Header.
 
Zurück
Oben