Natychmiastowe przekierowania w PHP
Przekierowanie wykonane za pomocą funkcji
header nie następuje w momencie
wywołania tej funkcji. W końcu PHP sam
nie wykonuje przekierowania, a tylko wysyła
odpowiedni nagłówek HTTP do przeglądarki.
Oznacza to, że przekierowanie nastąpi tylko wtedy, gdy PHP wykona cały skrypt do końca. Z tego powodu mogą występować różne niepożądane efekty.
Dla przykładu, w następnym kodzie chcemy wykonać albo przekierowanie, albo zapytanie do bazy. Ale zapytanie do bazy wykona się nawet jeśli była komenda na przekierowanie:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // wykona się nawet przy przekierowaniu!
?>
Aby uniknąć podobnych problemów należy
natychmiast po przekierowaniu wywołać funkcję
die, która natychmiast zakończy
wykonywanie skryptu i przekierowanie nastąpi
od razu:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Odtwórz jakiś niepożądany
efekt w swoim kodzie. Następnie popraw go
za pomocą funkcji die.