Azonnali átirányítás PHP-ban
A header függvénnyel végrehajtott
átirányítás nem a függvény hívásakor
történik meg. Hiszen a PHP maga
nem hajtja végre az átirányítást, csak
egy megfelelő HTTP fejlécet küld a böngészőnek.
Ez azt jelenti, hogy az átirányítás csak akkor fog megtörténni, amikor a PHP végrehajtja a teljes szkriptet a végéig. Emiatt különféle káros hatások léphetnek fel.
Példaként a következő kódban azt szeretnénk, hogy vagy átirányítás történjen, vagy adatbázis-lekérdezés. De az adatbázis-lekérdezés végrehajtódik, még akkor is, ha az átirányítás parancsa szólt:
<?php
if ($_GET['test']) {
header('Location: test.php');
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query); // végrehajtódik még átirányítás esetén is!
?>
Hogy elkerüljük az ilyen problémákat,
közvetlenül az átirányítás után meg kell
hívni a
die függvényt, amely azonnal megszakítja
a szkript végrehajtását, és az átirányítás azonnal
megtörténik:
<?php
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Reprodukáljon valamilyen káros
hatást a kódjában. Majd javítsa ki
a die függvény segítségével.