Kohene ümbersuunamine PHP-s

Ümbersuunamine, mis on tehtud funktsiooniga header, ei toimu selle funktsiooni väljakutsumise hetkel. Sest PHP ise ei täida ümbersuunamist, vaid saadab vastava HTTP päise brauserisse.

See tähendab, et ümbersuunamine toimub alles siis, kui PHP on täitnud kogu skripti lõpuni. Selle tõttu võivad esineda erinevad parasiitefektid.

Näiteks järgmises koodis tahame teha kas ümbersuunamise või andmebaasipäringu. Kuid andmebaasipäring tehakse isegi siis, kui oli käsk ümbersuunamiseks:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // teostatakse isegi ümbersuunamise korral!
?>

Selliste probleemide vältimiseks tuleb kohe pärast ümbersuunamist välja kutsuda funktsioon die, mis koheselt lõpetab skripti täitmise ja ümbersuunamine toimub kohe:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
    die();
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query);
?>
Задание 1

Reprodutseerige mingi parasiitne efekt oma koodis. Seejärel parandage see funktsiooni die abil.