Мгновенные редирект в PHP
Редирект, выполненный с помощью функции
header
не происходит в момент
вызова этой функции. Ведь PHP сам
не выполняет редирект, а только отправляет
соответствующий HTTP заголовок в браузер.
Это значит, что редирект произойдет только тогда, когда PHP выполнит весь скрипт до конца. Из-за этого могут происходить всякие паразитные эффекты.
Для примера, в следующем коде мы хотим выполнить или редирект, или запрос к базе. Но запрос к базе выполнится даже если была команда на редирект:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // выполнится даже при редиректе!
?>
Для избежания подобных проблем нужно
сразу после редиректа вызвать функцию
die
, которая мгновенно завершит
выполнение скрипта и редирект произойдет
сразу же:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Воспроизведите какой-нибудь паразитный
эффект в вашем коде. Затем исправьте
его с помощью функции die
.