Esta é uma continuação da pergunta Como depurar: HEADER JÁ ENVIADO e GD2 . Especificamente como corrigir os seguintes erros (observe que a primeira linha foi adicionada usando o conselho de depuração anterior para rastrear a fonte):
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 >
Essa pergunta era sobre como depurar esse problema. Esta questão é sobre como corrigi-lo. De acordo com a minha "resposta" nessa pergunta, e tendo feito alguns testes adicionais em uma instalação do Magento com baunilha, posso confirmar que isso parece ser um bug do Magento (v1.7.0.2).
Simplesmente gerenciando imagens em páginas ou blocos estáticos, o uso do gerenciador de imagens de página / bloco padrão do Magento causa esses logs. Para reproduzir, abra uma página que contenha imagens. Haverá um deles registrado por imagem na página. Abra o gerenciador de imagens e visualize as imagens carregadas - haverá outra para cada imagem exibida.
O problema parece estar com essa função, que na minha leitura certamente causará esse erro sempre que uma imagem do CMS for buscada para exibição no painel.
public function display()
{
header("Content-type: ".$this->getMimeType());
call_user_func($this->_getCallback('output'), $this->_imageHandler);
}
Embora não pareça ter nenhum impacto na loja, prefiro não tratar isso como um "erro benigno" (como a Microsoft gosta de chamar coisas que não podem ser corrigidas / corrigidas!). Eu acho que poderíamos modificar o canSendHeader () em lib / Zend / Controller / Response / Abstract.php para não gerar um erro se $ file for gd2.php, mas isso é apenas um desagradável clamor!
Em algum momento, parece que o canSendHeaders é chamado como parte da exibição de imagens CMS no painel, $ throw ou $ this-> headersSentThrowsException devem ser configurados como false, para que isso não gere uma exceção.
Alguma ideia? Ou isso é algo que os proprietários do Magento aprenderam a conviver !?
Respostas:
Esse problema será corrigido em algum momento; referência MPERF-7047 .
fonte
lol resolvi meu problema mude isso em:
para:
-.-
fonte
/*
se torne um comentário php, a menos que tenha outro*
?Eu tenho o mesmo problema ao instalar o Magento. No meu caso, ativar o output_buffering no PHP resolveu o problema. No xampp com PHP 5.6, output_buffering é ativado por padrão. No xampp com PHP 5.3, o output_buffering é desativado por padrão.
fonte
Para referência, o problema pode ser reproduzido carregando alguns arquivos png usando o editor admin cms / wysiwyg e vendo uma lista de miniaturas.
Eu hackeei essa ação em miniatura para usar o buffer de saída e usar o objeto de resposta para definir o corpo dos dados e corrigir o Tipo de Conteúdo (há outro bug lá em que o código está definindo o ID do tipo de arquivo gd em vez do tipo MIME).
O código abaixo substitui o método com o mesmo nome em
app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php
. Use o mecanismo que você preferir substituir esse método (usei uma substituição de controlador de conjunto de códigos local)./** * 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 } }
Vou manter uma essência também, aqui - https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595
fonte