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