Redirecționare instantanee în PHP
Redirecționarea efectuată cu funcția
header nu are loc în momentul
apelării acestei funcții. La urma urmei, PHP însuși
nu execută redirecționarea, ci doar trimite
antetul HTTP corespunzător către browser.
Aceasta înseamnă că redirecționarea va avea loc doar atunci când PHP execută întregul script până la capăt. Din această cauză pot apărea diverse efecte parazite.
De exemplu, în următorul cod dorim să executăm fie o redirecționare, fie o interogare la baza de date. Dar interogarea la baza de date se va executa chiar dacă a existat comanda de redirecționare:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // se va executa chiar și la redirecționare!
?>
Pentru a evita astfel de probleme este nevoie să
apelăm imediat după redirecționare funcția
die, care va încheia instantaneu
executia scriptului și redirecționarea va avea loc
imediat:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproduceți un efect parazit
în codul dvs. Apoi remediați
cu ajutorul funcției die.