Lencongan Segera dalam PHP
Lencongan yang dilakukan menggunakan fungsi
header tidak berlaku pada masa
fungsi itu dipanggil. Ini kerana PHP sendiri
tidak melaksanakan lencongan, ia hanya menghantar
pengepala HTTP yang sesuai ke pelayar.
Ini bermakna lencongan hanya akan berlaku apabila PHP telah melaksanakan keseluruhan skrip sehingga habis. Disebabkan ini, pelbagai kesan sampingan yang tidak diingini boleh berlaku.
Sebagai contoh, dalam kod berikut kita mahu melaksanakan sama ada lencongan, atau permintaan ke pangkalan data. Tetapi permintaan ke pangkalan data akan tetap dilaksanakan walaupun ada arahan untuk lencongan:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // akan dilaksanakan walaupun dengan lencongan!
?>
Untuk mengelakkan masalah seperti ini, kita perlu
selepas lencongan memanggil fungsi
die, yang akan serta-merta menamatkan
pelaksanaan skrip dan lencongan akan berlaku
segera:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Hasilkan semula sebarang kesan sampingan
dalam kod anda. Kemudian betulkannya
dengan menggunakan fungsi die.