Echo 'chaîne' alors que chaque longue boucle d'itération (flush () ne fonctionne pas)
J'ai une boucle qui prend beaucoup de temps à s'exécuter, et je veux que le script pour afficher quelque chose à chaque fois que la boucle d'itération est effectuée.
echo "Hello!";
flush();
for($i = 0; $i < 10; $i ++) {
echo $i;
//5-10 sec execution time
flush();
}
Ce n'affiche pas les échos jusqu'à ce que le script est terminé. Quel est le problème?
source d'informationauteur Nyxynyxx
Vous devez vous connecter pour publier un commentaire.
De Manuel PHP:
flush() peut ne pas être en mesure de remplacer le tampon de régime de votre serveur web et il n'a pas d'effet sur le côté client de la mémoire dans le navigateur. Il également n'a pas d'incidence sur le PHP de l'utilisateur, le tampon de sortie du mécanisme. Cela signifie que vous aurez à appeler à la fois ob_flush() et flush() pour vider l'ob tampons de sortie si vous utilisez ceux-ci.
-ou - vous pouvez rincer et de désactiver la mise en mémoire Tampon
essayer cette
Juste remarquer que de cette façon, vous êtes en fait la désactivation de la mémoire tampon de sortie de votre script. Ainsi, si vous essayez de "ob_end_flush ()" après que vous aurez un avertissement qu'il n'y a pas de tampon à proximité.
Assurez-vous de faire d'abord:
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
@ob_end_clean();
et puis juste
flush();
chaque fois que vous devez à la sortie de votre echo es pour le navigateur.En général, le comportement désiré n'est pas possible est un déterministe/manière stable en utilisant uniquement du PHP et de l'HTML.
Si et comment un navigateur rend partielle d'une page dépend du navigateur, les procurations et les caches. Ainsi, même si la substance fonctionne sur votre machine de test, il est probable, qu'il n'est pas sur votre système de production.
La bibliothèque xAjax fournit un bien-solution intégrée pour gérer AJAX mises à jour de style avec PHP. Alors que xAjax peut-être mort comme un projet (au moins maintenant), il fonctionne toujours très bien.
Vous pouvez essayer d'utiliser ob_flush() parfois, les deux sont nécessaires pour travailler.
Assurez-vous également de la sortie d'un type de Contenu de l'en-tête première. Le rinçage ne fonctionne pas pour moi sans: