Redirecionamento instantâneo em PHP
Um redirecionamento realizado usando a função
header não ocorre no momento
em que essa função é chamada. Isso porque o PHP
não executa o redirecionamento por si só, ele apenas envia
o cabeçalho HTTP correspondente para o navegador.
Isso significa que o redirecionamento só ocorrerá quando o PHP executar todo o script até o final. Por causa disso, vários efeitos indesejados podem acontecer.
Por exemplo, no código a seguir, queremos executar um redirecionamento ou uma consulta ao banco de dados. Mas a consulta ao banco de dados será executada mesmo que tenha sido dado o comando para redirecionar:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // será executada mesmo com o redirecionamento!
?>
Para evitar tais problemas, é necessário
chamar a função die imediatamente
após o redirecionamento. Ela terminará instantaneamente
a execução do script e o redirecionamento ocorrerá
imediatamente:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproduza algum efeito indesejado
em seu código. Em seguida, corrija-o
usando a função die.