Trenutni preusmeravanja u PHP
Preusmeravanje izvršeno pomoću funkcije
header ne dešava se u trenutku
pozivanja te funkcije. Na kraju krajeva, PHP sam
ne vrši preusmeravanje, već samo šalje
odgovarajući HTTP zaglavlje u pregledač.
To znači da će se preusmeravanje desiti samo kada PHP izvrši celu skriptu do kraja. Zbog toga mogu nastati razni neželjeni efekti.
Na primer, u sledećem kodu želimo da izvršimo ili preusmeravanje, ili upit ka bazi. Ali upit ka bazi će se izvršiti čak i ako je bila komanda za preusmeravanje:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // izvršiće se čak i pri preusmeravanju!
?>
Da bi se izbegli slični problemi potrebno je
neposredno nakon preusmeravanja pozvati funkciju
die, koja će trenutno prekinuti
izvršavanje skripte i preusmeravanje će se desiti
odmah:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reprodukujte neki neželjeni
efekt u vašem kodu. Zatim ga ispravite
pomoću funkcije die.