การเปลี่ยนเส้นทางทันทีใน PHP

การเปลี่ยนเส้นทางที่ดำเนินการโดยใช้ฟังก์ชัน header ไม่เกิดขึ้นในขณะที่ เรียกใช้ฟังก์ชันนี้ เพราะ PHP เอง ไม่ได้ดำเนินการเปลี่ยนเส้นทาง แต่เพียงส่ง ส่วนหัว HTTP ที่สอดคล้องไปยังเบราว์เซอร์

นั่นหมายความว่าการเปลี่ยนเส้นทางจะเกิดขึ้น เมื่อ PHP ประมวลผลสคริปต์ทั้งหมด จนเสร็จสิ้นเท่านั้น เนื่องจากสิ่งนี้อาจทำให้เกิด ผลข้างเคียงที่ไม่พึงประสงค์ต่างๆ

ตัวอย่างเช่น ในโค้ดต่อไปนี้เราต้องการ ดำเนินการเปลี่ยนเส้นทาง หรือคำขอไปยังฐานข้อมูล แต่คำขอไปยังฐานข้อมูลจะถูกดำเนินการแม้ว่า จะมีคำสั่งให้เปลี่ยนเส้นทางก็ตาม:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // จะทำงานแม้มีการเปลี่ยนเส้นทาง!
?>

เพื่อหลีกเลี่ยงปัญหาดังกล่าว จำเป็นต้อง เรียกฟังก์ชัน die ทันที หลังจากเปลี่ยนเส้นทาง ซึ่งจะทำให้ การทำงานของสคริปต์สิ้นสุดลงทันที และการเปลี่ยนเส้นทางจะเกิดขึ้น ในทันที:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
    die();
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query);
?>
Задание 1

ลองสร้างผลข้างเคียงที่ไม่พึงประสงค์ ในโค้ดของคุณ จากนั้นแก้ไข โดยใช้ฟังก์ชัน die