Как исправить: «ГОЛОВКА УЖЕ отправлена» и GD2?

8

Это продолжение вопроса о том, как отлаживать: заголовок уже отправлен и 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 научились жить !?

Адам Лавери
источник
Вот причины, которые объяснены - stackoverflow.com/questions/8028957/…
T.Todua
Вам удалось это исправить? Мы видим это также
snh_nl

Ответы:

2

Эта проблема будет исправлена ​​в какой-то момент; ссылка MPERF-7047 .

benmarks
источник
Это все еще так, проблема закрыта и я не могу найти исправления в 1.9.2.4?
Аарон Боннер
1
Согласно вчерашнему примечанию, эта проблема «закрыта, когда выпущена версия EE 1.14.3.0/CE 1.9.3.0» - и вы были специально отмечены в JIRA, @AaronBonner ;-)
отметки
1

LOL Я решил мою проблему изменить это в:

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

/*
* Name Extension: Megamenu
* Version: 0.1.0

за:

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

-.-

user36831
источник
Итак, общая некомпетентность в интерпретаторе php, который используется на вашем веб-сайте, из-за которого он не понимает, /*что это комментарий php, если у него нет другого *?
Fiasco Labs
0

У меня такая же проблема при установке Magento. В моем случае включение output_buffering в PHP решило проблему. В xampp с PHP 5.6 output_buffering включен по умолчанию. В xampp с PHP 5.3 output_buffering по умолчанию отключен.

therochworks
источник
0

Для справки проблему можно воспроизвести, загрузив некоторые файлы 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

Аарон Боннер
источник