2010-11-28 6 views
2

J'essaie d'afficher du contenu en temps réel à mes visiteurs en utilisant une boucle. Le problème est que le contenu est ajouté à la sortie au lieu d'être remplacé par le nouveau. Voici un exemple de code qui compte de 10 à 0. La sortie montre l'ensemble des résultats au lieu de compter à rebours. Je veux dire, je ne veux pas voir tous les nombres montrés juste chaque nombre comme le compteur va.Sortie en temps réel PHP du contenu

ob_end_flush(); 
     //start buffering 
     ob_start(); 

     echo str_pad ('', 1024); // minimum start for Safari 
     for ($i = 10; $i > 0; $i --) { 
      echo str_pad ("$i<br>\n", 8); 
      ob_flush(); 
      flush(); 
      sleep (1); 
     } 
     die(); 
+4

Voilà comment fonctionne le HTTP. Vous n'envoyez qu'une seule réponse sur une seule demande. – Gumbo

Répondre

0

Il pourrait y avoir un truc ou quelque chose (juste pensé à un ou deux), mais la meilleure façon de le faire est avec un autoupdate ajax à partir du navigateur. Comme this description du motif.

0

Nous n'avons pas fait cela en PHP, en fait en utilisant js. (avec l'aide de Stacker) vous pouvez inverser le compte

Mais je suis sûr que vous pourriez adopter, désolé si cela ne répond pas à votre question.

Demo ici sur notre site dev < link>

Vous pouvez aussi (encore une fois peut ne pas être pertinente, l'utilisation jquery pour actualiser un élément div)

2

Cela ne peut pas être réalisé avec PHP seul, à modifier ce qui est rendu dans le navigateur nécessite une intervention côté client.

Comment vous allez à propos de cette division du travail dépend de ce qui est nécessaire. Si votre code est tout cela, alors vous feriez mieux d'écrire une routine JS pour compter les nombres dans le temps. Si PHP est requis d'une autre manière pour générer les nombres, la décision doit être prise de savoir si vous pouvez diviser la génération de la mise à jour en plusieurs appels PHP ou si elle doit provenir du même PHP. appel en raison d'actions entreprises dans le cadre de cet appel.

Si le premier, vous pouvez le séparer, ce qui est la situation idéale - puis la procédure consiste à configurer les appels AJAX pour récupérer des informations mises à jour périodiquement. Si ce dernier doit provenir d'une seule page, la connexion doit rester ouverte avec le nouveau contenu généré.

Dans ce cas, pour remplacer le nouveau contenu, le code JS doit gérer cela. Soit le code s'exécute périodiquement sur la page peut vérifier le nouveau contenu et mettre à jour en conséquence, ou un petit truc peut être joué en injectant le code qui effectue la mise à jour.

L'envoi de contenu en ligne <script> qui effectue la mise à jour à la place de nouveaux éléments d'affichage fonctionne bien, si un peu en désordre, comme le navigateur reçoit le nouvel élément <script> est exécuté. C'est la seule façon dont je suis conscient qu'une push-update peut être faite sur une page web sans plugins.