ProfiPHPProfiPHP
  1. Главная
  2. Полезное в PHP
  3. Исправляем ошибку "Cannot modify header information - headers already sent by"

Исправляем ошибку "Cannot modify header information - headers already sent by"

Если вам не интересна причина и необходимо очень быстро устранить ошибку "Cannot modify header information - headers already sent by" - измените значение директивы Output_buffering на On или, например, 4096, и ошибка сразу исчезнет. Данная директива PHP позволяет сперва наполняет буфер данными до определенного размера, и лишь потом отдает содержимое буфера клиенту. Но превысив размер буфера вы увидите выше описываемую ошибку.

После того, как сервер отправил браузеру содержимое страницы, ее заголовки, соответственно, уже не могут быть изменены или модифицированы. Поэтому, если вы увидели данную ошибку, необходимо проверить, какие данные были уже отправлены сервером клиенту перед функцией или конструкцией, номер строки которой указан в самой ошибке:
Warning: Cannot modify header information - headers already sent by (output started at test.php:1) in test.php on line 10
Общение WEB сервера с клиентом происходит по протоколу HTTP. HTTP включает в себя HTTP заголовки и тело ответа. При этом заголовки обязательно следуют перед телом ответа - того требует стандарт.

Интерпретатор PHP в процессе работы должен сформировать и заголовки и тело ответа. Даже если вы не задаете ни одного заголовка, то PHP сам устанавливает все необходимые заголовки для ответа клиенту. При этом данные, которые необходимо отдать клиенту он записывает сначала в буфер, но если он начал писать в буфер тело ответа, то заголовки он уже никак не может туда записать и встретив попытку записи заголовков ответа уже после того, как начало формироваться тело ответа, PHP выдает выше описанную ошибку.

Чтобы исправить данную ошибку необходимо выполнить следующие условия:

- Проверьте, не существует ли пробелов или переноса строки перед <?php, которые тоже будут восприняты как тело ответа.

- Файлы, которые содержат PHP код должны быть сохранены без BOM.

- Если Вы подключаете файлы через Include или Require, то файлы к которым обращаются эти функции также могут содержать одну из вышеперечисленных проблем.

- Если настроен вывод ошибок в браузер, то Warning тоже будет телом ответа.

И для наглядности приведем неправильный пример:
<?php
echo "Hello, World!";
header("Content-Type: text/html; charset=utf-8");
?>
И правильный:
<?php
header("Content-Type: text/html; charset=utf-8");
echo "Hello, World!";
?>

Добавить комментарий

Имя:
Текст комментария: