Como consertar: "CABEÇA JÁ ENVIADA" e GD2?


8

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 !?


aqui estão os motivos explicados - stackoverflow.com/questions/8028957/…
T.Todua

Você conseguiu consertar isso? Também vemos
snh_nl 12/11/2015

Respostas:


2

Esse problema será corrigido em algum momento; referência MPERF-7047 .


Ainda é esse o caso, o problema está encerrado e não foi possível encontrar nenhuma correção na versão 1.9.2.4?
Aaron Bonner

11
De acordo com a nota de ontem, esse problema "fechou quando a versão EE 1.14.3.0/CE 1.9.3.0 foi lançada" - e você foi especificamente observado no JIRA, @AaronBonner ;-)
marca o dia

1

lol resolvi meu problema mude isso em:

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

/*
* Name Extension: Megamenu
* Version: 0.1.0

para:

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

-.-


Então, incompetência geral no intérprete php em algum lugar que está sendo usado em seu site que faz com que ele não /*se torne um comentário php, a menos que tenha outro *?
Fiasco Labs

0

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.


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.