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?
Respuestas:
Este problema se solucionará en algún momento; referencia MPERF-7047 .
fuente
lol resolví mi problema, cambia esto en:
para:
-.-
fuente
/*
que es un comentario de php a menos que tenga otro*
?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.
fuente
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
fuente