PHP Flush / ob_flush ne fonctionne pas
J'ai essayé plusieurs tentatives d'obtenir ma couleur et ob_flush de travail. J'ai essayé de réglage de l'ini pour permettre la mise en mémoire tampon, j'ai essayé plusieurs différentes fonctions que j'ai trouvé en ligne pour le tampon de sortie, et rien de cela n'est de travail. Le script veut attendre jusqu'à ce qu'il est tout à fait jusqu'à ce qu'elle echos de sortie. Voici le script que j'ai jusqu'à présent
ob_start();
//Login User
echo 'Logging in to user<br>';
ob_flush();
flush();
$ch = curl_init("http://www.mysite.com/login/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=$user&pass=$pass");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies/$cookie");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies/$cookie");
$output = curl_exec($ch);
curl_close($ch);
ob_flush();
flush();
//Update Status
echo 'Updating Status<br>';
ob_flush();
flush();
$ch = curl_init("http://www.mysite.com/update/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "status=$status");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies/$cookie");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies/$cookie");
$output = curl_exec($ch);
curl_close($ch);
ob_flush();
flush();
Je veux faire écho à ce qu'il est en train de faire, puis exécutez la fonction, puis l'écho de quelque chose d'autre, puis faire une autre fonction. Je veux que tous les tampons pour être rincé et fait écho en temps réel sur le navigateur.
source d'informationauteur JakeSmith
Vous devez vous connecter pour publier un commentaire.
L'idée ici est de désactiver le tampon de sortie, de ne pas l'activer. Comme son nom l'indique, le tampon de sortie va enregistrer la sortie de la mémoire et de l'afficher à la fin du script, ou lorsqu'il est explicitement demandé.
Cela étant dit, vous n'avez pas à vider explicitement pour chaque sortie. Utiliser les éléments suivants, avant d'afficher n'importe quelle sortie, et ensuite, vous n'aurez pas la peine de rinçage à chaque fois que vous l'écho de quelque chose:
Par exemple:
Sera de sortie, de 0 à 4, avec chaque être affiché à chaque seconde.
Je voulais juste écrire un petit mot de ce que j'ai observé, maintenant, en 2016, des différents approché suggéré:
Les codes ci-dessus offert par netcoder et David travail pour moi dans les navigateurs suivants:
Il ne semble pas fonctionner dans les navigateurs Firefox, Safari ou IE 10 et 11.
J'ai aussi testé le code alternatif:
Qui peut être trouvé ici: http://php.net/manual/en/function.flush.php#54841
Qui semble avoir mieux actuels de soutien par tous les navigateurs:
Les implémentations de travail semblent changer d'une année à l'autre, j'ai donc voulu proposer une mise à jour de ce que j'ai trouvé moi-même travailler en ce moment.
Cette question semble afficher une beaucoup sur une recherche Google, j'ai donc voulu le mettre à jour.
C'est en septembre 2014.....
@Netcoder 's réponse fonctionne, mais Chrome est parfois encore sortie tout à la fois.
Pour résoudre ce problème, simplement ajouté un
ob_flush()
and flush()
dans le code, il sera de sortie après chaque seconde.Exemple:
J'ai eu le même problème, mais un utilisateur m'a orienté dans la bonne direction, j'ai utilisé une boucle "for" pour résoudre votre problème spécifique:
Se rapportent à La sortie exec() de ping résultat progressivement pour plus de détails.
cela fonctionne maintenant (au moins sur php 5.5)
pas besoin de dormir ou quoi que ce soit d'autre
Veuillez noter que vous devrez peut-être désactiver la compression gzip sur votre serveur web (apache ou nginx).
C'était mon problème.