Άμεση Ανακατεύθυνση σε PHP
Μια ανακατεύθυνση που πραγματοποιείται χρησιμοποιώντας τη
header συνάρτηση δεν συμβαίνει τη στιγμή
που καλείται αυτή η συνάρτηση. Αυτό συμβαίνει επειδή η PHP herself
δεν εκτελεί την ανακατεύθυνση, αλλά μόνο στέλνει
το αντίστοιχο HTTP header στο browser.
Αυτό σημαίνει ότι η ανακατεύθυνση θα συμβεί μόνο όταν η PHP ολοκληρώσει την εκτέλεση ολόκληρου του script. Εξαιτίας αυτού, μπορεί να εμφανιστούν διάφορα παράσιτα effects.
Για παράδειγμα, στον ακόλουθο κώδικα θέλουμε να εκτελέσουμε είτε μια ανακατεύθυνση είτε ένα database query. Αλλά το database query θα εκτελεστεί ακόμα κι αν υπήρχε μια εντολή ανακατεύθυνσης:
<?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
if ($_GET['test']) {
header('Location: test.php');
die();
}
$query = "UPDATE users SET changed=1 WHERE id=1";
mysqli_query($link, $query);
?>
Αναπαράγετε κάποιο παράσιτο
effect στον κώδικά σας. Στη συνέχεια, διορθώστε το
χρησιμοποιώντας τη die συνάρτηση.