Άμεση Ανακατεύθυνση σε PHP

Μια ανακατεύθυνση που πραγματοποιείται χρησιμοποιώντας τη header συνάρτηση δεν συμβαίνει τη στιγμή που καλείται αυτή η συνάρτηση. Αυτό συμβαίνει επειδή η PHP herself δεν εκτελεί την ανακατεύθυνση, αλλά μόνο στέλνει το αντίστοιχο HTTP header στο browser.

Αυτό σημαίνει ότι η ανακατεύθυνση θα συμβεί μόνο όταν η PHP ολοκληρώσει την εκτέλεση ολόκληρου του script. Εξαιτίας αυτού, μπορεί να εμφανιστούν διάφορα παράσιτα effects.

Για παράδειγμα, στον ακόλουθο κώδικα θέλουμε να εκτελέσουμε είτε μια ανακατεύθυνση είτε ένα database query. Αλλά το database query θα εκτελεστεί ακόμα κι αν υπήρχε μια εντολή ανακατεύθυνσης:

php<?php
  if ($_GET['test']) {
    header('Location: test.php');
  }
  
  $query = "UPDATE users SET changed=1 WHERE id=1";
  mysqli_query($link, $query); // θα εκτελεστεί ακόμα και σε ανακατεύθυνση!
?>

Για να αποφύγετε τέτοια problems, πρέπει να καλέσετε τη die συνάρτηση αμέσως μετά την ανακατεύθυνση, η οποία θα τερματίσει αμέσως την εκτέλεση του script και η ανακατεύθυνση θα συμβεί άμεσα:

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

Αναπαράγετε κάποιο παράσιτο effect στον κώδικά σας. Στη συνέχεια, διορθώστε το χρησιμοποιώντας τη die συνάρτηση.