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

←→
↑