Okamžité presmerovanie v PHP
Presmerovanie vykonané pomocou funkcie
header neprebehne v okamihu
volania tejto funkcie. Lebo PHP samo
nevykonáva presmerovanie, ale iba odosiela
príslušnú HTTP hlavičku do prehliadača.
To znamená, že presmerovanie prebehne až vtedy, keď PHP vykoná celý skript až do konca. Kvôli tomu môžu nastať rôzne parazitné efekty.
Napríklad, v nasledujúcom kóde chceme vykonať buď presmerovanie, alebo dopyt do databázy. Ale dopyt do databázy sa vykoná aj keď bola zadaná príkaz na presmerovanie:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // vykoná sa aj pri presmerovaní!
?>
Na vyhnutie sa podobným problémom je potrebné
hneď po presmerovaní zavolať funkciu
die, ktorá okamžite ukončí
vykonávanie skriptu a presmerovanie prebehne
okamžite:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reprodukujte nejaký parazitný
efekt vo vašom kóde. Potom ho opravte
pomocou funkcie die.