Buffering des programmes PHP, quelles que soient les circonstances dans lesquelles PHP est exécuté (CGI, serveur web, etc.). Cette fonction envoie toutes les sorties du programme jusqu'à présent au navigateur de l'utilisateur. La fonction
flush() n'affecte pas le mode cache du serveur ou du navigateur client. Par conséquent, les fonctions ob_flush() et flush() doivent être utilisées pour vider le tampon de sortie.
Certains programmes de serveur Web, notamment les programmes de serveur Web sous Win32, mettront toujours en cache la sortie du script jusqu'à la fin du programme avant d'envoyer les résultats au navigateur
J'ai écrit moi-même un petit exemple et je voulais l'ajouter. à la page à chaque fois. Affiche un nombre chaque seconde.
Suivez le code sur Internet :
ob_end_clean (); for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); }
ou :
for ($i=10; $i>0; $i--) { echo $i; ob_flush(); flush(); sleep(1); }
J'ai constaté que cela fonctionnait dans Firefox, mais pas dans IE. Il est 10 à chaque fois. Les nombres sont affichés ensemble, ce qui indique que la mise en mémoire tampon n'est pas efficace.
J'ai recommencé à ajuster les paramètres output_buffering dans php.ini et j'ai redémarré Apache, mais cela n'a toujours pas fonctionné.
Puis j'ai vu un passage :
Certaines versions de Microsoft Internet Explorer ne commenceront à afficher la page qu'après avoir reçu 256 octets, il faut donc envoyer quelques espaces supplémentaires pour permettre à ces navigateurs d'afficher le contenu de la page.
Le méchantnavigateur IE, le problème c'est qu'il y a trop de TMD !
Puis j'ai modifié le programme et il a fonctionné normalement :
echo str_pad('',4096); for ($i = 0; $i < 10; $i++) { echo $i; ob_flush(); flush(); sleep(1); }
Le code est le suivant :
// ob_end_flush ();//IE8下没起作用 echo str_pad(" ", 256);//IE需要接受到256个字节之后才开始显示 for($i=0;$i<18;$i++) { echo $i; flush(); sleep(1); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!