PHP- "заголовки уже отправлены" ошибка в зависимости от длины вывода?

У меня есть скрипт, который выводит данные ячейки MySQL. Ячейка "content" содержит текстовый вывод различной длины.

Когда содержимое ячейки "content" маленькое (скажем, несколько строк текста), все работает нормально. Однако, когда вывод достигает нескольких абзацев или больше, я получаю ошибку "заголовки уже отправлены".

Зависит ли это от длины выхода? Где я могу прочитать больше об этом? Ответы, которые я нашел на SO, не упоминают ничего о такой зависимости длины вывода.

 44:   echo "
 45:       <p>".$article['content']."</p>
 46:   ";

Если размер вывода "content" велик, скрипт выдаст следующую ошибку:

Предупреждение PHP: невозможно изменить информацию заголовка - заголовки, уже отправленные (вывод начался с /home/mantas/htdocs/asm/article.php:46) в /home/mantas/htdocs/asm/include/comments_class.php в строке 56

3 ответа

Решение

PHP будет буферизовать вывод, если вы этого хотите. Вы можете управлять этим программно с ob_start()и т. д. Однако в php.ini есть еще одна опция для настройки буферизации вывода.

настройка output_buffering=on включается при настройке output_buffering=4096 установит ограничение на размер буфера. phpinfo() должен сказать вам, если это включено, и каков размер буфера.

Ссылка на PHP здесь

Предупреждение "заголовки уже отправлены" означает, что заголовки http изменяются где-то в вашем коде после отправки вывода клиенту (т.е. с echo, пробелы и т.д..).

Это предупреждение само по себе не имеет отношения к длине контента.

Есть еще методы, которые изменяют заголовки:

  • header / header_remove
  • session_start / session_regenerate_id
  • setcookie / setrawcookie

Я также столкнулся с проблемами «заголовки, уже отправленные ...», используя PHP xmlWriter.

Я вставил инструкции «заголовка» для управления типом вывода страницы в конце скрипта:

Я решил это, переместив инструкции в начало скрипта, в таком порядке:

      // init header earlier on script
header('Content-Type: text/xml; charset=utf-8');
header('Cache-Control: max-age=0');
header('Content-Disposition: inline');

// new xmlwriter object
$xml = new XMLWriter();

// set direct output stream
$xml->openURI('php://output');

// some code here for creating the xml output
// ....
// ....

// render xml to output
$xml->flush();
Другие вопросы по тегам