Часто в процессе разработки сайта бывает необходимо сделать 
редирект на какаю-нибудь страницу. Это потребность может возникать как 
перед выводом html кода на страницу, так и в середине страницы и в 
конце.
Для редиректа в php используется функция header — эта функция создает 
заголовок для страницы. И чтобы сделать переход на другую страницу в 
заголовке указывается следующее «Location: http://site.com», а все 
вместе получается вот так:
Это хорошо работает пока находится до того, как в html уже были 
созданы заголовки. В случае, когда вы попробуете выполнить  данный код, 
после вывода на страницу тегов  вы будите не приятно удивлены увидев 
следующий текст предупреждения от php:
Warning: Cannot modify header information — headers already sent by
Помимо предупреждения еще и не сработает редирект. Почему? Все очень 
просто, вы пытаетесь создать заголовок после того, как его ужа задали, 
только с помощью html тегов .
Эту проблему можно решить, для этого необходимо использовать 
буферизацию. Для этого пригодятся функции ob_start() и ob_end_flush(). 
При включенной буферизации все ни чего не выводится, все будет писаться в
 буфер, вывод осуществится после выключения буферизации. Функция 
ob_start — включает буферизацию, значит ее нужно вызвать перед тегами . А
 в конце страницы необходимо вызвать функцию ob_end_flush() она выключит
 буферизацию и сделает вывод всего, что хранится в буфере.
Как я уже говорил при буферизации ни чего не выводится, кроме того, что 
задано с помощью функции header, таким образом, можно без проблем делать
 редирект, вызвав header(«Location: http://site.com»); в любом месте 
страницы.
Для наглядности приведу пример кода:
| <?php ob_start(); ?><!DOCTYPE HTML><html>    <head>        <title>SITE NAME</title>        <meta charset="utf-8"/>    </head><body>    <h1>TITLE</h1></body></html><?php ob_end_flush(); ?> | 
 
Комментариев нет:
Отправить комментарий