Мгновенныя рэдырэкты ў 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.