Cannot modify header information

Eule_971
Also ich habe diesen berüchtigen Cannot modify header information Fehler..

Ich weiß auch wie er zustande kommt, und wie man ihn behebt.. aber entweder ist das hier ein besonderer Fall oder ich stehe aufm Schlauch

Die Datei beginnt folgendermaßen (ja - ohne Leerzeichen! )
code:
1:
2:
3:
4:
5:
6:
<?php 
session_start();
$_SID = session_id();	


Dann folgen etwa 60 Zeilen in denen keine einzige Ausgabe stattfindet !
Und auch keine datei mit include eingebunden wird die evtl eine Ausgabe veraurachen könnte!
Dann kommt in Zeile 66 der erste echo befehl
code:
1:
echo '<div id="Inhalt">';


Dann folgen über 200 Zeilen Quelltext indenen jedemenge echo vorkommen..
Und in Zeile 261 kommt ein header() befehl
code:
1:
2:
3:
header("Location: view.php?cat=".$_POST['cat']."&threadid=".$_POST['threadid']."&SID=".$_SID."#foot");


Der dann diesen fehler verursacht
Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\xampp\htdocs\x\newpost.php:66) in C:\Programme\xampp\xampp\htdocs\x\newpost.php on line 261


Wie kann ich das umgehen? Es kann doch nicht sein das alle Ausgaben (echos) vor dem header() befehl weg müssen oder?? das muss doch an was anderm liegen...
Und der header() Befehl ist unten unersetzlich! Der muss da hin...!
Was soll ich machen? Bitte hilfe
p-Logic
Zitat:
Original von Eule_971
Es kann doch nicht sein das alle Ausgaben (echos) vor dem header() befehl weg müssen oder?? das muss doch an was anderm liegen...

Doch, leider ist es so. Das liegt ganz einfach daran, dass PHP die Datei schon stückchenweise verschickt, auch wenn sie noch nicht ganz geparst ist.
Da der Header am Anfang der zurück gesendeten Datei stehen _muss_, darf vorher natürich keine Ausgabe gemacht werden, die den Header abschließt und mit der Datenübertragung beginnt.


Zum Glück kann man aber die Ausgabe so weit verzögern, dass man den Header auch mitten im Script noch verändern kann:
Zitat:
Note: As of PHP 4, you can use output buffering to get around this problem, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.


Wenn du die Funktion nicht verwenden kannst, bau dir einfach selbst 'nen Buffer:
Du erstellst dir einen leeren String als Buffer: $buffer = "";
Statt: echo "<b>bla</b>";
Schreibst du: $buffer += "<b>bla</b>";
Und gibst nach dem letzten header() den Buffer aus: echo $buffer;
ThiefMaster
Du könntest auch einfach Templates verwenden, dann hast du das Problem nicht mehr.
**sLy**
http://smarty.php.net - sehr gutes system. Oder halt selber ne kleine klasse schreiben, ist zwar lange nicht so komfortabel wie smarty, aber eben eigen produktion^^

Gruß, sLy
J!0X
Ich hatte das Problem auch bei mir aber du kannst die gepufferter Ausgabe mit
php:
1:
<?php ob_start(); ?>

einschalten und mit
php:
1:
<?php ob_end_flush(); ?>

ausschalten. Bei mir hat das geholfen.
MfG J!0X
daHooligan
am einfachsten gehts mit $string=. (oder.=) anstelle jedes "echo" und in der letzten Zeile ein echo $string;