Affichage durant une boucle

Résolu
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008 - 20 nov. 2008 à 00:33
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008 - 20 nov. 2008 à 16:44
Amis développeurs bonjour!

Je suis en train de programmer un chat basé sur un serveur développé en c, et un client développé en php qui se connecte au serveur via des sockets.
La connection, l'envoi de message et le retrait de message se fait sans aucun soucis tout fonctionne!
Tout sauf un détail qui est, je trouve, de taille.
En effet, pour récupérer les messages du chat, j'utilise une boucle infinie (qui se termine à la deconnection de l'utilisateur ou à la coupure du serveur).

Mon problème est le suivant: Les messages lus dans cette boucle ne sont affichés qu'une fois que la boucle est arretée. Il me semble de mémoire (je ne pourrais pas mettre ma main au feu qu'il s'agisse de scripts php) avoir vu des scripts executant des boucles et affichant le contenu de la boucle progressivement et non à la fin de cette derniere.
En gros j'aimerais obtenir la même chose que si je lançais mon script php depuis un invite de commande linux.

Petite précision toutefois, je fais tourner mes scripts sur deux serveurs dediés que je loue, donc je peux tout à fait changer la configuration de php si besoin. Ou est-ce plus simplement une fonction que j'aurais mal utilisé?

A titre d'info toutefois, voici ma boucle:

while(true)
                {
                if(!socket_last_error($socket)){
                    if($input = socket_read($socket, $port))
                            {
                            echo $input.'
';
                            flush();
                            }
                    }
                }

Merci mille fois d'avance
Bonne journée,

Benjamin

1 réponse

benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
20 nov. 2008 à 16:44
En fait c'est bon, j'ai trouvé la réponse tout seul :)

Le flush ne suffit pas à vider le buffer dans le cas de lecture continue d'un flux, il faut ajouter un ob_flush(); en plus du flush();
Bon à savoir...
3
Rejoignez-nous