Reindirizzamento immediato in PHP
Il reindirizzamento eseguito con la funzione
header non avviene nel momento
in cui viene chiamata questa funzione. Dopotutto, PHP
non esegue il reindirizzamento stesso, ma invia solo
l'intestazione HTTP corrispondente al browser.
Ciò significa che il reindirizzamento avverrà solo quando PHP avrà eseguito completamente l'intero script. A causa di ciò, possono verificarsi vari effetti parassiti.
Ad esempio, nel codice seguente vogliamo eseguire un reindirizzamento o una query al database. Ma la query al database verrà eseguita anche se era stato dato il comando per il reindirizzamento:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // verrà eseguita anche con il reindirizzamento!
?>
Per evitare problemi simili è necessario
chiamare subito dopo il reindirizzamento la funzione
die, che terminerà istantaneamente
l'esecuzione dello script e il reindirizzamento avverrà
immediatamente:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Riproduci un qualche effetto parassita
nel tuo codice. Poi correggilo
utilizzando la funzione die.