Affichage progressif [php]

Résolu/Fermé
bubuche87 Messages postés 41 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 janvier 2009 - 28 mars 2007 à 19:55
bubuche87 Messages postés 41 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 janvier 2009 - 26 janv. 2009 à 22:55
bonjour, je voudrai savoir si il est possible d'envoyer les donnés au navigateur en même temps que le code s'éxécute. pour vous donner un exemple, le code

echo 'hello';
sleep (10);
echo ' world';

devrait afficher "hello", puis attendre (l'avancement du programme marquerait en attente du serveur yyy) puis afficher " world"

contrairement à maintenant ou il attend que l'éxécution soit fini pour tout envoyer.

merci :D

(ce que je veux se passe dans les message d'erreur dans des boucles infinies ou la liste des erreurs s'allonge au fur et à mesure)
A voir également:

5 réponses

maxinfos Messages postés 33 Date d'inscription mercredi 6 novembre 2002 Statut Membre Dernière intervention 16 juin 2008 3
16 juin 2008 à 11:57
Il faut utiliser : flush() suivi de ob_flush() et là on peut faire une "boucle infinie" avec un sleep(int) dedans ....

Exemple :

while($run ==1) {

echo "<br />".date('H:i:s')."<br />";
flush();
ob_flush();
sleep(1);
}
1
maxinfos Messages postés 33 Date d'inscription mercredi 6 novembre 2002 Statut Membre Dernière intervention 16 juin 2008 3
16 juin 2008 à 11:10
Je cherche à faire la même chose ... UP !
0
bubuche87 Messages postés 41 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 janvier 2009 11
16 juin 2008 à 11:23
alors, j'ai tenté de le faire, et j'ai trouvé la fonction : flush.
Elle ne prend aucun paramètre, et vide les tampons de sortie.
Mais cela pose plusieurs problèmes : tout d'abord, des problèmes de performances, le fait de fait plusieurs sorite n'est pas anodin en terme de charge.
Ensuite, plus grave, on se heurte à un nouveau buffer, celui du navigateur, et là il n'existe bien sur aucune fonction php pour forcer cet affichage. Ceci dit, il existe peut être des solutions au niveau de la fonction header.

Bonne chance :)
0
bubuche87 Messages postés 41 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 janvier 2009 11
16 juin 2008 à 13:28
je sais ce que fais la fonction flush, mais il y a un petit problème : quand tu envoi des informations au navigateur, certain n'affiche pas directement ces informations : ils attendent d'avoir un certain nombre de caractères, ou que le signal de fin soit envoyé. Ceci fait un gros problème : même si les informations sont envoyée vers le navigateur, elle ne sont pas affichées directement.
Sinon, je crois qu'il est possible de modifier le fichier php.ini, pour pouvoir faire en sorte d'annuler le tampon, et ne donc plus avoir besoin de flush. Mais encore une fois, cela diminue les performances.
0
Je ressors un peu le sujet de la tombe mais bon, je voulais réagir..
Voila ta fonction :D
<?php
for($i=0;$i<10;$i++) {
	echo str_pad(".",4096);//allonger la taille du texte pour forcer l'affichage
	flush();
	ob_flush();
	sleep(1);
}
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bubuche87 Messages postés 41 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 26 janvier 2009 11
26 janv. 2009 à 22:55
merci, ça fait longtemps que je suis passé à autre chose, mais merci. Ce n'était qu'un exercice de style.

De toute façon, cette fonction permet bien d'envoyer les données au navigateur, mais celui-ci utilise son propre cache.

J'ai beaucoup progressé depuis, je fais des logiciels en c++, je donne des cours de c et par dessus tout, j'aide le plus possible les étudiants pour le php, que je maitrise bien mieux.

Merci pour ton aide en tout cas ;)
0