Titre: Headers already sent ... solution ?
Posté par: real34 le le 04-05-2006 a 11:22:45
Bonjour à tous ! J'ai besoin d'un petit conseil ...
Je sais que pour faire une redirection en php, il faut utiliser
Code:
| header('location:page.php'); |
|
Mais je sais aussi qu'il y a un problème dès qu'on écrit quelquechose avant cette ligne de code ...
Alors il est dur de rediriger l'utilisateur vers une page après par exemple qu'il se soit identifié !!! J'ai trouvé deux solutions qui ont l'air efficaces toutes les 2. Cependant la première utilise le Javascript, donc n'est pas fiable à 100%
Code:
| document.location.replace("page.php"); |
|
Et la seconde passe par le buffer de sortie de php :
Code:
ob_start(); echo 'tout le texte que je veux !!'; header('location:page.php'); ob_end_flush(); |
|
Cette dernière solution semble être de loin la plus efficace. Mais l'implémenter signifie mettre en tout début de page un ob_start(); et de finir celle-ci par ob_end_flush(); Ayant lu la doc de cette fonction et les utilisations qu'on pouvait en faire, je me demandais si cela ne poserait pas de problème : - de vitesse de chargement des pages - de compatibilité avec par exemple les sessions ou autre
Bref ... vaut-il mieux prendre le risque du javascript rapide ou passer par la bufferisation ??! ???
Merci d'avance ! |
Titre: Re:Headers already sent ... solution ?
Posté par: Stick le le 04-05-2006 a 18:22:15
salut,
Il ne faut en effet ne pas utiliser d'envoi au navigateur avant le header, sinon s'affiche un gentil mesage indiquant que le header à déjà été envoyé. Il suffit simplement de ne pas faire de print, de echo avant d'utiliser le header.
Tu as une autre solution qui est d'utiliser une balise méta que tu placera ou bon te semblera : Code:
| <meta http-equiv="refresh" content="0;URL=destination.html" /> |
|
|
Titre: Re:Headers already sent ... solution ?
Posté par: MarvinLeRouge le le 04-05-2006 a 20:46:02
Salut,
1) le javascript ne risque pas d'être plus rapide, puisqu'il faut déjà que la page soit chargée avant qu'il s'exécute 2) la seule obligation est de ne pas avoir envoyé de données dans le flux avant le header, de ne pas avoir fait d'echo par exemple, ce qui n'empêche pas du tout de faire des traitements. Exemple (code tapé à l'arrache, non testé) :
Code:
extract ($_POST); $testLogin = isInDb ($login, $password); if (!$testLogin) { header ("tuTesGourre.php"); } else { // blabla tout va bien }
|
|
|
Titre: Re:Headers already sent ... solution ?
Posté par: real34 le le 05-05-2006 a 09:00:56
Ah oui, d'accord ! Je saisi la différence ...
Je vais essayer de faire des tests, mais il se peut que cela ne fonctionne toujours pas vu que ma page 'connexion.php' par exemple est appelée par un include dans index.php qui elle, contient du code html et aura déjà affiché des choses.
Je vais essayer de regarder tout à l'heure, mais sinon, qu'en est-il de l'utilisation du buffer de sortie ? C'est dangereurx, il y a des risques, c'est lourd ??? |
Titre: Re:Headers already sent ... solution ?
Posté par: MarvinLeRouge le le 05-05-2006 a 15:32:22
A priori, je ne vois pas trop quel risque il y aurait à "bufferiser".
Et si tu ne veux pas avoir d'embrouilles, fais TOUJOURS tous les traitements AVANT les affichages. |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|