Redireccionamiento instantáneo en PHP
El redireccionamiento realizado con la función
header no ocurre en el momento
de llamar a esta función. Después de todo, PHP
no ejecuta el redireccionamiento por sí mismo, sino que solo envía
la cabecera HTTP correspondiente al navegador.
Esto significa que el redireccionamiento ocurrirá solo cuando PHP ejecute todo el script hasta el final. Debido a esto, pueden ocurrir varios efectos parasitarios.
Por ejemplo, en el siguiente código queremos ejecutar un redireccionamiento o una consulta a la base de datos. Pero la consulta a la base de datos se ejecutará incluso si hubo un comando de redireccionamiento:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // ¡se ejecutará incluso con redireccionamiento!
?>
Para evitar tales problemas, es necesario
inmediatamente después del redireccionamiento llamar a la función
die, que terminará instantáneamente
la ejecución del script y el redireccionamiento ocurrirá
inmediatamente:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproduzca algún efecto parasitario
en su código. Luego corríjalo
usando la función die.