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