Bei einigen Plugins für WordPress, die ich bis jetzt installiert habe, kam sehr oft Fehlermeldung folgender Art:

Warning: Cannot modify header information – headers already sent by
(output started at /www/…/wp-content/plugins/xyz.php:27) in
/www/…/wp-xyz.php on line 188

Ich habe da schon einiges probiert (u.a. die Firewall abgeschaltet) leider hat nichts geholfen. Abhilfe gibt es in dem man in der jeweiligen Plugindatei ganz am Anfang (nach <?php) die Zeile ob_start(); eintippt. Hier ein Beispiel:

<?php
ob_start();
…

Soweit ich es verstanden habe, hat dies irgendetwas mit Cookies bzw. Sessions zu tun, den irgendeine Datei bzw. Anwendung sendet schon vorher Headerinformationen.

Vielen Dank für den Tipp an Stefan.

Nachtrag: bei einigen Plugins lässt sich das Problem auch beheben in dem man das überflüssige Leerzeichen in der Zeile des schliessenden ?> bzw. in der Zeile danach entfernt.

Divi: Premium-Theme für WordPress
Werbung

Geschrieben von Vladimir

Vladimir Simović, arbeitet seit 2000 mit HTML & CSS und seit Januar 2004 mit WordPress. Im Laufe der Jahre hat er diverse Fachbücher und Fachartikel publiziert.

  1. ich glaub ja noch immer nicht wirklich, dass es das problem war; aber ich hatte dieses problem auch bereits – die lösung war: das leerzeichen vor <?php zu löschen 🙂

  2. Danach habe ich geschaut und weder vor noch nach <?php ein Leerzeichen gefunden.

  3. Oha, ich hatte das Problem auch schon dreimal, soweit ich mich erinnere. Jedesmal war es definitiv ein überzähliges Leerzeichen ganz am Dateiende nach dem schließenden ?>. (PHP-Ende)

  4. @Boris,
    ich sehe gerade, für ein Plugin, ist anscheinend dies die Lösung. Das mit Leerzeichen am Anfang kannte ich, aber mit Leerzeichen am Ende wusste ich bis jetzt nicht.

    Das andere Plugin allerdings, hat auch kein Leerzeichen am Ende.

  5. Das Problem bei diesen Fehlern ist, das eine Ausgabe generiert wird, bevor die HTTP-Header gesendet werden. Mit Cookies hat das nur in so fern zu tun, als das Cookies natürlich ebenfalls HTTP-Header benutzen.

    Die Lösung ist immer, die Ausgabe von Zeichen so lange zu unterbinden, bis alle Header gesendet wurden. Bei PHP-Skripten ist das oft ein Leerzeichen oder eine Leerzeile vor <?php oder nach ?>.

    Eine andere Möglichkeit ist, den Output-Buffer zu benutzen, was Du mit ob_start(); tust. Der Output-Buffer sorgt dafür, das die Ausgabe bis zur Beendigung des Skripts bzw. zum zum Aufruf von ob_end_flush();

  6. „ob_start();“

    Das verzögert aber auch die Anzeige beim Client – besonders bei größeren Seiten kann man das schon merken.

  7. […] auf $polyglot_settings[’default_lang’] = ‘de‘; änderte, erschien sofort die o.g. Meldung… Laut diversen Foren sollte es wohl an Leerzeichen liegen, die nach dem schließenden ?> noch vorhanden sein sollten. Da hier aber keine waren, konnte das nicht die Lösung sein. Dank Peruns Weblog und dem Hinweis, die Plugindatei mit <?php ob_start(); […]

Kommentare sind geschlossen.