Переадресация в PHP

Задание:  

         Обычно перемещение по страницам сайта происходит через гиперссылки - всевозможные кнопки, по которым можно кликнуть. Но иногда возникает необходимость переместить пользователя на другую страницу автоматически, грубо говоря, без его "участия". Причиной может быть переезд сайта на другой домен, удаление некогда существовавшей страницы или же попросту логика самого скрипта. Итак, сегодня разбираем переадресацию.

 

 

Подробная инструкция:

 

  • Перенаправить пользователя с одной страницы на другую поможет функция header(), отвечающая за отправку http-заголовков. Пользоваться ей достаточно просто, достаточно передать ей строку нужного заголовка. Для реализации нашей задачи подходит заголовок расположения - Locationheader('Location: /index.php')
  • Для переадресации можно устанавливать таймер. К примеру, в php-скрипте этот код перенаправит вас по указанному адресу через 3 секунды: header('Refresh:3; url=https://www.php.net/manual/ru/function.header.php')
  • Этот процесс вроде бы достаточно прост, однако в использовании http-заголовков есть один подводный камень - их можно отправить только один раз. Сложность в том, что начало ЛЮБОГО вывода на страницу, будь то html-теги или простой var_dump(), сопровождается отправкой заголовков. Соответственно, после этого любая попытка принудительно добавить ещё один закончится ошибкой. Чтобы подобных ошибок избежать, нужно запомнить следующее - сначала отправляем заголовки, потом отображаем html-разметку.

ПОЯСНЕНИЯ И ПОЛЕЗНАЯ ИНФОРМАЦИЯ

  • Обратите внимание на то, как мы указывали ссылку на конечную страницу в примере. Хорошей практикой будет указывать относительные пути БЕЗ доменного имени или имени хоста. Потому что если ваш проект лежит в папке, скажем, 'my_home_project', при переносе его на чужой компьютер или хостинг ссылка вроде header('Location: http://my_home_project/index.php') сломается и работать не будет. Кстати, относится это не только к ссылкам в header(), но и вообще ко всем ссылкам и путям в приложении.

 

  • В последнем пункте мы говорили о том, как важно соблюдать правильную последовательность вывода и функции header(), но на практике это далеко не всегда возможно. Если у вас не получается вынести заголовки в самое начало, используйте буферизацию вывода, как бы "придерживая" вывод информации в буфере до того, как все нужные заголовки будут отправлены. 
Расскажите всем
Поделиться
Отправить