jaroni: Headers already sent

Hallo Fachleute, ich bin am Verzweifeln. Auf einer Homepage habe ich eine Fehlermeldung, die ich einfach nicht weg bekomme:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /html/fewo/fr/kontaktformular2/index.php:31) in /html/fewo/fr/kontaktformular2/index.php on line 77

In Zeile 77 steht folgendes:

session_start('kontaktformular');

In Zeile 31 steht da schon mehr:

<tr><td align="center" valign="top" background="../bg_navi123.jpg"><span class="Stil89"><a href="../startseite.htm" target="_parent"> <font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Page d' accueil</strong></font></font></a> <img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /> <a href="../wohnungen.htm" target="_parent"> <font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Les appartements</strong></font></font></a><img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /><a href="../freizeit1.htm" target="_parent"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Les alentours</strong></font></font></a><img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /> <a href="../freizeit2.htm" target="_parent"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Les possibilités de loisirs</strong></font></font></a><img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /> <a href="../preise.htm" target="_parent"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Prix</strong></font></font></a> <img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /><a href="../kontaktformular2/index.php" target="_parent"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Disponibilités</strong></font></font></a> <img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /> <a href="../kontakt_anfahrt.htm" target="_parent"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Le trajet</strong></font></font></a><img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /><a href="../wetter.htm"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Le temps</strong></font></font></a> <img src="../trenner123.jpg" width="15" height="32" align="absmiddle" /><span class="Stil87"><a href="../kontaktformular/index.php" target="_parent"><font face="Geneva, Arial, Helvetica, sans-serif" color="#FFFFFF"><font size="2"><strong>Contacter</strong></font></font></a></span></span><strong></span></strong></td>

Ich habe keine Ahnung, was in dieser sehr umfangreichen Zeile 31 diese Fehlermeldung verursachen könnte. Hat jemand einen Tipp?

LG
Diana

  1. Hi!

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /html/fewo/fr/kontaktformular2/index.php:31) in /html/fewo/fr/kontaktformular2/index.php on line 77

    Diese Meldung ist schon so oft nachgefragt worden, dass ich mir nicht vorstellen kann, dass du dazu nichts gefunden hast.

    Ich habe keine Ahnung, was in dieser sehr umfangreichen Zeile 31 diese Fehlermeldung verursachen könnte. Hat jemand einen Tipp?

    Immer die selbe Ursache: Vor einer HTTP-Header-sendenden Funktion (session_start() gehört dazu) darf keine Ausgabe erfolgen. Nicht einmal das unsichtbarste Leerzeichen. Üblicherweise stellt man session_start() an den Scriptanfang, fängt die Ausgabe in einem Puffer ab oder sortiert seinen Ablauf nach dem EVA-Prinzip um (Ausgabe erfolgt ganz zum Schluss).

    Lo!

    1. Nicht einmal das unsichtbarste Leerzeichen.

      Wie siehts mit U+0000 aus? Das ist sowas von NIX, aber trotzdem sinds 8 Bit, die daherkommen.

      Hat jemand lust, das schnell auszuprobieren.

      1. Hallo,

        Nicht einmal das unsichtbarste Leerzeichen.
        Wie siehts mit U+0000 aus? Das ist sowas von NIX, aber trotzdem sinds 8 Bit, die daherkommen.

        richtig, und deswegen kann man schon aus der Theorie bzw. aus formalen Erwägungen sagen:
        Es ist ein Byte *Nutzdaten*, damit werden die bis dahin vorbereiteten Header gesendet und als "erledigt" betrachtet.

        PHP kann ja auch verwendet werden, um Binärressourcen auszuliefern oder zu generieren - in denen kann ohne weiteres 0x00 als erstes Byte vorkommen.

        Ciao,
         Martin

        --
        Paradox ist, wenn jemand eingefleischter Vegetarier ist.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. Hi!

        Nicht einmal das unsichtbarste Leerzeichen.
        Wie siehts mit U+0000 aus? Das ist sowas von NIX, aber trotzdem sinds 8 Bit, die daherkommen.

        PHP interessiert sich nicht für U+xxxx und U+xxxx lässt sich auch nicht in Bits ausdrücken. Solange du aber eine Kodierung nimmst, die daraus ein oder mehrere Bytes macht, ist das für PHP etwas, das ausgegeben werden kann und damit die Header-Sendung abschließt.

        Lo!

      3. Nicht einmal das unsichtbarste Leerzeichen.

        Wie siehts mit U+0000 aus? Das ist sowas von NIX, aber trotzdem sinds 8 Bit, die daherkommen.

        Hat jemand lust, das schnell auszuprobieren.

        Was meinst du mit: U+0000?

        1. Hi!

          Was meinst du mit: U+0000?

          Das Unicode-Zeichen mit dem Codepoint 0x0000.

          Lo!

      4. @@suit:

        nuqneH

        Wie siehts mit U+0000 aus?

        Ist das in SGML (HTML) erlaubt? In XML (XHTML) ist es das nicht.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Wie siehts mit U+0000 aus?

          Ist das in SGML (HTML) erlaubt? In XML (XHTML) ist es das nicht.

          Meiner Erfahrung nach verwirft PHP das Zeichen wenn die Ausgabe als text/html erfolgt.

          echo 'foo' . chr(0) . 'bar'; hier kommt nur 6 Byte an, nicht 7.

          Darum eben auch meine ursprüngliche Frage ob das Zeichen dann überhaupt "gezählt" wird, wenn es vor dem Header kommt oder ob es ohnehin rausgeworfen wird.

          1. Hi!

            Meiner Erfahrung nach verwirft PHP das Zeichen wenn die Ausgabe als text/html erfolgt.
            echo 'foo' . chr(0) . 'bar'; hier kommt nur 6 Byte an, nicht 7.

            Mit PHP 5.3.2 nicht nachvollziehbar. Ich bekomme 7 Bytes (oder eins bei echo "\x00";).

            Lo!

        2. Hi,

          Wie siehts mit U+0000 aus?
          Ist das in SGML (HTML) erlaubt? In XML (XHTML) ist es das nicht.

          Ist doch irrelevant - PHP-Scripte können ja auch nicht-SGML-basiertes Zeug als Antwort auf einen HTTP-Request ausgeben.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      5. Hi,

        Wie siehts mit U+0000 aus? Das ist sowas von NIX, aber trotzdem sinds 8 Bit, die daherkommen.

        Wieviele Bits das sind, ist von der Codierung abhängig. Bei der (noch nicht öffentlich bekannt gemachten) MudGuard42-Codierung sind's 42 Bits ;-)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hi,

    Hallo Fachleute, ich bin am Verzweifeln.

    Das tun wir auch jedes Mal, wenn wieder jemand mit diesem schon zigfach diskutierten Problem erneut ankommt.

    Auf einer Homepage habe ich eine Fehlermeldung, die ich einfach nicht weg bekomme:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /html/fewo/fr/kontaktformular2/index.php:31) in /html/fewo/fr/kontaktformular2/index.php on line 77

    In Zeile 77 steht folgendes:

    session_start('kontaktformular');

    Warum übergibst du dieser Funktion ein Textliteral als Parameter?
    Diese Funktion will überhaupt keine Parameter haben.

    In Zeile 31 steht da schon mehr:

    <tr><td align="center" valign="top" background="../bg_navi123.jpg">...

    Ich habe keine Ahnung, was in dieser sehr umfangreichen Zeile 31 diese Fehlermeldung verursachen könnte.

    Das erste < verursacht ihn - weil es die erste Ausgabe darstellt, die an den Client gesendet werden soll.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo,

      Ich habe keine Ahnung, was in dieser sehr umfangreichen Zeile 31 diese Fehlermeldung verursachen könnte.
      Das erste < verursacht ihn

      <count type="peas">Glaub ich nicht - so wie das aussieht, dürfte es eher schon das erste Leerzeichen/Tab-Zeichen davor sein.</count>

      Ciao,
       Martin

      --
      Chef:         Zum vierten Mal in dieser Woche erwische ich Sie nun schon beim Zuspätkommen. Was haben Sie dazu zu sagen?
      Angestellter: Dann muss heute Donnerstag sein.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Hi,

        Das erste < verursacht ihn

        <count type="peas">Glaub ich nicht - so wie das aussieht, dürfte es eher schon das erste Leerzeichen/Tab-Zeichen davor sein.</count>

        ++peas

        Stimmt natürlich.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Hi,

        Hallo,

        Ich habe keine Ahnung, was in dieser sehr umfangreichen Zeile 31 diese Fehlermeldung verursachen könnte.
        Das erste < verursacht ihn

        <count type="peas">Glaub ich nicht - so wie das aussieht, dürfte es eher schon das erste Leerzeichen/Tab-Zeichen davor sein.</count>

        <kack kind="Korinthen">Da die ersten 30 Zeilen nicht für die Fehlermeldung verantwortlich sind, steht dort irgendetwas, was in PHP-Klammerung <?php ... ?> oder ähnlichem steht. Da das Ende davon nicht in Zeile 31 zu sehen ist, steht das also irgendwo vor dem Ende von Zeile 30. Stünde dort noch was vor dem Zeilenende, käme die Meldung mit Zeile 30. Demzufolge ist das, was die Meldung verursacht, doch wohl der Zeilenumbruch am Ende von Zeile 30. *)</kack>

        *) oder wird ein Zeilenumbruch unmittelbar nach dem ?> vom PHP-Interpreter anders behandelt als andere Zeilenumbrüche?

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Hallo,

          *) oder wird ein Zeilenumbruch unmittelbar nach dem ?> vom PHP-Interpreter anders behandelt als andere Zeilenumbrüche?

          genau das: Ein Zeilenumbruch direkt nach dem ?> wird nicht an den Client ausgegeben. Ich finde aber im Moment nicht die Stelle, wo's beschrieben ist.

          Ciao,
           Martin

          --
          Fettflecke werden wieder wie neu, wenn man sie regelmäßig mit etwas Butter einschmiert.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. [latex]Mae  govannen![/latex]

            *) oder wird ein Zeilenumbruch unmittelbar nach dem ?> vom PHP-Interpreter anders behandelt als andere Zeilenumbrüche?

            genau das: Ein Zeilenumbruch direkt nach dem ?> wird nicht an den Client ausgegeben. Ich finde aber im Moment nicht die Stelle, wo's beschrieben ist.

            Hier

            Stur lächeln und winken, Männer!
            Kai

            --
            Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
            in Richtung "Mess up the Web".(suit)
            SelfHTML-Forum-Stylesheet