Dur Comme Faire

Aller au contenu | Aller au menu | Aller à la recherche

Attention aux redirections

Si comme moi, vous avez l'habitude d'utiliser la fonction header('Location: mon_url.php'); pour rediriger vos visiteurs, méfiez-vous. Il faut ajouter un exit; après car, dans certains cas, la redirection ne se fait pas immédiatement et quelques lignes supplémentaires sont exécutées. J'ai cherché un bon moment avant de trouver cette solution dans la documentation PHP. Comme quoi, RTFM est toujours d'actualité.

Au passage, si vous utilisez HTTP 1.1, les URL doivent être absolues et non relatives. (header('Location: http://www.site.com/mon_url.php'); et non pas simplement header('Location: mon_url.php');)

jeudi 9 décembre 2004 à 22h34 - PHP Fil de syndication

Rétroliens

Aucun rétrolien pour le moment.

Les rétroliens pour ce billet sont fermés.

Commentaires

Gravatar de Fabien

Il est m?me proposer dans la documentation PHP une fonction qui permet de recr?er le chemin absolu et donc de ne se soucier que du chemin relatif :

<?php
header("Location: " . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF'])
. "/" . $relative_url);
?>

Fabien le vendredi 10 décembre 2004 à 01h29 Icone du permalien

Gravatar de solo

Ce sont des solutions absolues pour pr?venir des erreurs. Mais si on maitrise le contexte de la redirection on peut ne pas utiliser exit. Bien sur qui peut le plus peut le moins :D

solo le vendredi 10 décembre 2004 à 10h05 Icone du permalien

Gravatar de JMF

solo>Tout ? fait. Le souci c'est que je ne savais pas du tout, et je ne pense pas ?tre le seul, qu'il ?tait possible dans certains cas que l'ex?cution du script continue.

C'est surtout cela que je voulais soulign? vu que ?a am?ne des bugs tr?s difficiles ? d?busquer car apparemment incoh?rents. :)

JMF le vendredi 10 décembre 2004 à 10h10 Icone du permalien

Gravatar de Nico

J'ai effectivement pass? un bon moment ? traquer un bug dans ce style. Ca sert de le?on de perdre 2 heures sur un probl?me comme ?a.

Nico le vendredi 10 décembre 2004 à 21h30 Icone du permalien

Gravatar de Romain

Le probl?me est que tout le monde croit que cette fonction ne sert qu'? la redirection.
Une fois ex?cut?e, l'interpr?teur passe ? la ligne suivante. Normal quoi :)

Romain le mardi 14 décembre 2004 à 22h12 Icone du permalien

Gravatar de pascaltje

J'utilise:

include('fichier.php');
exit;

pour ?viter les headers qui plantent de temps en temps
(et maintenant je m'interroge sur les redirections hors site de base)

pascaltje le vendredi 7 janvier 2005 à 17h50 Icone du permalien

Gravatar de JMF

pascaltje> Les fonctions include() et header() n'ont rien ? voir. A moins que je ne sois fatigu?, ce qui n'est pas impossible vu que c'est la fin de semaine, le code que tu proposes ne remplit pas la fonction demand?e.

JMF le vendredi 7 janvier 2005 à 18h06 Icone du permalien

Gravatar de pascaltje

Effectivement, ?a n'a rien ? voir...

mais tout d?pend de l'usage qu'on en fait:
si je dois faire une redirection (un choix de page) lors des tests de validation du contenu d'un formulaire, l'url je m'en fiche et je passe par l'include() qui a le m?me effet.

si la redirection est r?elle, alors header() .

pascaltje le vendredi 7 janvier 2005 à 21h41 Icone du permalien

Ajouter un commentaire

Les commentaires pour ce billet sont fermés.

XHTML - CSS - DotClear - Technorati

Les billets de ce blog sont sous licence Creative Commons