Мгновенные редирект в 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.



Чат с GPT Компилятор