Dazu müsstest du wissen, wie eine HTTP-Nachricht (Anfrage ["Request"] oder bei dir v. a. die Antwort ["Response"]) aufgebaut ist.
Ein Auszug aus dem Wikipediaartikel über HTTP: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Example_session
Zuerst kommt die HTTP-Version inkl. Statuscode, dann die einzelnen Header und schließlich das eigentliche Dokument, hier ein HTML-Dokument.
Diese Reihenfolge muss so eingehalten werden!
Cookies werden auch in Headern transportiert.
Wenn du nun in PHP per echo() oder einfach außerhalb der PHP-Tags (vor <?php oder nach ?>) etwas ausgibst, dann kannst du danach keinen Header mehr setzen, da zum Zeitpunkt der Dokumentenausgabe die Header schon aufgrund der festen Reihenfolge gesendet werden mussten.
Die Reihenfolge der Header ist egal (sofern du nicht gleichnamige mehrfach sendest, siehe hier), d. h. ob du zuerst die Cookies setzt oder den Content-Type Header spielt keine Rolle.
Du hast die Cookies in einer separaten Datei "cookie_umschaltung.php" gesetzt. Nach Ausführung dieser Datei (per include()) wolltest du den Content-Type Header setzen. Allerdings fand am Ende der "cookie_umschaltung.php" eine Ausgabe statt. Im Speziellen war der Grund jener, dass du nach dem schließenden PHP-Tag noch - wenn auch unsichtbare bzw. nur als Zeilen sichtbare - Zeichen hattest. Somit konntest du danach den Content-Type nicht mehr setzen. Dies geschah zu all deinem Pech auch noch ohne Fehlermeldung, da du die Fehler nicht aktiviert hast.
Wir merken uns:
- Schließende PHP-Tags einfach weglassen! Somit kann keine "merkwürdige" Ausgabe stattfinden.
- Alle Fehlermeldungen in der Entwicklungsphase immer aktivieren!
- Steuerzeichen können mit einigen Editoren extra dargestellt werden, um sie zu finden.
Ein Auszug aus dem Wikipediaartikel über HTTP: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Example_session
Code:
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "3f80f-1b6-3e1cb03b"
Content-Type: text/html; charset=UTF-8
Content-Length: 131
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>
Diese Reihenfolge muss so eingehalten werden!
Cookies werden auch in Headern transportiert.
Wenn du nun in PHP per echo() oder einfach außerhalb der PHP-Tags (vor <?php oder nach ?>) etwas ausgibst, dann kannst du danach keinen Header mehr setzen, da zum Zeitpunkt der Dokumentenausgabe die Header schon aufgrund der festen Reihenfolge gesendet werden mussten.
Die Reihenfolge der Header ist egal (sofern du nicht gleichnamige mehrfach sendest, siehe hier), d. h. ob du zuerst die Cookies setzt oder den Content-Type Header spielt keine Rolle.
Du hast die Cookies in einer separaten Datei "cookie_umschaltung.php" gesetzt. Nach Ausführung dieser Datei (per include()) wolltest du den Content-Type Header setzen. Allerdings fand am Ende der "cookie_umschaltung.php" eine Ausgabe statt. Im Speziellen war der Grund jener, dass du nach dem schließenden PHP-Tag noch - wenn auch unsichtbare bzw. nur als Zeilen sichtbare - Zeichen hattest. Somit konntest du danach den Content-Type nicht mehr setzen. Dies geschah zu all deinem Pech auch noch ohne Fehlermeldung, da du die Fehler nicht aktiviert hast.
Wir merken uns:
- Schließende PHP-Tags einfach weglassen! Somit kann keine "merkwürdige" Ausgabe stattfinden.
- Alle Fehlermeldungen in der Entwicklungsphase immer aktivieren!
- Steuerzeichen können mit einigen Editoren extra dargestellt werden, um sie zu finden.