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

  FORUM HardWare.fr
  Programmation
  PHP

  Afficher une page morceau par morceau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher une page morceau par morceau

n°1107079
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 03-06-2005 à 15:13:51  profilanswer
 

Bonjour
 
Je cherche une astuce qui me permettrait d'afficher une page PHP au fur et à mesure que le script s'execute côté serveur. Mon script traite des fichiers et peut durer une trentaine de secondes. Je veux que l'utilisateur puisse lire quelque chose comme :
 
Fichier 1 traité
Fichier 2 traité
... Une ligne s'ajoutant à chaque fois.
 
J'ai cherché du côté de la gestion du buffer mais rien ne permet de forcer l'envoi d'une partie de la page.
 
 
Disons que je travaille sur le script suivant :  
 

Code :
  1. for ($i=0;$i<50;$i++) {
  2.    echo "<br>Fichier ".$i." Traité";
  3.    sleep(1); // pause d'une seconde
  4. }


 
 
Voila si vous voyez une solution :p

mood
Publicité
Posté le 03-06-2005 à 15:13:51  profilanswer
 

n°1107084
GaSPaRD77
Posté le 03-06-2005 à 15:16:30  profilanswer
 

peut être en fesant un ob_flush() avant ton sleep ...

n°1107136
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 03-06-2005 à 15:51:20  profilanswer
 

GaSPaRD77 a écrit :

peut être en fesant un ob_flush() avant ton sleep ...


 
J'ai testé, mais ça ne fonctionne pas.  
 
Dites moi si je me trompe, mais j'ai l'impression que la gestion du buffer par ob_start(), ob_flush() etc ne permet pas de forcer l'envoi de la page vers le client, uniquement de le retenir ou le modifier.

n°1107141
benamoubea​ch
tivuplai
Posté le 03-06-2005 à 15:53:16  profilanswer
 

ob_start();
blablabla
$page = ob_get_contents();
ob_end_flush();
echo $page; // blablabla
 
ptet ca t'aidera

n°1107166
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 03-06-2005 à 16:03:03  profilanswer
 

benamoubeach a écrit :

ob_start();
blablabla
$page = ob_get_contents();
ob_end_flush();
echo $page; // blablabla
 
ptet ca t'aidera


 
Merci pour ton aide, mais ça ne libère pas l'envoi de la page au client. Le ob_end_flush() laisse la page côté serveur jusqu'à la fin de l'execution du script. Je suppose que c'est uniquement quand les pages sont volumineuses qu'un envoit se fait avant la fin du chargement de la page.
 
Voila ce que j'ai testé :

Code :
  1. for ($i=0;$i<500;$i++) {
  2.            ob_start();
  3.            echo "blablabla";
  4.            $page = ob_get_contents();
  5.            ob_end_flush();
  6.            echo $page;
  7.            sleep(1);
  8.    }


 
Existerait-il une fonction php ou un header qui définit la taille de découpage de la page entre deux transmissions de données ?

n°1107171
benamoubea​ch
tivuplai
Posté le 03-06-2005 à 16:05:23  profilanswer
 

sinon tu peux le faire en javascript :) avec un setTimeout. Sinon je ne pense pas que tu puisses

n°1107175
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 03-06-2005 à 16:08:09  profilanswer
 

benamoubeach a écrit :

sinon tu peux le faire en javascript :) avec un setTimeout. Sinon je ne pense pas que tu puisses


 
Le temps entre deux affichages dépend de la vitesse du traitement du fichier par le serveur, donc le javascript ça serait un peu de l'arnaque :p

n°1107179
benamoubea​ch
tivuplai
Posté le 03-06-2005 à 16:09:06  profilanswer
 

non , car le settimeout commence a partir du moment ou la page a été totalement chargée :)
un mec qui a bossé 2 ans en javascript me l'a dit donc j'ai confiance :)

n°1107194
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 03-06-2005 à 16:16:48  profilanswer
 

benamoubeach a écrit :

non , car le settimeout commence a partir du moment ou la page a été totalement chargée :)
un mec qui a bossé 2 ans en javascript me l'a dit donc j'ai confiance :)


 
Oui et il a raison :p Sauf que je souhaite agir sur le chargement de la page. Le sleep(1) que je donne dans mon exemple sera remplacé par un temps qu'on ne connaît pas à l'avance, et que javascript ne pourra pas connaître à l'avance.

n°1107233
benamoubea​ch
tivuplai
Posté le 03-06-2005 à 16:30:05  profilanswer
 

ah pardon j'avais pas bien compris ce que tu voulais faire :)

mood
Publicité
Posté le 03-06-2005 à 16:30:05  profilanswer
 

n°1114531
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 09-06-2005 à 17:42:59  profilanswer
 

J'ai toujours besoin d'une solution, je prends toutes vos idées :)

n°1114552
ritzle
Posté le 09-06-2005 à 17:49:05  profilanswer
 

écris plein de chose entre chaque fichier  :)

n°1114624
nulloz
Posté le 09-06-2005 à 18:31:06  profilanswer
 

flush() tout court non ?

n°1118402
lukos
ZZZzzzzzZZZzzzzzzzzz
Posté le 13-06-2005 à 15:20:06  profilanswer
 

nulloz a écrit :

flush() tout court non ?


 
 
Merci beaucoup Nullzod, je comprends pas comment j'ai pu passer à côté de cette fonction dans la documentation php :D
 
Ca marche presque à la perfection, voici la page pour mon exemple :
 

Code :
  1. ob_start();
  2.    for ($i=0;$i<500;$i++) {
  3.            echo "<br>blablabla";
  4.            flush();
  5.            ob_flush();
  6.            sleep(1);
  7.    }
  8.    ob_end_flush();


 
 
Je vais tout de suite me mettre au boulot :p

n°1145645
super-tupa​pau
Posté le 10-07-2005 à 18:45:10  profilanswer
 

j'ai essayé le code de lukos sur mon serveur local et chez moi ca marche pas ? les lignes 'blablabla' s'affiche toute en meme tant!
 
Ma config: serveur apache2, php 4.3, mysql 4.0. j'ai essayé avec firefox 1.0.2 et konqueror et rien? Je doit peut-être activer quelque chose mais où?


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

  Afficher une page morceau par morceau

 

Sujets relatifs
Comment ouvrir une nouvelle page[HTML]Comment maitre un mot de passe dans une page html simple.
Redirection de pagetransfert FTP automatique via page Web ???
Récupérer des url depuis une page[vb.net] Génération et mise en page document WORD
[RESOLU] Impression d'état : une page vierge en rab !textarea, mise en page?...
Comment actualisé une pageUn player mp3 pour page web
Plus de sujets relatifs à : Afficher une page morceau par morceau


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