მყისიერი რედირექტი 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 ფუნქციის საშუალებით.