HEADERS ALREADY SENT in Http.php

Erscheint in dem System-Logfile var/log/ system.log diese Fehlermeldung: DEBUG (7): HEADERS ALREADY SENT: <pre>[0] PFAD_ZUR_MAGENTO_ISTALLATION\app\ code\core\Mage\Core\Controller\Response\Http.php:53, gilt es zuerst, die Stelle zu finden an der der Fehler entsteht, da die Http.php nur nachgeschaltet ist. Hierzu fügen wir z.B. in der Datei

 

 

\lib\Zend\Controller\Response\Abstract.php

 

in der Funktion

 

public function canSendHeaders($throw = false)

 

diese zwei Zeilen an, um Dateinamen und Zeile auszugeben:

 

Mage::log('File: ' . $file);       

Mage::log('Line: ' . $line);

 

In unserem Falle ist der Verursacher hier die Datei

 

\lib\Varien\Image\Adapter\Gd2.php

 

und hierin die Funktion

 

public function display()

 

Man könnte auch in der o.g. Http.php die Direktive

 

Mage::log(print_r(get_included_files(),true));

 

einfügen, jedoch sind wir dann Wochen damit beschäftigt, die ganze Liste der bis dahin eingebundenen Dateien zu untersuchen.

 

An welchen Stellen wird diese Funktion display() jedoch aufgerufen? Unter anderem in

 

\app\code\core\Mage\Adminhtml\controllers\Cms\WysiwygController.php

 

in der Funktion

 

public function directiveAction()

 

Wir sehen hier auf unserem Wege einige Threads, in denen die Problematik beschrieben wird, unter anderem sehen wir in den Release Notes von Magento CE 1.9.3 (http://devdocs.magento.com/guides/m1x/ce19-ee114/ce1.9_release-notes.html), dass dieser Bug anscheinend in Magento 1.9.3. behoben wurde ("Using a Portable Network Graphics (.png) image on a CMS page no longer results in a HEADERS_ALREADY_SENT message to be logged."). Aber welche Datei ist in Magento CE 1.9.3 anders? Eben die oben genannte

 

\app\code\core\Mage\Adminhtml\controllers\Cms\WysiwygController.php

 

Um versehentliches Überschreiben zu vermeiden, legen wir hierzu eine kleine Extension an, die wir "Headererror" nennen und erweitern mit dieser den Cms-Controller: Zuerst legen wir  die config.xml an:

 

\app\code\local\Econcess\Headererror\etc\config.xml

 

die wir dann z.B. so befüllen:

 

 

<config>

    <admin>

        <routers>

            <adminhtml>

                <args>

                    <modules>

                        <Econcess_Headererror before="Mage_Adminhtml">Econcess_Headererror_Adminhtml</Econcess_Headererror>

                    </modules>

                </args>

            </adminhtml>

        </routers>

    </admin>

</config>

 

Danach fehlt dann noch die Datei

 

\app\code\local\Econcess\Headererror\controllers\Adminhtml\Cms\WysiwygController.php

 

die wir dann z.B. so befüllen (gem. Pendant in Magento CE 1.9.3):

 

 

<?php

require_once 'Mage/Adminhtml/controllers/Cms/WysiwygController.php';

class Econcess_Headererror_Adminhtml_Cms_WysiwygController extends Mage_Adminhtml_Cms_WysiwygController

{

    public function directiveAction()

    {

        $directive = $this->getRequest()->getParam('___directive');

        $directive = Mage::helper('core')->urlDecode($directive);

        $url = Mage::getModel('cms/adminhtml_template_filter')->filter($directive);

        try {

            $image = Varien_Image_Adapter::factory('GD2');

            $image->open($url);

        } catch (Exception $e) {

            $image = Varien_Image_Adapter::factory('GD2');

            $image->open(Mage::getSingleton('cms/wysiwyg_config')->getSkinImagePlaceholderPath());

        }

        ob_start();

        $image->display();

        $this->getResponse()->setBody(ob_get_contents());

        ob_end_clean();

    }

}

 

Danach müssen wir das Modul Magento nur noch bekannt machen unter

 

\app\etc\modules\Econcess_Headererror.xml

 

mit dem Inhalt

 

 

<?xml version="1.0"?>

<config>

    <modules>

        <Econcess_Headererror>

            <active>true</active>

            <codePool>local</codePool>

        </Econcess_Headererror>

    </modules>

</config>

 

Danach kann man den WYSIWYG-Editor im Magento-Backend wieder ohne Probleme und ohne Error-Ausgaben im Logfile nutzen. Getestet in Magento CE 1.9.2.4.