Position actuelle: Accueil> Derniers articles> L'utilisation de flush () prend-elle effet? Peut-être qu'il y a quelque chose qui ne va pas avec la configuration de votre serveur Web

L'utilisation de flush () prend-elle effet? Peut-être qu'il y a quelque chose qui ne va pas avec la configuration de votre serveur Web

gitbox 2025-09-20
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Voici quelques choses qui ne sont pas liées au contenu de l&#39;article PHP Code</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Initialiser l&#39;environnement...\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// L&#39;article commence</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>

<h1>utiliser </span><span><span class="hljs-title function_ invoke__">flush</span></span><span>() Pas efficace?Probablement le vôtre Web Il y a un problème avec la configuration du serveur</h1>

<p>exister PHP En cours de développement,`</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>()` 函数常被utiliser来立即将输出发送到客户端,Au lieu d&#39;attendre que le script soit exécuté avant de le sortir uniformément。它exister实现长时间运行的任务、Affichage du journal en temps réel、或者进度条更新时非常有utiliser。Cependant,De nombreux développeurs rencontreront un problème:明明调utiliser了 <code></span><span><span class="hljs-title function_ invoke__">flush</span></span><span>()

2. Tampon du serveur Web

Même si la sortie PHP a été rincée, les serveurs Web (comme Apache, Nginx) peuvent continuer à mettre en cache la sortie jusqu'à ce que le tampon soit plein ou que le script soit terminé. Situations courantes:

  • Apache : mod_deflate ou modules de compression mod_gzip sortie de retard. Vous pouvez essayer de désactiver la fonction de compression de ces modules ou ajuster la configuration.
  • Nginx : la compression GZIP est activée par défaut, et Proxy_Buffering est présent, ce qui peut également empêcher la sortie immédiate. proxy_buffering off; peut être défini dans le bloc d'emplacement.

3. Comportement du navigateur

Certains navigateurs attendront une certaine quantité de données avant de commencer à rendre la page, surtout lorsque la sortie est très petite. Pratiques courantes:

  • Envoyez suffisamment de caractères Whitespace avant de sortir le contenu pour permettre au navigateur de déclencher le rendu.
  • Endire HTTP avant la sortie: En-tête ('Content-Encoding: Aucun'); empêche le retard causé par la compression.

4. Exemple complet
<span><span><?php</span></span><span>
</span><span><span>// Désactiver la tampon de sortie PHP</span></span><span>
</span><span><span>while</span></span> <span>(</span> <span><span class="function_ invoke__">ob_get_level</span></span> <span>()></span> <span><span>0</span></span> <span>) {
    </span><span><span class="function_ invoke__">ob_end_flush</span></span> <span>();
}

</span><span><span>écho</span></span><span> </span><span><span class="function_ invoke__">str_repeat</span></span> <span>(</span> <span><span>""</span></span> <span>,</span> <span><span>1024</span></span> <span>);</span> <span><span>// Envoyez suffisamment de données pour déclencher le rendu du navigateur</span></span><span>

</span><span><span>pour</span></span> <span>(</span> <span><span>$ i</span></span> <span>=</span> <span><span>1</span></span> <span>;</span> <span><span>$ i</span></span> <span><=</span> <span><span>5</span></span> <span>;</span> <span><span>$ i</span></span> <span>++) {
    </span><span><span>écho</span></span><span> </span><span><span>"Étape de traitement <span>$ i</span></span></span> <span>...<br> \ n ";
    </span><span><span class="function_ invoke__">flush</span></span> <span>();
    </span><span><span class="function_ invoke__">sommeil</span></span> <span>(</span> <span><span>1</span></span> <span>);
}
</span><span><span>?></span></span><span>
</span></span><p>Avec la méthode ci-dessus, vous pouvez vous assurer que <span class="fun">Flush ()</span> peut prendre effet normalement dans la plupart des cas. Cependant, n&#39;oubliez pas que la latence de sortie peut être le résultat de l&#39;influence combinée de plusieurs liens de PHP, serveur Web et navigateur, et doit être vérifié par calque.</p> <span><span><?php</span></span><span>
</span><span><span>// la fin de l&#39;article, la fin du contenu n&#39;est pas liée au contenu</span></span><span>
</span><span><span>écho</span></span><span> </span><span><span>"L&#39;article est chargé. \ N"</span></span> <span>;</span> <span><span>?></span></span><span>
</span></span></div></div>