Page 1 sur 1

Redirection apres un labs de temps

Posté : 18 juil. 2007, 19:12
par fab
Voila je suis face à un problème :)

Je dois faire une redirection après un certain temps afin d'afficher un message d'erreur, pour cela jusqu'a présent j'utilisais une solution en javascript mais après avoir écouté la prèche de quelques intégristes dont certains trainent dans les parages j'aurais voulu savoir quelles solutions permettre de faire cela de façon "propre".
Merci d'avance :)

Posté : 18 juil. 2007, 19:20
par Sékiltoyai
Redirection par balise meta :

Code : Tout sélectionner

<meta http-equiv="refresh" content="10; url=http://www.example.com" />

Posté : 18 juil. 2007, 19:20
par Cyrano
Si on considère que des informations sont déjà affichées dans un navigateur, ça exclut l'utilisation de header() qui aurait pu être utilisé en combinaison avec un sleep().

Donc contourner le langage client va être un problème auquel je ne vois pas de solution :-k
J'ajouterais qu'on peut très bien faire du JavaScript "proprement" ;)

Posté : 18 juil. 2007, 19:23
par fab
voici la fonction que j'utilise perso
 
<?php

function redirect($url_cible, $temps=1250)
{
echo "<script>function redirect() {
window.location.href=\"$url_cible\";
}\n
setTimeout(\"redirect();\", $temps);
</script>
";
}

?>

Posté : 18 juil. 2007, 19:27
par Sékiltoyai
voici la fonction que j'utilise perso
Tu peux reproduire la même chose avec la meta, c'est plus propre que du js.
Dans content, les arguments sont de la forme "temps en secondes; url=http://url_du_site"

Posté : 18 juil. 2007, 19:27
par zeus
Si tu essayes de lancer un traitement PHP, d'afficher un message d'attente et de rediriger vers une page d'erreur, pourquoi ne mettrais tu pas en place un système par AJAX.

Tu charges une page qui, dès le chargement, lance l'exécution du traitement PHP et un chrono.
Si tu dépasses le temps alloué d'avance, tu rediriges vers la page d'erreur.

Posté : 18 juil. 2007, 19:48
par fab
voici la fonction que j'utilise perso
Tu peux reproduire la même chose avec la meta, c'est plus propre que du js.
Dans content, les arguments sont de la forme "temps en secondes; url=http://url_du_site"
Modifier les balises est un problème technique lourd, dans la plupart des cas quand on fait le traitement ça fait bien longtemps que la balise </head> est fermée.
Si tu essayes de lancer un traitement PHP, d'afficher un message d'attente et de rediriger vers une page d'erreur, pourquoi ne mettrais tu pas en place un système par AJAX.

Tu charges une page qui, dès le chargement, lance l'exécution du traitement PHP et un chrono.
Si tu dépasses le temps alloué d'avance, tu rediriges vers la page d'erreur.
J'ai déjà pensé à cette solution, j'avoue n'avoir jamais codé quelque chose dans le style car l'AJAX me fait defaut.
Si tu as un bout de code je suis preneur sinon je vais tenter d'instaurer ça et je vous le transmettrais mais ça risque de prendre du temps :)

Posté : 18 juil. 2007, 20:26
par Sékiltoyai
Modifier les balises est un problème technique lourd, dans la plupart des cas quand on fait le traitement ça fait bien longtemps que la balise </head> est fermée.
C'est un problème de conception ça.
Je te répondrais que normalement, la génération du code html, c'est ce que l'on fait en dernier...

Posté : 18 juil. 2007, 22:34
par titerm
Je suis du meme avis que sékiltoyai. T'as un pb de conception

Dans le pire des cas, en mode crade, tu peux toujours faire un ob_start('ob_tidyhandler') en début de code, effectuer ton echo '<meta http-equiv="refresh" content="10; url=http://www.example.com" />' où tu veux, tidy corrigera et le remontera dans le head. Tu peux faire la meme chose manuellement avec une fonction de post traitement que tu écris toi meme.

Mais remplacer ta fonction JS par de l'ajax, c'est pour le moins farfelu.

Faire de l'ajax pour faire ca, c'est un peu le rouleau compresseur pour écraser une mouche. Je sais bien que ajax est a la mode, mais la, c'est limite.

Relit bien ta question, tu voulais faire qq chose de "propre", la réponse, c'est le meta refresh.

Posté : 18 juil. 2007, 22:50
par Calimero
Le meta refresh est effectivement ce qu'il y a de plus propre pour ça. Tout le reste est de la bidouille (plus ou moins bonne !) à côté :)

Ton besoin est une très bonne raison de passer aux templates. Ou si c'est trop long par rapport au besoin, un peu d'output buffering pourra faire l'affaire aussi (mais bon, là aussi, bidouille power, maintenance hasardeuse, toussa...).

Posté : 18 juil. 2007, 23:55
par fab
Solution trouvée avec l'aide de Calimero et de vous autres :)
Je place en fait un commentaire HTML bidon <!--[META_TEMP]--> et grâce au buffering je le remplace quand bon me semble car à la fonction suivante :
function redirection($url_target,$time,$source)
{
	$content = str_replace('<!--[META_TEMP]-->','<meta http-equiv="refresh" content="'.$time.'; url='.$url_target.'" />',$source);
	return $content;
}
Merci à vous,