Header cannot modify header information headers already sent - РЕШЕНИЕ.


Частая ошибка при работе с заголовками на PHP - это:

header cannot modify header information headers already sent...

Связана она с тем, что вы записываете заголовки страницы ПОСЛЕ ТОГО как уже вывели на экран какую-то информацию.

Это может быть любая информация, даже обычный пробел.

Возникает ошибка чаще всего при записи COOKIES

setcookie('foo', 'temp');

или например при 301 редиректе:

header('Location: http://www.lavrik-v.ru/');
exit();

В результате получаете ошибку:

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

  • Найдите приблизительное место где вы подозреваете имеется нежелательный вывод информации (например методом исключения)
  • обрамите это место функциями:
ob_start();
/*
* Код который подозревается
* в выводе информации на экран
*/
ob_end_clean();

Функция ob_start(); - запрещает вывод информации на экран, складывая её в буфер.

ob_end_clean(); - отчищает буфер и разрешает вывод на экран.

Возможны вы сталкивались с этой проблемой при работе с Yii Framework.

Дело в том, что в некоторых случаях Yii выводит пробел на экран во всех методах семейства find() (findByPk(), findAll() и пр.)

Советую в этом случае делать так:

ob_start(); // Запрещаем вывод информации на экран

MyModel::model()->findAll();

ob_end_clean(); // Разшаем вывод

Это конечно не супер решение, но оно имеет право на существование.

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика