Mal wieder "headers already sent" -Problem ich weiß nicht warum
Phil Z.
- php
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
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
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
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
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";
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
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.
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
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.
Sorry es muss
http://menime-p.de/main.txt
heißen.
mfg
Phil Z.
Tach,
die Datei beginnt immer noch mit einem BOM, also in Hex "EF BB BF".
mfg
Woodfighter
Hi.
Und jetzt immer noch?
mfg
Phil Z.
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
Hey,
danke.
Habs mit dem Editor geschafft.
Der Dreamweaver kann sowas komischerweise wohl nicht ..
mfg
Phil Z.
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
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
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
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
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
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
Was passiert denn, wenn du das session_start() probehalber in die Ursprungsdatei einbindest.
Was passiert denn, wenn du das session_start() probehalber in die Ursprungsdatei einbindest.
Dann sagt er mir so ziemlich das gleiche
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.
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