Wie zu beheben: "HEADER BEREITS GESENDET" und GD2?


8

Dies ist eine Fortsetzung der Frage zum Debuggen: HEADER ALREADY SENT und GD2 . Insbesondere das Beheben der folgenden Fehler (Hinweis: Die erste Zeile wurde mithilfe vorheriger Debug-Hinweise hinzugefügt, um die Quelle zu verfolgen):

   2014-02-04T14:26:06+00:00 DEBUG (7): Cannot send headers; headers already sent in /home/.../lib/Varien/Image/Adapter/Gd2.php, line 133
   2014-02-05T16:14:32+00:00 DEBUG (7): HEADERS ALREADY SENT: < pre >
    [0] /home/.../app/code/core/Mage/Core/Controller/Response/Http.php:52
    [1] /home/.../lib/Zend/Controller/Response/Abstract.php:766
    [2] /home/.../app/code/core/Mage/Core/Controller/Response/Http.php:83
    [3] /home/.../app/code/core/Mage/Core/Controller/Varien/Front.php:188
    [4] /home/.../app/code/core/Mage/Core/Model/App.php:354
    [5] /home/.../app/Mage.php:683
    [6] /home/.../public_html/index.php:87
    </ pre >

Bei dieser Frage ging es darum, wie dieses Problem behoben werden kann. Diese Frage betrifft die Behebung. Gemäß meiner "Antwort" auf diese Frage und nachdem ich einige weitere Tests für eine Vanilla Magento-Installation durchgeführt habe, kann ich bestätigen, dass dies ein Magento-Kernfehler zu sein scheint (v1.7.0.2).

Das einfache Verwalten von Bildern auf Seiten oder statischen Blöcken mithilfe des standardmäßigen Magento-Seiten- / Blockbildmanagers verursacht diese Protokolle. Öffnen Sie zum Reproduzieren eine Seite mit Bildern. Pro Bild wird auf der Seite eines davon protokolliert. Öffnen Sie den Bildmanager und zeigen Sie hochgeladene Bilder an. Für jedes angezeigte Bild wird ein anderes angezeigt.

Das Problem scheint bei dieser Funktion zu liegen, die beim Lesen mit Sicherheit diesen Fehler verursacht, wenn ein CMS-Bild zur Anzeige im Dashboard abgerufen wird.

public function display()
    {
        header("Content-type: ".$this->getMimeType());
        call_user_func($this->_getCallback('output'), $this->_imageHandler);
    }

Obwohl es keine Auswirkungen auf den Store zu haben scheint, würde ich dies lieber nicht als "harmlosen Fehler" behandeln (da Microsoft gerne Dinge nennt, die sie nicht richtig machen / beheben können!). Ich denke, wir könnten canSendHeader () in lib / Zend / Controller / Response / Abstract.php so ändern, dass kein Fehler ausgegeben wird, wenn $ file gd2.php ist, aber das ist nur ein böser Kludge!

Irgendwann, bevor canSendHeaders als Teil der Anzeige von CMS-Bildern im Dashboard aufgerufen wird, sollte entweder $ throw oder $ this-> headersSentThrowsException auf false gesetzt werden, damit keine Ausnahme generiert wird.

Irgendwelche Ideen? Oder haben Magento-Besitzer gelernt, damit zu leben?


Hier sind die Gründe erklärt - stackoverflow.com/questions/8028957/…
T.Todua

Haben Sie es geschafft, dies zu beheben? Wir sehen es auch
snh_nl

Antworten:


2

Dieses Problem wird irgendwann behoben. Referenz MPERF-7047 .


Ist dies immer noch der Fall, ist das Problem geschlossen und es gibt keine Lösung, die ich in 1.9.2.4 finden kann?
Aaron Bonner

1
Laut dem gestrigen Hinweis wurde diese Ausgabe "geschlossen, als Version EE 1.14.3.0/CE 1.9.3.0 veröffentlicht wurde" - und Sie wurden speziell in JIRA, @AaronBonner, erwähnt ;-)
benmarks

1

lol Ich habe mein Problem gelöst, ändere dies in:

/app/code/local/Cmsmart/Megamenu/Block/Navigation.php

/*
* Name Extension: Megamenu
* Version: 0.1.0

zum:

/**
* Name Extension: Megamenu
* Version: 0.1.0

-.-


Also, allgemeine Inkompetenz im PHP-Interpreter irgendwo, die auf Ihrer Website verwendet wird, die es nicht erkennen lässt, dass es /*sich um einen PHP-Kommentar handelt, es sei denn, er hat einen anderen *?
Fiasco Labs

0

Ich habe das gleiche Problem bei der Installation von Magento. In meinem Fall wurde das Problem durch Aktivieren von output_buffering in PHP behoben. In xampp mit PHP 5.6 ist output_buffering standardmäßig aktiviert. In xampp mit PHP 5.3 ist output_buffering standardmäßig deaktiviert.


0

Als Referenz kann das Problem reproduziert werden, indem einige PNG-Dateien mit dem Administrator-Befehl cms / wysiwyg hochgeladen werden und anschließend eine Liste mit Miniaturansichten angezeigt wird.

Ich habe diese Miniaturansicht gehackt, um die Ausgabepufferung zu verwenden und das Antwortobjekt zum Festlegen des Datenkörpers und zum Korrigieren des Inhaltstyps zu verwenden (es gibt dort einen weiteren Fehler, bei dem der Code die ID des GD-Dateityps anstelle des Mimetyps festlegt).

Der folgende Code ersetzt die gleichnamige Methode in app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php. Verwenden Sie einen beliebigen Mechanismus, um diese Methode zu überschreiben (ich habe eine Überschreibung des lokalen Code-Pool-Controllers verwendet).

/** * Generate image thumbnail on the fly */ public function thumbnailAction() { $file = $this->getRequest()->getParam('file'); $file = Mage::helper('cms/wysiwyg_images')->idDecode($file); $thumb = $this->getStorage()->resizeOnTheFly($file); if ($thumb !== false) { $image = Varien_Image_Adapter::factory('GD2'); $image->open($thumb); ob_start(); $image->display(); $imageData = ob_get_contents(); ob_end_clean(); $mimeType = image_type_to_mime_type($image->getMimeType()); $this->getResponse()->setHeader('Content-Type', $mimeType, true); $this->getResponse()->setBody($imageData); } else { // todo: genearte some placeholder } }

Ich werde auch hier einen Überblick behalten - https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.