[PHP] Header et ob_flush

Header et ob_flush [PHP] - PHP - Programmation

Marsh Posté le 06-05-2004 à 16:32:50    

VOIR plus bas svp :)
 
 
avant de crier je tient a preciser que non, mon code ne produit aucune sortie avant mon header.
Pour preuve je fait deux setcookie(); juste avant et il n'y a aucune erreur :)
 
J'ai lu sur la doc que l'url absolue fonctionnait partout et j'ai donc fait un simple echo

echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
 
 
Me retourne http://localhost/other/index.php


donc parfaitement la page que je veut :)
Cependant une fois loggé j'utilise un header pour retourner sur une page me disant "vous etes loggé blabla".
 
Voila le code :
 

function login() {
 
 //If the user forgot one or two field => error
 if ($_POST["nick"]=="" || $_POST["pass"]=="" ) {
  error(2);
 }
 $time_expire = time()+(60*60*24*365*2); //expire au bout de 2 ans :o)
 setcookie("nickname", $_POST["nick"], $time_expire);
 setcookie("pass", $_POST["pass"], $time_expire);
 header("Location : http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?page=done" );
}

Evidement les verif sont pas fini :D, mais le point n'est pas la :/
 
La page reste telle quelle, a savoir que je suis encore a l'acceuil et qu'un fois pressé le boutton, j'ai mes cookies mais mon url bouge pas d'un pet :'(
 
Une idée? :cry:


Message édité par Profil supprimé le 07-05-2004 à 10:56:30
Reply

Marsh Posté le 06-05-2004 à 16:32:50   

Reply

Marsh Posté le 06-05-2004 à 17:01:36    

il arrive parfoit que tu sois reellement redirigé mais sur l'url de ton navigateur il ne bouge pas.

Reply

Marsh Posté le 06-05-2004 à 17:05:57    

oui mais je suis pas redirigé :D
 
en fait pour mon systeme de page j'ai  

Code :
  1. if (isset($_GET["page"])) {
  2. //stop the script in case the page doesn't exist
  3. if (!@is_file("pages/".$_GET["page"].".php" )) {
  4.  error(1);
  5. }
  6. //or include the good file
  7. include("pages/".$_GET["page"].".php" );
  8. }
  9. else {
  10. include("pages/index.php" );
  11. }


 
il me dirais donc que cette page n'existe pas :/
 
or ce n'est pas le cas

Reply

Marsh Posté le 06-05-2004 à 17:27:18    

ca y est c'est resolu.
 
il faut pas d'espace entre le Location et les deux point :heink:

Reply

Marsh Posté le 06-05-2004 à 17:30:55    

spa bien de mettre [resolu] devant le titre : ça cache la sous-section :o Faut le mettre après le titre, ou le mettre entre parenthèses


Message édité par antp le 06-05-2004 à 17:31:11

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-05-2004 à 17:31:22    

bon bon ok :o

Reply

Marsh Posté le 06-05-2004 à 17:37:54    

en fait c'est pas resolu :D
 
enfin si en local ca marche niquel mais bien evidement sur le net ca foire :(
 
Le classic

Code :
  1. Warning: Cannot modify header information - headers already sent by (output started at d:\work\bdb\includes\header.php:31) in d:\work\bdb\includes\functions\functions.php on line 45
  2. Warning: Cannot modify header information - headers already sent by (output started at d:\work\bdb\includes\header.php:31) in d:\work\bdb\includes\functions\functions.php on line 46
  3. Warning: Cannot modify header information - headers already sent by (output started at d:\work\bdb\includes\header.php:31) in d:\work\bdb\includes\functions\functions.php on line 47


 
Je connait la raison de ca evidement, mais le truc c'est que j'arrive pas a la contourner
 
j'ai essayer avec ob_flush :
 

Code :
  1. ob_start();
  2. setcookie("nickname", $_POST["nick"], $time_expire);
  3. setcookie("pass", $_POST["pass"], $time_expire);
  4. header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?page=done" );
  5. ob_end_flush();


 
et ca ne fonctionne pas.
Je suppose que c'est mal ecrit mais je comprend mal comment m'en servir :)

Reply

Marsh Posté le 07-05-2004 à 10:55:49    

up, jveut pas faire ca en JS [:mmmfff]


Message édité par Profil supprimé le 07-05-2004 à 10:57:05
Reply

Marsh Posté le 07-05-2004 à 11:04:21    

y'a quoi a la ligne 31 ?


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 07-05-2004 à 11:07:48    

ha oui mon code a un peu changer.
 
En gros voila j'ai ma page principale ou j'inclue la page requise dans l'url
 

Code :
  1. <?php
  2. //include the header of hte page
  3. include("includes/header.php" );
  4. // This include contain all the site contents
  5. // Every single page is included here
  6. if (isset($_GET["page"])) {
  7. //stop the script in case the page doesn't exist
  8. if (!@is_file("pages/".$_GET["page"].".php" )) {
  9.  error(1);
  10. }
  11. //or include the good file
  12. include("pages/".$_GET["page"].".php" );
  13. }
  14. else {
  15. include("pages/index.php" );
  16. }
  17. //include the footer
  18. include("includes/footer.php" );
  19. ?>


 
comme tu le voit si la page n'xiste pas, il utilise la fonction error.
 
et dans la fonction error j'ai :  

Code :
  1. function error($id_error) {
  2. header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?page=error&id=$id_error" );
  3. exit;
  4. }


 
du coup j'obtient

Citation :

Warning: Cannot modify header information - headers already sent by (output started at d:\work\bdb\includes\header.php:39) in d:\work\bdb\includes\functions\functions.php on line 47


 
ligne 47 de functions.pph c'est le header("location:..." ) et ligne 39 de header.php, c'est du html [:spamafote]

Reply

Marsh Posté le 07-05-2004 à 11:07:48   

Reply

Marsh Posté le 07-05-2004 à 11:11:57    

Utiliser un header() pour une fonction de gestion d'erreurs, c'est un peu chaud.
 
Fais plutôt une fonction d'erreur qui affiche une page complète…

Reply

Marsh Posté le 07-05-2004 à 11:14:36    

ben la ca me redirige vers la page d'erreur en question :D
 
et meme si c'est un peu chaud, ca doit etre faisable quand meme :(
 
je precise qu'en remplacant ma fonction error pas
 

Code :
  1. function error($id_error) {
  2. ob_start();   
  3. header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?page=error&id=$id_error" );
  4.      exit;
  5. ob_end_flush();
  6.   }


 
ca change rien

Reply

Marsh Posté le 07-05-2004 à 11:19:37    

chacal_one333 a écrit :

ben la ca me redirige vers la page d'erreur en question :D
 
et meme si c'est un peu chaud, ca doit etre faisable quand meme :(
 


 
Non, parce qu'à la moindre erreur sérieuse, php va afficher un message d'erreur et ton header foirera. (output started)
 
De plus il est hors de question de faire des includes avec un output avant, sinon ça foirera aussi. (output started)

Reply

Marsh Posté le 07-05-2004 à 11:21:42    

Citation :


du coup j'obtient

Citation :

Warning: Cannot modify header information - headers already sent by (output started at d:\work\bdb\includes\header.php:39) in d:\work\bdb\includes\functions\functions.php on line 47


 
ligne 47 de functions.pph c'est le header("location:..." ) et ligne 39 de header.php, c'est du html [:spamafote]


 
bah si c'est de l'html c'est une sortie donc c'est normal que ton header foire puisque cette sortie a déjà eue lieu. (ou alors j'ai pas tout capté...)


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 07-05-2004 à 11:21:53    

je stop les erreurs générée par php :o
 
Enfin je les canalise et affiche un message mieux.
Et pour le coup des output started, ca ne se contourne pas?

Reply

Marsh Posté le 07-05-2004 à 11:22:47    

boulax a écrit :

Citation :


du coup j'obtient

Citation :

Warning: Cannot modify header information - headers already sent by (output started at d:\work\bdb\includes\header.php:39) in d:\work\bdb\includes\functions\functions.php on line 47


 
ligne 47 de functions.pph c'est le header("location:..." ) et ligne 39 de header.php, c'est du html [:spamafote]


 
bah si c'est de l'html c'est une sortie donc c'est normal que ton header foire puisque cette sortie a déjà eue lieu. (ou alors j'ai pas tout capté...)

mais je sais que c'est normal :)
 
tout ce que je veut, c'est contourner cette methode par je ne sais quelle fonction [:spamafote]
 
Doit bien y avoir moyen d'utiliser un header pour les erreures quand meme :(

Reply

Marsh Posté le 07-05-2004 à 11:23:06    

fais le test avant le include [:spamafote]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 07-05-2004 à 11:24:26    

chacal_one333 a écrit :

je stop les erreurs générée par php :o
 
Enfin je les canalise et affiche un message mieux.
Et pour le coup des output started, ca ne se contourne pas?


 
Si, en bufferisant TOUT le contenu de la page (includes et cie compris).
 
Mais je répète que header() est à éviter pour une gestion d'erreurs.

Reply

Marsh Posté le 07-05-2004 à 11:25:23    

tu veut dire que je met le ob_start() en haut du header.php et le ob_end_flush() en bas du footer??
 
ca fait pas des perf minable?

Reply

Marsh Posté le 07-05-2004 à 11:26:59    

chacal_one333 a écrit :

tu veut dire que je met le ob_start() en haut du header.php et le ob_end_flush() en bas du footer??
 
ca fait pas des perf minable?


 
Ben si tu tiens tellement à ton header()…  [:spamafote]

Reply

Marsh Posté le 07-05-2004 à 11:33:29    

ca marche nikel en mettant ca :)
 
niveau perf j'ai encore rien remarquer vu que ma page est plutot vide.
 
quelqu'un a deja experiencer ca?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed