Das übliche Spiel -Cannot modify header information - headers already sent by-
Hi,
ich hänge nun seit Stunden an diesem Fehler und komme auf keinen grünen Zweig. Vorab möchte ich aber noch dazusagen, dass auf dem XAMPP alles wunderbar funktioniert, auf dem realen Server...naja, sehts euch an:
Ich habe hier ein Login-Script und ein Logout-Skript, beide bereiten mir Probleme. Lassen wir also erstmal Code sprechen:
Führe ich das Skript aus, bin ich auch angemeldet, erhalte aber vorher den Fehler "Cannot modify header information - headers already sent by..."
Das würde ich sogar noch einsehen, da zuvor wirklich eine HTML-Ausgabe folgt und ich die Funktion dann erst einbinde. Später komme ich dann noch mit dem "wie mach ich das", aber lassen wir es jetzt erstmal bei dem "wieso sagt mir XAMPP sowas nicht"? Der meckert ja auch sonst überall rum mit den Notice-Meldungen, die eingeschaltet sind
Nun der nächste Code, bei dem ich nun wirklich verzweifle...weil ich nicht weiß, was der Interpreter von mir will:
<code type="php>
function logout()
{
if (isset($_SESSION['user']))
{
$_SESSION = array();
if (isset($_COOKIE[session_name()]))
{
setcookie(session_name(), '', time()-42000, '/').session_destroy();
}
echo "Erfolgreich abgemeldet";
} else {
echo "Du bist nicht angmeldet";
}
}
selbe Meldung wie oben. Auch diese Funktion bette ich ein, also vorher eine HTML-Ausgabe. ABER: Warum die Header Meldung? Ich modifiziere hier doch gar nichts. Jediglich "session_start();" wird vor der HTML-Ausgabe aufgerufen.
Ich bin übrigens abgemeldet, aber so ein Warning auf der Webseite ist ja auch hässlich :P
Kann mir jemand sagen, wo mein Denkfehler liegt? Vielleicht werde ich langsam auch einfach zu müde
Mfg
Mitchell
ich hänge nun seit Stunden an diesem Fehler und komme auf keinen grünen Zweig. Vorab möchte ich aber noch dazusagen, dass auf dem XAMPP alles wunderbar funktioniert, auf dem realen Server...naja, sehts euch an:
Ich habe hier ein Login-Script und ein Logout-Skript, beide bereiten mir Probleme. Lassen wir also erstmal Code sprechen:
// LogIn mit der nötigen Abfrage (davor kommen noch welche, sind aber hier irrelevant)
if (strtolower($name) == strtolower($row['user']) && $passwort == $row['passwort'])
{
$_SESSION['user'] = $row['user'];
header ('Location: http://'.$_SERVER['SERVER_NAME'].'/index.php');
}
Führe ich das Skript aus, bin ich auch angemeldet, erhalte aber vorher den Fehler "Cannot modify header information - headers already sent by..."
Das würde ich sogar noch einsehen, da zuvor wirklich eine HTML-Ausgabe folgt und ich die Funktion dann erst einbinde. Später komme ich dann noch mit dem "wie mach ich das", aber lassen wir es jetzt erstmal bei dem "wieso sagt mir XAMPP sowas nicht"? Der meckert ja auch sonst überall rum mit den Notice-Meldungen, die eingeschaltet sind
Nun der nächste Code, bei dem ich nun wirklich verzweifle...weil ich nicht weiß, was der Interpreter von mir will:
<code type="php>
function logout()
{
if (isset($_SESSION['user']))
{
$_SESSION = array();
if (isset($_COOKIE[session_name()]))
{
setcookie(session_name(), '', time()-42000, '/').session_destroy();
}
echo "Erfolgreich abgemeldet";
} else {
echo "Du bist nicht angmeldet";
}
}
selbe Meldung wie oben. Auch diese Funktion bette ich ein, also vorher eine HTML-Ausgabe. ABER: Warum die Header Meldung? Ich modifiziere hier doch gar nichts. Jediglich "session_start();" wird vor der HTML-Ausgabe aufgerufen.
Ich bin übrigens abgemeldet, aber so ein Warning auf der Webseite ist ja auch hässlich :P
Kann mir jemand sagen, wo mein Denkfehler liegt? Vielleicht werde ich langsam auch einfach zu müde
Mfg
Mitchell
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178543
Url: https://administrator.de/contentid/178543
Ausgedruckt am: 19.12.2024 um 12:12 Uhr
8 Kommentare
Neuester Kommentar
Warum die Header Meldung? Ich modifiziere hier doch gar nichts
nein - Aber sobald Du ein echo machst, "modifiziert" (sendet) dein Server die Header Informationen für dich./**
* @return bool
*/
function logout()
{
if (isset($_SESSION['user'])) {
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/').session_destroy();
}
return true;
}
return false;
}
"wieso sagt mir XAMPP sowas nicht"?
http://www.php.net/manual/de/intro.outcontrol.php
Übrigens ist alles außerhalb von PHP-Blöcken (Leerzeilen etc.) auch eine "Ausgabe".
Hättest du dir das Kapitel im Handbuch mal durchgelesen, dann hättest du herausgefunden das XAMPP die
Auf dem Webserver wiederum ist das deaktiviert und der sendet darum Header und Content gemischt, so schnell wie eben möglich - und das ist eben per HTTP-Spezifikation nicht möglich.
output_buffering = On
Direktive benutzt, und somit zuerst nur Header ausgibt und erst wenn der Parser völlig durchgelaufen ist den Content der Seite.Auf dem Webserver wiederum ist das deaktiviert und der sendet darum Header und Content gemischt, so schnell wie eben möglich - und das ist eben per HTTP-Spezifikation nicht möglich.