¿Cómo solucionarlo: "ENCABEZADO YA ENVIADO" y GD2?

8

Esta es una continuación de la pregunta sobre Cómo depurar: HEADER YA ENVIADO y GD2 . Específicamente cómo solucionar los siguientes errores (tenga en cuenta que la primera línea se ha agregado utilizando consejos de depuración anteriores para rastrear la fuente):

   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 >

Esa pregunta fue sobre cómo depurar este problema. Esta pregunta es sobre cómo solucionarlo. Según mi "respuesta" a esa pregunta, y después de haber realizado algunas pruebas adicionales en una instalación de Magento de vainilla, puedo confirmar que esto parece ser un error del núcleo de Magento (v1.7.0.2).

Simplemente administrar imágenes en páginas o bloques estáticos, usando el administrador de imágenes de página / bloque estándar de Magento provoca estos registros. Para reproducir, abra una página que tenga imágenes. Habrá uno de estos registrados por imagen en la página. Abra el administrador de imágenes y vea las imágenes cargadas; habrá otra para cada imagen mostrada.

El problema parece ser con esta función, que en mi lectura seguramente causará este error cada vez que se busca una imagen CMS para mostrarla en el tablero.

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

Si bien no parece tener ningún impacto en la tienda, prefiero no tratar esto como un "error benigno" (¡ya que a Microsoft le gusta llamar a cosas que no pueden corregir / corregir!). Supongo que podríamos modificar canSendHeader () en lib / Zend / Controller / Response / Abstract.php para no arrojar un error si $ file es gd2.php, ¡pero eso es solo un desagradable error!

Lo que parece es en algún momento antes de que se llame a canSendHeaders como parte de la visualización de imágenes CMS en el tablero, ya sea $ throw o $ this-> headersSentThrowsException debe establecerse como falso para que esto no genere una excepción.

¿Algunas ideas? ¿O esto es algo con lo que los propietarios de Magento han aprendido a vivir?

Adam Lavery
fuente
Estas
¿Lograste arreglar esto? También lo vemos
snh_nl

Respuestas:

2

Este problema se solucionará en algún momento; referencia MPERF-7047 .

puntos de referencia
fuente
¿Sigue siendo así, el problema está cerrado y no hay solución que pueda encontrar en 1.9.2.4?
Aaron Bonner
1
De acuerdo con la nota de ayer, este problema "se cerró cuando se lanzó la versión EE 1.14.3.0/CE 1.9.3.0", y se lo notó específicamente en JIRA, @AaronBonner ;-)
señala el
1

lol resolví mi problema, cambia esto en:

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

/*
* Name Extension: Megamenu
* Version: 0.1.0

para:

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

-.-

usuario36831
fuente
Entonces, ¿la incompetencia general en el intérprete de php en algún lugar que se usa en su sitio web hace que no se dé cuenta de /*que es un comentario de php a menos que tenga otro *?
Fiasco Labs
0

Tengo el mismo problema al instalar Magento. En mi caso, habilitar output_buffering en PHP resolvió el problema. En xampp con PHP 5.6 output_buffering está habilitado por defecto. En xampp con PHP 5.3, output_buffering está deshabilitado por defecto.

therochworks
fuente
0

Como referencia, el problema se puede reproducir cargando algunos archivos png utilizando el editor admin cms / wysiwyg y luego viendo una lista de miniaturas.

He pirateado esa acción en miniatura para usar el búfer de salida y usar el objeto de respuesta para establecer el cuerpo de datos y corregir Content-Type (hay otro error allí donde el código establece la identificación del tipo de archivo gd en lugar del tipo mime).

El siguiente código reemplaza el método del mismo nombre en app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php. Use el mecanismo que prefiera para anular este método (usé una anulación del controlador de grupo de código 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 } }

También mantendré una esencia, aquí: https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595

Aaron Bonner
fuente