Это продолжение вопроса о том, как отлаживать: заголовок уже отправлен и GD2 . В частности, как исправить следующие ошибки (обратите внимание, первая строка была добавлена с использованием предыдущего совета по отладке для отслеживания источника):
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 >
Этот вопрос был о том, как отладить эту проблему. Этот вопрос о том, как это исправить. В соответствии с моим «ответом» на этот вопрос и проведением некоторых дополнительных тестов на ванильной установке Magento, я могу подтвердить, что это, похоже, ошибка ядра Magento (v1.7.0.2).
Простое управление изображениями на страницах или статических блоках с использованием стандартного менеджера изображений страниц / блоков Magento вызывает эти журналы. Чтобы воспроизвести, откройте страницу с изображениями. Там будет один из них вошли в систему для каждого изображения на странице. Откройте диспетчер изображений и просмотрите загруженные изображения - для каждого отображаемого изображения будет другое.
Проблема, похоже, связана с этой функцией, которая при моем чтении наверняка вызовет эту ошибку каждый раз, когда образ CMS выбирается для отображения на приборной панели.
public function display()
{
header("Content-type: ".$this->getMimeType());
call_user_func($this->_getCallback('output'), $this->_imageHandler);
}
Хотя это не оказывает никакого влияния на магазин, я бы не стал воспринимать это как «доброкачественную ошибку» (поскольку Microsoft любит называть вещи, которые они не могут исправить / исправить!). Я думаю, что мы могли бы просто изменить canSendHeader () в lib / Zend / Controller / Response / Abstract.php, чтобы не выдавать ошибку, если $ file это gd2.php, но это просто неприятный ключ!
То, на что это похоже, находится в некоторый момент перед тем, как canSendHeaders вызывается как часть отображения изображений CMS на приборной панели, либо $ throw или $ this-> headersSentThrowsException должны быть установлены в false, чтобы это не создавало исключение.
Любые идеи? Или это то, чему владельцы Magento научились жить !?
Ответы:
Эта проблема будет исправлена в какой-то момент; ссылка MPERF-7047 .
источник
LOL Я решил мою проблему изменить это в:
за:
-.-
источник
/*
что это комментарий php, если у него нет другого*
?У меня такая же проблема при установке Magento. В моем случае включение output_buffering в PHP решило проблему. В xampp с PHP 5.6 output_buffering включен по умолчанию. В xampp с PHP 5.3 output_buffering по умолчанию отключен.
источник
Для справки проблему можно воспроизвести, загрузив некоторые файлы png с помощью редактора admin cms / wysiwyg, а затем просмотрев список миниатюр.
Я взломал это миниатюрное действие, чтобы использовать буферизацию вывода и использовать объект ответа, чтобы установить тело данных и исправить Content-Type (есть еще одна ошибка, когда код устанавливает идентификатор типа файла gd, а не mimetype).
Код ниже заменяет метод с тем же именем в
app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php
. Используйте любой механизм, который вы предпочитаете переопределять этот метод (я использовал переопределение контроллера пула локального кода)./** * 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 } }
Я также буду поддерживать суть здесь - https://gist.github.com/ajbonner/94c8e61705bb7aa3e6feca4461d85595
источник