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

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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Это предупреждение не имеет ничего общего с длиной содержимого.

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

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