Magento Debug Заголовки уже отправили ошибку - PullRequest
13 голосов
/ 12 января 2011

Я получаю следующую ошибку в моем файле system.log:

 2011-01-12T14:16:52+00:00 DEBUG (7): HEADERS ALREADY SENT: 
 [0] C:\xampp\htdocs\www.mysite.com\app\code\core\Mage\Core\Controller\Response\Http.php:44
 [1] C:\xampp\htdocs\www.mysite.com\lib\Zend\Controller\Response\Abstract.php:727
 [2] C:\xampp\htdocs\www.mysite.com\app\code\core\Mage\Core\Controller\Response\Http.php:75
 [3] C:\xampp\htdocs\www.mysite.com\app\code\core\Mage\Core\Controller\Varien\Front.php:188
 [4] C:\xampp\htdocs\www.mysite.com\app\code\core\Mage\Core\Model\App.php:304
 [5] C:\xampp\htdocs\www.mysite.com\app\Mage.php:596
 [6] C:\xampp\htdocs\www.mysite.com\index.php:81

Я знаю, что означает "заголовки уже отправлены", но я понятия не имею, какой файл вызывает это, и трассировка на самом деле не дает мне никакой информации.

Есть ли способ выяснить файл-нарушитель?

Спасибо!

Ответы [ 11 ]

16 голосов
/ 12 января 2011

Вот более простой способ.

Посмотрите на метод canSendHeaders в файле

lib/Zend/Controller/Response/Abstract.php

Добавить запись в

public function canSendHeaders($throw = false)
{
    $ok = headers_sent($file, $line);
    // to get PHP's report on which file is sending a header.
    if ($ok !== false){
        Mage::log('File: ' . $file, null, 'exception.log', true);
        Mage::log('Line: ' . $line, null, 'exception.log', true);
    }

    if ($ok && $throw && $this->headersSentThrowsException) {
        #require_once 'Zend/Controller/Response/Exception.php';
        throw new Zend_Controller_Response_Exception('Cannot send headers; headers already sent in ' . $file . ', line ' . $line);
    }

    return !$ok;
}
16 голосов
/ 12 января 2011

Вот трудный путь.

Найдите местоположение в файле, в котором ведется ведение журнала

C:\xampp\htdocs\www.mysite.com\app\code\core\Mage\Core\Controller\Response\Http.php 
Mage::log('HEADERS ALREADY SENT: '.mageDebugBacktrace(true, true, true));

Добавьте ведение журнала, чтобы получить копию каждого включенного / необходимого файла

Mage::log(print_r(get_included_files(),true));

Вы можете добавить эту запись непосредственно в основной файл, если вы не забыли восстановить файл до его предварительного состояния или вы можете добавить временную копию на

app/code/local/Mage/Core/Controller/Response/Http.php

до тех пор, покавы не забудьте удалить его, когда закончите (или просто используйте git).

Проверьте этот список файлов на наличие обычных подозрительных пробелов, а затем проверьте их на наличие функций, которые могут выдавать выходные данные (echo, print, readfile, возможно, есть еще)

9 голосов
/ 07 марта 2014

Эта ошибка выдается из Mage_Core_Controller_Response_Http -> sendHeaders ().Эта функция вызывает функцию суперкласса, которая фактически проверяет, отправлены ли уже заголовки, Zend_Controller_Response_Abstract -> canSendHeaders ().

Класс Zend_Controller_Response_Abstract обрабатывает, среди прочего, отправку заголовков ответов и отслеживаниепоследний раз заголовки были отправлены (и из какого файла и строки).Вот как выглядит эта функция, и где мы внесем изменения в строке 316 в lib \ Zend \ Controller \ Response \ Abstract.php:

public function canSendHeaders($throw = false) {
    $ok = headers_sent($file, $line);
    if ($ok && $throw && $this->headersSentThrowsException) {
        #require_once 'Zend/Controller/Response/Exception.php';
        throw new Zend_Controller_Response_Exception('Cannot send headers; headers already sent in ' . $file . ', line ' . $line);
    }
    return !$ok;
}

To:

public function canSendHeaders($throw = false)
{
    $ok = headers_sent($file, $line);

    if ($ok) {
        Mage::log('Cannot send headers; headers already sent in ' . $file . ', line ' . $line, null, 'headers.log');
    }

    return !$ok;

    #if ($ok && $throw && $this->headersSentThrowsException) {
    #    #require_once 'Zend/Controller/Response/Exception.php';
    #    throw new Zend_Controller_Response_Exception('Cannot send headers; headers already sent in ' . $file . ', line ' . $line);
    #}
    #return !$ok;
}

Это будет регистрировать ошибку в /var/log/header.log.

8 голосов
/ 16 июля 2013

Самое распространенное место, с которым вы сталкиваетесь в Magento, - это когда вы выводите контент прямо из контроллера.

Вместо того, чтобы делать

echo $string; 

внутри контроллера, сделайте это:

$this->getResponse()->setBody($string);
5 голосов
/ 12 января 2011

Я тоже это вижу.Я думаю, что это как-то связано с изображениями в WYSIWYG.Попробуйте просмотреть журналы, проходя через администратора (особенно страницы CMS), и вы можете увидеть, как это происходит.Это безвредно.

3 голосов
/ 06 апреля 2013

Может быть, это будет кому-то полезно: Похожее сообщение появляется при включении WYSIWYG в Magento при редактировании страниц в CMS -> Pages (по умолчанию WYSIWYG отключен, поэтому для его включения необходимо нажать «Показать / Скрыть редактор»). Если страница содержит теги CMS, такие как, например:

{{store url='my-other-page'}}

это сообщение появляется в system.log после того, как я нажимаю «Показать / Скрыть редактор»:

<code>2013-04-06T11:10:38+00:00 DEBUG (7): HEADERS ALREADY SENT: <pre>[0] ...\app\code\core\Mage\Core\Controller\Response\Http.php:52
[1] ...\lib\Zend\Controller\Response\Abstract.php:766
[2] ...\app\code\core\Mage\Core\Controller\Response\Http.php:83
[3] ...\app\code\core\Mage\Core\Controller\Varien\Front.php:188
[4] ...\app\code\core\Mage\Core\Model\App.php:354
[5] ...\app\Mage.php:683
[6] ...\index.php:87
0 голосов
/ 16 февраля 2018

В нашем случае это была ошибка в Magento CE 1.9.2.4, которая была исправлена ​​в Magento CE 1.9.3, возникала при использовании WYSIWYG с изображениями. Мы только что сделали небольшое расширение, которое переписывает функцию directiveAction () в \ app \ code \ core \ Mage \ Adminhtml \ controllers \ Cms \ WysiwygController.php. Для получения дополнительной информации см. (На немецком языке) здесь .

0 голосов
/ 21 июня 2016

У меня такая же проблема при установке Magento.

В моем случае включение output_buffering в PHP решило проблему.

В xampp с PHP 5.6 output_buffering включен по умолчанию.

В xampp с PHP 5.3 output_buffering по умолчанию отключен.

0 голосов
/ 22 февраля 2014

Та же проблема при выполнении Ajax Call

Я получал журнал, когда выполнял Ajax Call и вызывал шаблон непосредственно из контроллера.

Когда я изменилкод и созданный блок в макете XML-файла.ошибка в журнале исправлена.

0 голосов
/ 29 апреля 2012

Я думаю, что это может быть OnePageCheckout проблема расширения.У меня та же ошибка в Magento, и кажется, что эта ошибка не так популярна.Также у меня установлено OnePageCheckout.Но, конечно, это может быть просто совпадением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...