Okamžité přesměrování v PHP
Přesměrování provedené pomocí funkce
header neproběhne v okamžiku
volání této funkce. PHP samo
neprovádí přesměrování, pouze odesílá
příslušnou HTTP hlavičku do prohlížeče.
To znamená, že k přesměrování dojde pouze tehdy, když PHP dokončí celý skript až do konce. Kvůli tomu mohou vznikat různé parazitní efekty.
Jako příklad, v následujícím kódu chceme provést buď přesměrování, nebo dotaz do databáze. Ale dotaz do databáze se provede, i když byl vydán příkaz k přesměrování:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // provede se i při přesměrování!
?>
Pro zabránění podobným problémům je potřeba
ihned po přesměrování zavolat funkci
die, která okamžitě ukončí
provedení skriptu a přesměrování proběhne
okamžitě:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reprodukujte nějaký parazitní
efekt ve vašem kódu. Poté jej opravte
pomocí funkce die.