【问题标题】:Magento Headers already sentMagento 标头已发送
【发布时间】:2011-03-04 09:31:17
【问题描述】:

我对已使用 Magento 发送的标头有此问题。我收到此错误:

HEADERS ALREADY SENT: 
[0] /var/www/etam/trunk/src/app/code/core/Mage/Core/Controller/Response/Http.php:44
[1] /var/www/etam/trunk/src/lib/Zend/Controller/Response/Abstract.php:727
[2] /var/www/etam/trunk/src/app/code/core/Mage/Core/Controller/Response/Http.php:75
[3] /var/www/etam/trunk/src/app/code/core/Mage/Core/Controller/Varien/Front.php:188
[4] /var/www/etam/trunk/src/app/code/core/Mage/Core/Model/App.php:304
[5] /var/www/etam/trunk/src/app/Mage.php:596
[6] /var/www/etam/trunk/src/index.php:139

我看到了this 话题,但对我帮助不大。

我发现只有在通过管理面板导航并使用所见即所得编辑器编辑页面时才会收到此日志。当在此类编辑的内容中有 .jpg 图像时,我会收到此标头已发送错误。

据我发现,它并非适用于所有图像,而是适用于其中一些图像。例如,当只有 1 张图像时没有错误。当有 3 个时,只有一个我得到这个错误。

我找不到任何空格或不需要的echoprint。我坚持这一点,我不知道要搜索什么。也许你能给我一些建议?我知道它是无害的,但我们仍然不想在 system.log 中出现任何错误。

【问题讨论】:

  • 不知道你有没有和我一样的问题,但是我用图片的路径解决了,而不是用 {{media url="/something.jpg"} }

标签: magento


【解决方案1】:

有时我们会在 system.log 中看到“标头已发送...”...为防止这种情况发生,我们应该使用其中一种方法在控制器中返回数据

干净的方式:

$this->getResponse()->setBody($response);

或肮脏的方式:

echo $response;

exit();

在某些情况下“干净的方式”不起作用,所以我们必须使用“肮脏的方式”。

如果您通过 Ajax 获取内容,请使用此选项,就像在 CMS 中完成的那样;)

【讨论】:

  • 我知道这个 Response 对象,但我没想到只使用exit()。好吧,每天都在学习新东西:)谢谢伙计。
  • 脏方法是我输出 TCPDF 时唯一可行的方法。
【解决方案2】:

奇怪的是,我今天早上才创建这篇文章,因为我在调试 Magento 时遇到了一个非常相似的问题。

http://codemagento.com/2011/03/debugging-headers-already-sent-error/

【讨论】:

  • 感谢您的重播,但我已经找到了发送标头的行,这对我来说没有多大意义。因为在 Varien_Image_Adapter_Gd2 第 115 行是call_user_func($this->_getCallback('output'), $this->_imageHandler);imagejpeg 在那里被调用,假设将 .jpg 图像发送到浏览器。奇怪的是它只为一些图片抛出标题,而不是在所见即所得编辑器中。不管怎样,谢谢你的回答。
  • @Ventus 我们看到了同样的情况——我认为这与文件名中的空格有关
【解决方案3】:

或者,我们可以像 Magento 1.9.3 一样覆盖 \app\code\core\Mage\Adminhtml\controllers\Cms\WysiwygController.php。在我们的例子中,这改变了函数directiveAction()的这一部分

        try {
        $image = Varien_Image_Adapter::factory('GD2');
        $image->open($url);
        $image->display();
    } catch (Exception $e) {
        $image = Varien_Image_Adapter::factory('GD2');
        $image->open(Mage::getSingleton('cms/wysiwyg_config')->getSkinImagePlaceholderPath());
        $image->display();

        try {
        $image = Varien_Image_Adapter::factory('GD2');
        $image->open($url);
    } catch (Exception $e) {
        $image = Varien_Image_Adapter::factory('GD2');
        $image->open(Mage::getSingleton('cms/wysiwyg_config')->getSkinImagePlaceholderPath());
    }
    ob_start();
    $image->display();
    $this->getResponse()->setBody(ob_get_contents());
    ob_end_clean();

更多信息(德文),对here。通过 Magento CE 1.9.2.4 验证。

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多