Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1315 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Header et ob_flush

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Header et ob_flush

n°717472
Profil sup​primé
Posté le 06-05-2004 à 16:32:50  answer
 

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
mood
Publicité
Posté le 06-05-2004 à 16:32:50  profilanswer
 

n°717508
Berceker U​nited
PSN : berceker_united
Posté le 06-05-2004 à 17:01:36  profilanswer
 

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

n°717514
Profil sup​primé
Posté le 06-05-2004 à 17:05:57  answer
 

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

n°717543
Profil sup​primé
Posté le 06-05-2004 à 17:27:18  answer
 

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

n°717546
antp
Super Administrateur
Champion des excuses bidons
Posté le 06-05-2004 à 17:30:55  profilanswer
 

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
n°717547
Profil sup​primé
Posté le 06-05-2004 à 17:31:22  answer
 

bon bon ok :o

n°717556
Profil sup​primé
Posté le 06-05-2004 à 17:37:54  answer
 

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 :)

n°718306
Profil sup​primé
Posté le 07-05-2004 à 10:55:49  answer
 

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


Message édité par Profil supprimé le 07-05-2004 à 10:57:05
n°718319
boulax
Inserer phrase hype en anglais
Posté le 07-05-2004 à 11:04:21  profilanswer
 

y'a quoi a la ligne 31 ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°718327
Profil sup​primé
Posté le 07-05-2004 à 11:07:48  answer
 

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]

mood
Publicité
Posté le 07-05-2004 à 11:07:48  profilanswer
 

n°718336
Freekill
Electron libre…
Posté le 07-05-2004 à 11:11:57  profilanswer
 

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…

n°718338
Profil sup​primé
Posté le 07-05-2004 à 11:14:36  answer
 

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

n°718348
Freekill
Electron libre…
Posté le 07-05-2004 à 11:19:37  profilanswer
 

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)

n°718357
boulax
Inserer phrase hype en anglais
Posté le 07-05-2004 à 11:21:42  profilanswer
 

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.
n°718359
Profil sup​primé
Posté le 07-05-2004 à 11:21:53  answer
 

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?

n°718361
Profil sup​primé
Posté le 07-05-2004 à 11:22:47  answer
 

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 :(

n°718363
boulax
Inserer phrase hype en anglais
Posté le 07-05-2004 à 11:23:06  profilanswer
 

fais le test avant le include [:spamafote]


---------------
Posté depuis des chiottes, sales. Me gusta.
n°718372
Freekill
Electron libre…
Posté le 07-05-2004 à 11:24:26  profilanswer
 

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.

n°718376
Profil sup​primé
Posté le 07-05-2004 à 11:25:23  answer
 

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?

n°718382
Freekill
Electron libre…
Posté le 07-05-2004 à 11:26:59  profilanswer
 

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]

n°718396
Profil sup​primé
Posté le 07-05-2004 à 11:33:29  answer
 

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?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Header et ob_flush

 

Sujets relatifs
[PHP] Comment faire un timer ?[PHP] Utilisation de la fonction array_multisort.
[PHP] - Utilisation du switch [-Resolu-][Résolu] [FLASH + PHP] variable.load .... ???????
[php] Mise en forme possible dans un enregistrement? [RESOLU][PHP]Portée/héritage de session dans nouvelle fenêtre
[PHP/MYSQL] Afficher une table dans un tableau avec édition[PHP][EXCEL]Ecrire en vietnamiens
Php: comparaison de date?[PHP] Se connecter et lister une BD distante
Plus de sujets relatifs à : [PHP] Header et ob_flush


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR