Come risolvere: “HEADER GIA 'INVIATO” e GD2?


8

Questo è un seguito alla domanda su come eseguire il debug: HEADER GIA 'INVIATO e GD2 . In particolare, come correggere i seguenti errori (notare che la prima riga era stata aggiunta usando i precedenti consigli di debug per tracciare l'origine):

   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 >

Quella domanda era su come eseguire il debug di questo problema. Questa domanda è su come risolverlo. Secondo la mia "risposta" su quella domanda, e dopo aver fatto ulteriori test su un'installazione Magento vaniglia, posso confermare che questo sembra essere un bug di base Magento (v1.7.0.2).

La semplice gestione delle immagini su pagine o blocchi statici, utilizzando il gestore di immagini / blocchi di pagina Magento standard causa questi registri. Per riprodurre, apri una pagina che contiene immagini. Ci sarà uno di questi registrati per immagine sulla pagina. Apri il gestore delle immagini e visualizza le immagini caricate: ce ne sarà un'altra per ogni immagine visualizzata.

Il problema sembra essere con questa funzione, che sulla mia lettura causerà sicuramente questo errore ogni volta che un'immagine CMS viene recuperata per la visualizzazione nella dashboard.

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

Anche se non sembra avere alcun impatto sul negozio, preferirei non trattarlo come un "errore benigno" (dato che a Microsoft piace chiamare cose che non possono avere ragione / correzione!). Immagino che potremmo semplicemente modificare canSendHeader () in lib / Zend / Controller / Response / Abstract.php per non generare un errore se $ file è gd2.php, ma è solo un brutto kludge!

A un certo punto sembra che prima che canSendHeaders venga chiamato come parte della visualizzazione delle immagini CMS nella dashboard, $ throw o $ this-> headersSentThrowsException devono essere impostati su false in modo da non generare un'eccezione.

Qualche idea? O questo è qualcosa con cui i proprietari di Magento hanno imparato a convivere !?



Sei riuscito a risolvere questo problema? Lo vediamo anche
snh_nl

Risposte:


2

Questo problema verrà corretto ad un certo punto; riferimento MPERF-7047 .


È ancora così, il problema è chiuso e nessuna soluzione che posso trovare in 1.9.2.4?
Aaron Bonner,

1
Secondo la nota di ieri, questo problema "si è chiuso quando è stata rilasciata la versione EE 1.14.3.0/CE 1.9.3.0" - ed è stato specificamente notato in JIRA, @AaronBonner ;-)
benmarks

1

lol Ho risolto il mio problema cambiando questo in:

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

/*
* Name Extension: Megamenu
* Version: 0.1.0

per:

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

-.-


Quindi, l'incompetenza generale nell'interprete php da qualche parte che viene utilizzata sul tuo sito Web che non si rende conto /*di essere un commento php a meno che non ne abbia un altro *?
Fiasco Labs,

0

Ho lo stesso problema durante l'installazione di Magento. Nel mio caso abilitare output_buffering in PHP ha risolto il problema. In xampp con PHP 5.6 output_buffering è abilitato di default. In xampp con PHP 5.3 output_buffering è disabilitato di default.


0

Per riferimento, il problema può essere riprodotto caricando alcuni file png usando l'editor admin cms / wysiwyg e vedendo un elenco di miniature.

Ho hackerato quell'azione di anteprima per usare il buffering dell'output e usare l'oggetto response per impostare il corpo dei dati e correggere il Content-Type (c'è un altro bug in cui il codice sta impostando l'id del tipo di file gd anziché il tipo di mimetype).

Il codice seguente sostituisce il metodo con lo stesso nome in app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php. Utilizzare qualunque meccanismo preferiate sovrascrivere questo metodo (ho usato una sostituzione del controller del pool di codici locale).

/** * 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 } }

Manterrò anche un sorso, qui - https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.