Истанчани редирект у 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.