Maison > php教程 > PHP开发 > Parlons brièvement de la différence entre ob_flush et flush en php

Parlons brièvement de la différence entre ob_flush et flush en php

高洛峰
Libérer: 2016-12-22 16:34:19
original
1134 Les gens l'ont consulté

La description de ob_flush/flush dans le manuel est qu'ils actualisent tous les deux le tampon de sortie et doivent être utilisés ensemble, cela va donc semer la confusion chez de nombreuses personnes...

En fait, les objets d'opération des deux sont différents. Dans certains cas, flush ne fait rien du tout..

La série de fonctions ob_* exploite le tampon de sortie de PHP lui-même.

Ainsi, ob_flush actualise le tampon de PHP lui-même.

À proprement parler, le flush n'a un effet réel que lorsque PHP est installé en tant que module Apache (gestionnaire ou filtre).

Sous le module sapi d'Apache, flush appellera indirectement l'API d'Apache en appelant le pointeur de fonction membre flush de sapi_module : ap_rflush actualise le tampon de sortie d'Apache. Bien sûr, le manuel indique également qu'il existe d'autres modules d'Apache. apache. Cela peut changer le résultat de cette action..

Certains modules Apache, tels que mod_gzip, peuvent effectuer eux-mêmes une mise en cache de sortie, ce qui empêchera les résultats générés par la fonction flush() d'être envoyés au navigateur client immédiatement. Même les navigateurs mettent en cache le contenu reçu avant de l’afficher. Par exemple, le navigateur Netscape met le contenu en cache jusqu'à ce qu'il reçoive un saut de ligne ou le début d'une balise HTML, et n'affiche pas un tableau entier tant qu'il n'a pas reçu une balise .

Certaines versions de Microsoft Internet Explorer ne commenceront à afficher la page qu'après avoir reçu 256 octets, donc des espaces supplémentaires doivent être envoyés pour permettre à ces navigateurs d'afficher le contenu de la page. Par conséquent, l'ordre correct pour utiliser les deux est le suivant : d'abord ob_flush, puis flush. Bien sûr, sous d'autres sapi, vous ne pouvez pas appeler flush, mais afin de garantir la portabilité de votre code, il est recommandé de les utiliser ensemble.

Il y a quelques considérations particulières dans l'utilisation de flush et ob_flush, qui empêchent le vidage du tampon de sortie.

1. L'ordre correct de flush et ob_flush, ob_flush d'abord puis flush, comme suit :
ob_flush();
flush();
Si le système d'exploitation de le serveur web est le système Windows, il n'y aura aucun problème si l'ordre est inversé ou si ob_flush() n'est pas utilisé. Mais sur les systèmes Linux, le tampon de sortie ne peut pas être vidé.

2. Avant d'utiliser ob_flush(), assurez-vous que la taille du contenu précédent est suffisante pour atteindre 4069 caractères.

Le Output_buffering de certains serveurs Web est par défaut de 4069 caractères ou plus, c'est-à-dire que le contenu de sortie doit atteindre 4069 caractères avant que le serveur ne vide le tampon de sortie afin de garantir que le vidage est efficace. il est préférable de précéder la fonction ob_flush(). Il y a les instructions suivantes :
print str_repeat(" ", 4096);
pour s'assurer que la valeur output_buffering est atteinte.

<?php
for ($i=1; $i<20; $i++)
{
echo "<font size=&#39;10&#39; color=&#39;red&#39;>".$i."</font>";
echo &#39;<br>&#39;;
ob_flush();
flush();
sleep(1);
}
ob_end_flush();
?>
Copier après la connexion

Pour plus d'articles sur la différence entre ob_flush et flush en PHP, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal