Redirection instantanée en PHP
La redirection, effectuée à l'aide de la fonction
header, ne se produit pas au moment
de l'appel de cette fonction. En effet, PHP lui-même
n'effectue pas la redirection, mais envoie seulement
l'en-tête HTTP correspondant au navigateur.
Cela signifie que la redirection se produira seulement lorsque PHP aura exécuté le script entier jusqu'à la fin. À cause de cela, divers effets parasites peuvent survenir.
Par exemple, dans le code suivant, nous voulons effectuer soit une redirection, soit une requête à la base de données. Mais la requête à la base de données s'exécutera même si il y avait une commande de redirection :
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // s'exécutera même lors de la redirection !
?>
Pour éviter de tels problèmes, il faut
immédiatement après la redirection appeler la fonction
die, qui mettra fin instantanément
à l'exécution du script et la redirection se produira
immédiatement :
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproduisez un effet parasite quelconque
dans votre code. Puis corrigez-le
à l'aide de la fonction die.