Maison  >  Article  >  développement back-end  >  Solution à la mise en mémoire tampon invalide en php, c'est-à-dire

Solution à la mise en mémoire tampon invalide en php, c'est-à-dire

伊谢尔伦
伊谢尔伦original
2017-06-24 11:03:561810parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn