76 votes

Tampon PHP ob_flush () vs flush ()

Quelle est la différence entre ob_flush() et flush() et pourquoi dois-je appeler?

L' ob_flush() de référence dit "Cette fonction va envoyer le contenu de la mémoire tampon de sortie (le cas échéant).".

L' flush() référence dit

Bouffées de chaleur de l'écriture tampons de PHP et tout ce backend PHP (CGI, un serveur web, etc).

et poursuit-il

peut ne pas être en mesure de remplacer le tampon de régime de votre serveur web.

Donc, me semble que je pouvais ob_flush() de tous les temps. Cependant, j'obtiens des résultats étranges quand je le fais. Quelqu'un pourrait-il expliquer en termes simples ce qui se passe ici?

74voto

mario Points 76989

ob_flush envoie une demande à un initié de la mémoire tampon. Il peut y avoir plusieurs imbriquée ob_starts() dans tout script PHP. ob_flush passe le contenu actuel de la couche supérieure.

PHP peut elle-même (à sa discrétion) de tampon de sortie. Cela dépend du backend. Mais généralement, FastCGI a une prise de tampon sur son propre. Par conséquent, flush() doit être invoquée comme bien d'envoyer du contenu en cours sur le serveur.

Et maintenant, le serveur web peut lui-même mettre en œuvre un autre schéma de mise en mémoire tampon (mod_deflate ou de filtrage de contenu), qui vous ont aucune influence sur. Mais ce n'est que rarement, car il doit être configuré spécifiquement.

De toute façon, utiliser les deux.

33voto

Dan Grossman Points 31514

ob_flush supprime les tampons de sortie que vous avez créés avec une fonction telle que ob_start

flush purge la sortie mise en mémoire tampon du script PHP lui-même à son appelant

24voto

ob_flush() est un haut-niveau de la chasse d'eau. Il bouffées de haut niveau tampons et met tout le contenu dans le faible niveau de, des tampons internes prêt à envoyer.

  • Notez que l' ob_ famille de fonctions créer des piles de tampons, de sorte que seulement aveuglément la rédaction ob_flush() partout va vous donner des "résultats étranges" si le code a été écrit pour prendre avantage de cette de les empiler.

flush() est un bas niveau de chasse, l'instruction PHP pour vider son interne, faible niveau de tampons de données.

Ci-dessous encore, il y aura socket-layer tampons; en dessous, il y a la couche réseau tampons. Et, au niveau le plus bas, la file d'attente d'électrons de descendre le câble de données.

11voto

stillstanding Points 10346

Je suppose que c'est en rapport à votre précédente question. Le grand avantage de l'utilisation de tampon de sortie est quand il est utilisé à côté de la compression de données. Si vous n'êtes pas à l'aide de ob_gzhandler, il n'y a rien à gagner. flush seront les seuls à engager quelle que soit la sortie de données est encore sur le serveur. Avec ob_start et ses homologues ob_flush, ob_end_clean et ob_end_flush, ce qui est en attente d'être compressé (regardez - flush et ob_flush comme se référant à différents seaux - ob envoie des données à l' flush, flush envoie des données vers le navigateur peut ne pas être précis, mais c'est l'idée) va être emballé et envoyé au client.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X