Phil Z.: Mal wieder "headers already sent" -Problem ich weiß nicht warum

Hallo,

ich habe die main.php die so anfängt:

<?php  
include('sql.inc.php');  
include('auth.php');  
$p=$_GET['p'];  
$a=$_GET['a'];  
?>

und die sql.inc.php die so aussieht:

<?php
session_start();
$ms_user='xx';
$ms_pw='xx';
$ms_host='localhost';
$ms_db='xx';
$ms_connect=mysql_connect($ms_host,$ms_user,$ms_pw);
mysql_select_db($ms_db);
$table='xx';
$table2='xx';
?>

vor den <?php steht bei beiden dateien _nichts_ auch kein leerzeichen.

Fehlermeldungen:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\xampp\htdocs\2Line-Designs\admin\main.php:1) in C:\xampp\xampp\htdocs\2Line-Designs\admin\sql.inc.php on line 2

Hoffe ihr könnt mir helfen.

Bis dann

Phil

  1. Hello,

    vor den <?php steht bei beiden dateien _nichts_ auch kein leerzeichen.

    Wie hast Du das denn festgestellt?
    Mit deinem Texteditor oder mit einem Hex-Editor/-Viewer?

    Welche Codierung hast Du bei Deinem texteditor eingestellt?

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hi,

      Mit deinem Texteditor oder mit einem Hex-Editor/-Viewer?

      Texteditor.

      Welche Codierung hast Du bei Deinem texteditor eingestellt?

      UTF-8.

      Ich weiß net mehr weiter..
      mfg

      Phil

      1. Hello,

        Welche Codierung hast Du bei Deinem texteditor eingestellt?
        UTF-8.

        Ich weiß net mehr weiter..

        Nun ist doch aber Hoffnung :-)
        Schau Dir die Datei nun mal mit der "normalen" Codierung oder im Hex-Format an. Die meisten Editoren können das.

        Dein Editor hat die Datei als utf-8 codiert abgespeichert und eine BOM an den Anfang gestellt.

        Du kannst das im Editor abstellen.

        Du kannst auch ein Workaround bauen für include()
        Bau Dir eine Funktion, die von der Date einfach die ersten Zeichen abschneidet, bis "<?php" kommt. und sie dann erst includet.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. echo $begrüßung;

          Du kannst auch ein Workaround bauen für include()
          Bau Dir eine Funktion, die von der Date einfach die ersten Zeichen abschneidet, bis "<?php" kommt. und sie dann erst includet.

          Das nützt ja nichts, wenn bereits die Haupt-Script-Datei verBOMt ist.

          echo "$verabschiedung $name";

          1. Hello,

            Du kannst auch ein Workaround bauen für include()
            Bau Dir eine Funktion, die von der Date einfach die ersten Zeichen abschneidet, bis "<?php" kommt. und sie dann erst includet.

            Das nützt ja nichts, wenn bereits die Haupt-Script-Datei verBOMt ist.

            Mmmh. Das ist allerdings sehr wahrscheinlich.
            Dann hilft es also nur, beim Speichern sauber zu arbeiten und den Editor zu kastrieren.

            Ich habe auch den Eindruck, dass die "Welle BOM" gerade erst anfängt, so wie damals die Welle "register_globals"

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hallo.

              BOM abgetsellt, neu gespeichert die Dateien, gleicher Fehler, keine Veränderung, die gabs ja auch vorher nie. Benutzer übrigens Dreamweaver 8. Aber nur den Editorteil. :(

              mfg

              Phil Z.

              1. Hello,

                Hallo.

                BOM abgetsellt, neu gespeichert die Dateien, gleicher Fehler, keine Veränderung, die gabs ja auch vorher nie. Benutzer übrigens Dreamweaver 8. Aber nur den Editorteil. :(

                Steht etwas geheimes drin in den Dateien?

                Kannst Du uns die Files auf dem Webserver mal als *.txt freigeben?

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

                1. Hi.

                  Kannst Du uns die Files auf dem Webserver mal als *.txt freigeben?

                  http://menime-p.de/sql.inc.txt
                  http://menime-p.de/mai.txt

                  mfg

                  Phil Z.

                  1. http://menime-p.de/mai.txt

                    Sorry es muss
                    http://menime-p.de/main.txt
                    heißen.
                    mfg
                    Phil Z.

                    1. Tach,

                      http://menime-p.de/main.txt

                      die Datei beginnt immer noch mit einem BOM, also in Hex "EF BB BF".

                      mfg
                      Woodfighter

                      1. Hi.

                        Und jetzt immer noch?

                        mfg

                        Phil Z.

                        1. Hello,

                          Hi.

                          Und jetzt immer noch?

                          mfg

                          Phil Z.

                          vermutlich ja.

                          Ich habe geschaut, nachdem dieses Posting hier erschien.

                          Vorgehensweise:
                          öffne erst den Editor
                          öffne dann über das Dateimenu _im_ editor die betroffene Datei im ANSI bzw. ASCII-Modus bzw.

                          dann kannst Du die Zeichen löschen.

                          Wenn Du die Files über Doppelklick öffnest, nimmt ein Editor meistens das Format, das ihm am wahrscheinlichsten erscheint. Eine BOM an Anfang wird ihn dann in 90% der Fälle auch in UTF-8 führen. Natürlich nur, wenn er das Format kennt. Wenn Du einen alten EDIT.COM von DOS 6.22 benutzt, dann wird der das nicht machen ;-))

                          Harzliche Grüße vom Berg
                          http://www.annerschbarrich.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau

                          1. Hey,
                            danke.
                            Habs mit dem Editor geschafft.
                            Der Dreamweaver kann sowas komischerweise wohl nicht ..

                            mfg

                            Phil Z.

                    2. Hello,

                      *ups*

                      <?php
                      include('sql.inc.php');
                      include('auth.php');
                      $p=$_GET['p'];
                      $a=$_GET['a'];
                      ?>

                      Da ist eine BOM drin

                      Harzliche Grüße vom Berg
                      http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau

  2. Hallo,

    hallo phil!

    <?php
    session_start();
    $ms_user='xx';
    $ms_pw='xx';
    $ms_host='localhost';
    $ms_db='xx';
    $ms_connect=mysql_connect($ms_host,$ms_user,$ms_pw);
    mysql_select_db($ms_db);
    $table='xx';
    $table2='xx';
    ?>

    versuch mal statt "session_start();" "@session_start();", dass unterdrückt zwar vielleicht die ausgabe, löst aber dein problem nicht...

    lg,
    der-daniel

    1. Hallo Daniel,

      versuch mal statt "session_start();" "@session_start();", dass unterdrückt zwar vielleicht die ausgabe, löst aber dein problem nicht...

      Warum gibst Du ihm dann den Tipp, wenn er das Problem nicht löst? Den @-Operator sollte man nur genau dann verwenden, wenn man absolut _sicher_ ist, dass man Fehlermeldungen unterdrücken will. Hier in diesem Fall wäre es absolut kontraproduktiv, da man Fehler gar nicht mehr erkennen kann.

      Viele Grüße,
      Christian

      1. hi christian!

        Warum gibst Du ihm dann den Tipp, wenn er das Problem nicht löst? Den @-Operator sollte man nur genau dann verwenden, wenn man absolut _sicher_ ist, dass man Fehlermeldungen unterdrücken will. Hier in diesem Fall wäre es absolut kontraproduktiv, da man Fehler gar nicht mehr erkennen kann.

        weil sich manche menschen damit zufrieden geben, das problem einfach auszublenden, anstatt es zu lösen.
        deshalb hab ich auch geschrieben, dass es sein problem nicht löst, sondern nur die fehlermeldung ausblendet.

        liegt es z.b. wirklich an einer schlechten oder fehlerhaften apache-konfiguration auf die er keinen einfluss hat (z.b. mieser webhoster) könnte ihm das evtl. helfen.
        und darum geht's doch, oder?

        ist in jedem fall ein lösungsansatz...

        Viele Grüße,
        Christian

        beste grüße,
        der-daniel

        1. Hallo Daniel,

          Warum gibst Du ihm dann den Tipp, wenn er das Problem nicht löst? Den @-Operator sollte man nur genau dann verwenden, wenn man absolut _sicher_ ist, dass man Fehlermeldungen unterdrücken will. Hier in diesem Fall wäre es absolut kontraproduktiv, da man Fehler gar nicht mehr erkennen kann.

          weil sich manche menschen damit zufrieden geben, das problem einfach auszublenden, anstatt es zu lösen.

          Das ist eine gute Erklärung, warum manche Menschen ein @ vor session_start schreiben. Das ist kein guter Grund, das als Tipp zu geben. IMO.

          liegt es z.b. wirklich an einer schlechten oder fehlerhaften apache-konfiguration auf die er keinen einfluss hat (z.b. mieser webhoster)

          Darum geht's hier definitiv nicht - das sollte aus dem Ausgangsposting klar geworden sein.

          könnte ihm das evtl. helfen.

          Es wird ihm definitiv *nicht* helfen, da session_start() versucht, Cookies zu setzen, was es nicht mehr kann, weil schon Ausgabe geschehen ist. Wenn er hier einfach die Fehlermeldung ausblendet, ändert das nichts daran, dass die Cookies nicht gesetzt werden können - und damit werden die Sessions definitiv nicht so wie gewünscht funktionieren (weil eben *immer* in der URI etwas angehängt wird - oder, falls use_trans_sid deaktiviert ist, die Sessions gar nicht funktionieren). Das Ausblenden des Problems könnte in so einem Fall dazu führen, dass ein paar Tage später ein Thread kommt "Warum funktionieren meine Sessions nicht oder nicht so wie gewollt?" - und dann unnötig nur Energien verschwendet werden.

          ist in jedem fall ein lösungsansatz...

          Nicht in *jedem* Fall. Wenn's um Operationen geht, die Fehlschlagen _dürfen_ (stat() z.B.), dann ja. Aber bei Operationen, die korrekt ausgeführt werden müssen ist das definitiv keine Lösung.

          Viele Grüße,
          Christian

          1. hi christian!

            damit hast du wohl recht, in diesem fall hilft's ihm wohl nicht...
            mir persönlich ist es lieber 5 falsche lösungsansätze/antworten erhalten zu haben, als gar keine.
            aber wie gesagt, in diesem fall hast du sicherlich recht, manchmal geht meine will-helfen-ader mit mir durch und es wird unproduktiv.

            beste grüße,
            der-daniel

  3. Was passiert denn, wenn du das session_start() probehalber in die Ursprungsdatei einbindest.

    1. Was passiert denn, wenn du das session_start() probehalber in die Ursprungsdatei einbindest.

      Dann sagt er mir so ziemlich das gleiche

      1. Dann liegt der Fehler höchstwahrscheinlich in deiner main.php - also entweder wird die main.php selbst eingefügt oder anderweitig ausgeführt. Dein apache-Server ist so konfiguriert, dass an jede gesendete Datei im Vorfeld noch ein Schnippsel angehängt wurde oder, am wahrscheinlichsten, irgendwo hat sich ein Leerzeichen eingefügt. Bearbeite Datei einfach mal mit dem Texteditor.

  4. Hallo Phil,

    vor den <?php steht bei beiden dateien _nichts_ auch kein leerzeichen.

    dedlfix und Tom haben es weiter unten ja schon gesagt, ich wiederhole es nur mal etwas deutlicher: Diese zitierte Aussage von Dir ist falsch. In allen Deinen PHP-Dateien steht ganz am Anfang ein sog. BOM (Byte order mark), das Dein Editor automatisch einfügt, falls Du UTF-8 verwendest. UTF-8 schreibt ein BOM nicht vor - und es ist bei UTF-8 auch relativ nutzlos (im Prinzip ist die einzig sinnvolle Anwendung das Erkennen von UTF-8 an Hand des BOM). Stelle Deinen Editor so ein, dass er kein BOM bei UTF-8-Dateien schreibt, dann verschwindet auch Dein Problem.

    Viele Grüße,
    Christian