header Problem

AllOnline

New Member
Hallo,

ich bin mit Confixx und allen Daten von SuSe zu Debain umgezogen.
Vorher liefen alle Scripts;
nun bekomm ich jede menge Fehlermeldungen,
dass der Header schon gesendet wurde und das funktionen wie Session, und set_Header nicht funktionieren.

Code:
Meldung : Cannot modify header information - headers already sent by (output started at /home/www/web14/html/main/index.php:1)

Wie gesagt auf dem alten Server lief es,
woher kann eine solche Meldung noch kommen?
Vorher wird definitiv nichts ausgeführt.
(außer htaccess und mod_rewrite)

edit: Bei einem Script habe ich jetzt doch eine Ausgabe vor der php Anweisung gefunden, aber warum ging eine Weiterleitung den dann vorher? header('Location:...)
 
Last edited by a moderator:
Eventuell benötigt das Script den Ioncube Loader oder ähnliches und fängt die Fehlermeldung selbst nicht ab. Ist dir da was bekannt?
 
Also gesucht und gefunden, das Script gibt wohl vorher etwas aus,
und somit ist header hinfällig.

Nur wie kann ich das Lösen?

Es wird eben die Webseite geladen
1. header
2. Layout
3. Inhalt mit evtl header informationen

So dann hab ich mir gedacht, lass doch vor der index einen buffer aufbauen und alles auf einmal ausgeben:

PHP:
<?php 

ob_start(); //startet Buffer
include ('index.php');
echo ob_get_contents(); //Buffer wird ausgegeben
ob_end_clean(); //Buffer wird gel�scht

?>

Nur leider ist das sehr RAM-Fressend:
Code:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 40961 bytes)

Welche Möglichkeiten fallen euch noch ein?
 
Der Trick liegt in der php.ini!
Dort musst du das Output-Buffering aktivieren, dann kannst du auch nach einem echo() oder ähnlichem noch die Headers setzen.

Aber dennoch ist das Script dann bescheiden programmiert ;)
 
Danke für die Antwort,
hat das irgend welche Nachteile?

Wie kann ich das in Confixx für einzelne User einstellen?

danke dir.
(Welche Möglichkeiten gibt es noch, bzw. wie kann man es umprogrammieren und dennoch das System von oben haben?)

edit: Und dennoch habe ich Scripts wo definitiv bisher keine Ausgaben erfolgt sind :-(
Nun habe ich Beispielsweise die header informationen zum test wirklich in zeile 1 gelegt, (bzw 2 vorher ist nur <?php) und denn der Fehler. Es sind keine Ausgaben vorhanden!

Ich arbeite mit eclipse, kann das an BOM (ByteOrderMark) liegen?

edit2: Wie schon erwähnt es liegt am BOM.


Ich habe mal notepad++ probiert und ohne BOM gespeichert, und siehe da es geht.
Nur sollte ich jetzt alles ohne BOM speichern?
Welche Vor- bzw. Nachteile hat das?
Wie stell ich BOM in eclipse ab?

Danke euch
 
Last edited by a moderator:
Wie Lord Gorke schon schrieb, aktiviere einfach das output buffering in php.ini, das einzige mir bekannte Problem bei einer globalen Aktivierung kann im Zusammenhang mit grossen Files auftreten, z.B. bei Gallery Scripts, da hier dann ziemlich viel Speicher durch den Buffer belegt werden kann.

Du kannst diese Option auch per .htaccess für einzelne User aktivieren:
Code:
php_value output_buffering On
 
Output buffer sind nicht zum Vertuschen von Bugs in Scripten gedacht. Das Script ist kaputt und muss gefixt werden, alles Andere ist Müll...
 
Entschuldigt, aber warum lest ihr nicht?:
Ich arbeite mit eclipse, kann das an BOM (ByteOrderMark) liegen?

edit2: Wie schon erwähnt es liegt am BOM.


Ich habe mal notepad++ probiert und ohne BOM gespeichert, und siehe da es geht.
Nur sollte ich jetzt alles ohne BOM speichern?
Welche Vor- bzw. Nachteile hat das?
Wie stell ich BOM in eclipse ab?

Danke euch
 
Mein Edit ist seit 36Stunden da!

Na und? Ich habe den Post bereits vor dem Edit gelesen. Wenn ich jeden Thread vorm Antworten nochmal komplett lesen würde, käme ich nicht mehr zum Antworten. Wenn Du auf meine Antworten künftig verzichten möchtest, kein Problem...
 
Entschuldigt, aber warum lest ihr nicht?:
Weil Du es auch nicht tust? :D

Zu Deiner speziellen Frage:
PHP kennt keinen BOM. Er wird also nicht unterdrückt. Und da der BOM immer vor dem ersten PHP-Tag steht wird er direkt in den Output-Buffer geleitet.
Und ohne output_buffering wird es also gleich zum Browser geschickt. Alle Header-Manipulationen sind damit vorbei.

Und Deine Nachfrage zu den Nachteilen war eh Hinfällig. Denn offensichtlich war der Output-Buffer auf der alten Installation aktiviert. Sonst hätte es dort ebenfalls diese Probleme gegeben.

huschi.
 
Back
Top