Tūlītējais pāradresējums PHP
Pāradresējums, kas izpildīts, izmantojot funkciju
header, nenotiek šīs funkcijas izsaukšanas brīdī.
Galu galā PHP pats neveic pāradresējumu, bet tikai nosūta
atbilstošu HTTP galveni pārlūkprogrammai.
Tas nozīmē, ka pāradresējums notiks tikai tad, kad PHP izpildīs visu skriptu līdz beigām. Šī iemesla dēļ var rasties dažādi parazitāri efekti.
Piemēram, sekojošajā kodā mēs vēlamies veikt vai nu pāradresējumu, vai vaicājumu uz datu bāzi. Bet vaicājums uz datu bāzi tiks izpildīts pat tad, ja bija komanda pāradresēt:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // izpildīsies pat pāradresējuma gadījumā!
?>
Lai izvairītos no šādām problēmām, ir nepieciešams
uzreiz pēc pāradresējuma izsaukt funkciju
die, kas tūlītēji pārtrauks
skripta izpildi un pāradresējums notiks
nekavējoties:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reproducējiet kādu parazitāru
efektu savā kodā. Pēc tam izlabojiet
to, izmantojot funkciju die.