Momentinis redirect PHP
Redirect, atliktas naudojant funkciją
header neįvyksta tuo momentu,
kai iškviečiama ši funkcija. Juk PHP pats
neatlieka redirect, o tik siunčia
atitinkamą HTTP antraštę naršyklei.
Tai reiškia, kad redirect įvyks tik tada, kai PHP įvykdys visą scenarijų iki galo. Dėl to gali atsirasti įvairių parazitinių efektų.
Pavyzdžiui, toliau pateiktame kode mes norime atlikti arba redirect, arba užklausą į duomenų bazę. Bet užklausa į duomenų bazę bus vykdyta net jei buvo išduota redirect komanda:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // bus vykdyta net esant redirect!
?>
Kad išvengtumėte tokių problemų, reikia
iškart po redirect iškviesti funkciją
die, kuri momentiškai nutrauks
scenarijaus vykdymą ir redirect įvyks
tuoj pat:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Sukurkite kokį nors parazitinį
efektą savo kode. Tada ištaisykite jį
naudodami funkciją die.