การเปลี่ยนเส้นทางทันทีใน PHP
การเปลี่ยนเส้นทางที่ดำเนินการโดยใช้ฟังก์ชัน
header ไม่เกิดขึ้นในขณะที่
เรียกใช้ฟังก์ชันนี้ เพราะ PHP เอง
ไม่ได้ดำเนินการเปลี่ยนเส้นทาง แต่เพียงส่ง
ส่วนหัว HTTP ที่สอดคล้องไปยังเบราว์เซอร์
นั่นหมายความว่าการเปลี่ยนเส้นทางจะเกิดขึ้น เมื่อ PHP ประมวลผลสคริปต์ทั้งหมด จนเสร็จสิ้นเท่านั้น เนื่องจากสิ่งนี้อาจทำให้เกิด ผลข้างเคียงที่ไม่พึงประสงค์ต่างๆ
ตัวอย่างเช่น ในโค้ดต่อไปนี้เราต้องการ ดำเนินการเปลี่ยนเส้นทาง หรือคำขอไปยังฐานข้อมูล แต่คำขอไปยังฐานข้อมูลจะถูกดำเนินการแม้ว่า จะมีคำสั่งให้เปลี่ยนเส้นทางก็ตาม:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // จะทำงานแม้มีการเปลี่ยนเส้นทาง!
?>
เพื่อหลีกเลี่ยงปัญหาดังกล่าว จำเป็นต้อง
เรียกฟังก์ชัน die ทันที
หลังจากเปลี่ยนเส้นทาง ซึ่งจะทำให้
การทำงานของสคริปต์สิ้นสุดลงทันที และการเปลี่ยนเส้นทางจะเกิดขึ้น
ในทันที:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
ลองสร้างผลข้างเคียงที่ไม่พึงประสงค์
ในโค้ดของคุณ จากนั้นแก้ไข
โดยใช้ฟังก์ชัน die