Redirecționare instantanee în PHP

Redirecționarea efectuată cu funcția header nu are loc în momentul apelării acestei funcții. La urma urmei, PHP însuși nu execută redirecționarea, ci doar trimite antetul HTTP corespunzător către browser.

Aceasta înseamnă că redirecționarea va avea loc doar atunci când PHP execută întregul script până la capăt. Din această cauză pot apărea diverse efecte parazite.

De exemplu, în următorul cod dorim să executăm fie o redirecționare, fie o interogare la baza de date. Dar interogarea la baza de date se va executa chiar dacă a existat comanda de redirecționare:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // se va executa chiar și la redirecționare!
?>

Pentru a evita astfel de probleme este nevoie să apelăm imediat după redirecționare funcția die, care va încheia instantaneu executia scriptului și redirecționarea va avea loc imediat:

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

Reproduceți un efect parazit în codul dvs. Apoi remediați cu ajutorul funcției die.