Faire une redirection vers une autre page
- Par Emacs
- 9 commentaires
- 3 887 lectures
- Format PDF
- RSS - Atom
Il existe des applications web pour lesquelles on souhaite rediriger le visiteur en fonction de paramètres. C'est le cas par exemple pour un script d'identification. Si l'internaute fournit les bons identifiants alors il est redirigé automatiquement vers son espace personnel, sinon il est renvoyé vers le formulaire d'authentification.
Présentation des rédirections
Il y'a plusieurs manières de faire de la redirection HTTP par les pages Web : balises meta, script Javascript ou bien encore script PHP. Bien entendu, la dernière solution est de loin la meilleure et la plus propre car elle est entièrement gérée par le serveur, tandis que les deux autres sont réalisées du côté du client (donc potentiellement désactivables).
La fonction header()
Lorsque l'on souhaite créer une redirection avec PHP, on utilise une fonction permettant d'envoyer des entêtes de type Location (adresse). Pour cela, PHP dispose de la fonction header() qui se charge d'envoyer les entêtes passés en paramètre.
Règle importante : l'appel de cette fonction doit se faire avant tout envoi au navigateur (instruction echo, print, espace blanc, balise html...) sous peine de générer une erreur de type Headers already sent by.... Cette erreur signifie que la page a déjà été envoyée au navigateur avant de vouloir envoyer des entêtes HTTP. La logique de développement demande le contraire !
Script de redirection avec header()
La syntaxe de la redirection est simple. On passe en paramètre de la fonction header() une chaîne de caractères précisant le type d'entête (Location) et la page sur laquelle l'internaute doit être renvoyé.
Script de redirection<?php?>
Note : l'instruction exit() qui succède la fonction header() permet de couper l'exécution du script car la redirection aura lieu immédiatement et le reste du code n'a pas d'intérêt à être interprêté.
Les commentaires
2. Par Emacs le mardi 18 décembre 2007 à 21:09
Merci
![]()
3. Par Jjenn le mardi 01 janvier 2008 à 12:12
Excellent, Clair et Précis.
Merci !
4. Par donky le mardi 08 janvier 2008 à 23:11
Comment faire une redirection après 3 secondes, exemple? Merci
5. Par Emacs le mercredi 09 janvier 2008 à 09:09
Avec Javascript ou une balise meta mais c'est fortement déconseillé de rediriger côté client. Il faut toujours rediriger côté serveur pour s'assurer que le changement de page a bien eu lieu.
6. Par donky le mercredi 09 janvier 2008 à 21:09
Donc pour rediriger côté serveur, il faut utiliser le Javascript, c'est ça?
7. Par Emacs le jeudi 10 janvier 2008 à 09:09
Non c'est l'inverse !!!
PHP = exécuté côté serveur
Javascript, HTML = exécuté côté client (navigateur)
Donc si tu veux rediriger après un laps de temps de X secondes, tu seras obligé de passer par une technologie cliente. Le problème, c'est que vu que c'est le navigateur du client qui exécute la redirection, il devient possible de la contourner (en désactivant Javascript par exemple). En revanche, en redirigeant côté serveur (cad avec PHP), tu t'assures que le client est bien redirigé.
8. Par Duffy le lundi 16 juin 2008 à 13:01
"Donc si tu veux rediriger après un laps de temps de X secondes, tu seras obligé de passer par une technologie cliente."
Non, tu n'es pas du tout obligé, pourquoi ne pas faire un sleep(X) juste avant le header, et voila le tours est joué![]()
9. Par Emacs le lundi 16 juin 2008 à 16:04
@Duffy : hum wai à tester mais ça ne résoud pas le problème pour autant puisque de toute manière tu ne pourras pas afficher de contenu sur la sortie standard. En gros si tu fais :
<?php
echo 'Vous allez être redirigé dans 5 secondes';
sleep(5);
header('Location: http://www.monsite.com/page.php');
?>
Tu auras toujours une erreur t'indiquant que les entêtes ont déjà été envoyés au navigateur, donc la redirection tombera en échec.

1. Par ^Reg[e]X$# le mardi 18 décembre 2007 à 17:05