Ակնթարթային ռեդիրեկտ 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 ֆունկցիայի միջոցով: