Незабавни пренасочвания в 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.