Перенаправление php header заголовки ошибка header alredy send

Заголовки (или headers) используются в PHP для сообщения браузеру посетителя дополнительной информации (о содержании страницы, о дате изменений, о коде ошибок и состояний).
Часто заголовки используются для перенаправления со страницы которая перестала существовать, либо в случае, когда это происходит как результат выполнения алгоритма, логики Вашего скрипта:
<?
/*перенаправляем всех на главную и больше ничего */
header("Location:http://weblomaster.ru");
?>

или:
<?
/* приветствуем  посетителя если значение параметра ID из адресной строки больше нуля, иначе перенаправляем на главную  */
if(intval($_GET['id'])>0)
{
echo "Приветствую!";
}
esle
{
header("HTTP/1.0 404 Not Found");
header("Location:http://weblomaster.ru");
}
?>

Если Вы заботитесь о правильном взаимодействии Вашего сайта с поисковыми системами, не забудьте передать клиенту (будь то браузер посетителя или поисковый бот) код ошибки, например:
header("HTTP/1.0 404 Not Found"); /* страница не найдена, ошибка 404 */
header("HTTP/1.0 307 temporary redirect"); /* документ временно перемещен, ошибка 307 */
header("HTTP/1.0 301 moved permanently"); /* документ перемещен навсегда, ошибка 301 */

Теперь о возможных затруднениях имеющих отображения в логах сервера. Если Вы видите сообщение об ошибке:
HEADER ALREDY SEND
переводится как «заголовок уже отправлен» это означает неправильное расположение заголовков (headers) в php скрипте.
Правильно указывать заголовки в самом верху файла (на то он и заголовок). Плохой пример:
<?
echo "Сейчас я Вас перенаправлю!";
header("Location:http://weblomaster.ru");
?>

Если Вы хотите избавиться от ошибки, но не хотите править весь скрипт, Вы можете в самом верху включить буферизацию вывода:
ob_start();
Использовать эту функцию не всегда безопасно. Если же Вы всё таки применили буферизацию, не забудьте очистить буфер в конце скрипта с помощью:
ob_end_flush();
В результате получится:
<?
ob_start();
echo "Сейчас я Вас перенаправлю!";
header("Location:http://weblomaster.ru");
ob_end_flush();
?>

Опубликовано 22.01.2014 в 16:35 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: PHP программирование · Теги: , , , , , , , , , , , ,