Подскажите сколько тип направление есть в php?
Подскажите сколько тип направление есть в php? Кроме
header('Location: news');
exit();
и
exit("<meta http-equiv='refresh' content='0; url= /index.php'>");
Подскажите сколько тип направление есть в php? Кроме
header('Location: news');
exit();
и
exit("<meta http-equiv='refresh' content='0; url= /index.php'>");
На самом деле существует всего два типа перенаправления (на самом деле - вообще один). Первый предусматривает перенаправление на уровне протокола (если грубо, то тот самый header location), второй - так или иначе заставить браузер выполнить переход. Второй крайне нежелателен по той причине, что на страницу будут заходить не только браузеры, но еще поисковики, боты пятнадцатилетних хакиров и Internet Wayback Machine, и в этом случае браузер будет просто отсутствовать.
Браузер (точнее сказать - клиент) и сервер общаются друг с другом по протоколу HTTP. Этот протокол позволяет передавать общую информацию о запросе (клиент передает адрес запрашиваемого ресурса, серевер отдает статус выполнения запроса), мета-информацию (дополнительные заголовки - время модификации, куки и пр.) и само тело запроса или ответа (тело ответа и является веб-страницей). Сервер в обязательном порядке отдает статус запроса - трехзначный код, характеризующий выполнение или невыполнение операции. Все статусы, начинающиеся с двойки означают успешное выполнение запроса, с тройки - перенаправление, с четверки - неправильный запрос, с пятерки - ошибку на сервере. В контексте этого вопроса интересуют статусы 3xx
, потому что именно они отвечают за перенаправление. Когда на сервере выполняется команда, аналогичная header('Location: news');
, то PHP автоматом устанавливает статус ответа в 302
(если я правильно помню), и, таким образом, тот, кто получит ответ, однозначно будет уведомлен о перенаправлении, а ответ будет выглядеть примерно так:
302 Temporarily Moved
Location: news
(да-да, на самом деле в интернете все просто обмениваются кусками текста)
Клиент в этом случае прочитает 302, прочитает Location и перенаправится.
Все вышеописанно является частью протокола HTTP. Управление через <meta>
в тексте документа и window.location
в javascript является нежелательным из-за того, что не все клиенты читают содержимое ответа и не все клиенты его правильно интерпретируют (так, как хочется автору). Единственный и правильный safe-way - это использовать перенаправление через header()
(возможно, кроме простого location есть еще другие заголовки с аналогичной функцией, но они наверняка предназначены для других целей), потому что иначе вас не поймут все небраузерные клиенты, и на Internet Wayback Machine в результате окажется страница, которая будет перенаправлять пользователя в никуда. Наверняка существует порядка десяти "браузерных" способов перекинуть пользователя, но использовать их - некорректно.
В качестве постскриптума: любые действия в PHP приведут к тому, что либо сформируется определенный HTTP-ответ, либо сформируется HTML-документ, в котором в том или ином виде браузеру будет рекомендовано совершить переход. PHP в этом случае реально не занимается ничем большим, чем формированием ответа; эти же операции мог бы проделать любой другой язык, а результатом работы является простой текстовый документ, который можно хоть руками в блокноте набить (но не стоит, конечно).
также можно извратится при помощи JS
echo '<script type="text/javascript">';
echo 'window.location.href="'.$url.'";';
echo '</script>';