Maison développement back-end tutoriel php Explication détaillée de la différence d'utilisation entre les fonctions flush() et ob_flush() en php

Explication détaillée de la différence d'utilisation entre les fonctions flush() et ob_flush() en php

Jun 24, 2017 am 10:56 AM
php 函数 区别 用法

1. buffer ---- flush()

buffer est un espace d'adressage mémoire. La taille par défaut du système Linux est généralement de 4096 (1 Ko), soit une page mémoire. . Il est principalement utilisé pour stocker des zones de transfert de données entre des appareils ayant des vitesses non synchronisées ou des appareils ayant des priorités différentes. Grâce au tampon, les processus peuvent moins s'attendre les uns les autres. Voici un exemple plus général. Lorsque vous ouvrez un éditeur de texte pour modifier un fichier, chaque fois que vous saisissez un caractère, le système d'exploitation n'écrit pas immédiatement le caractère directement sur le disque, mais l'écrit d'abord dans le tampon lors de l'écriture. un tampon est plein, les données du tampon seront écrites sur le disque. Bien entendu, lorsque la fonction du noyau flush() est appelée, il est obligatoire de réécrire les données sales du tampon sur le disque.
De même, lorsque echo et print sont exécutés, la sortie n'est pas immédiatement envoyée au navigateur client pour être affichée via TCP, mais les données sont écrites dans le tampon php. Le mécanisme php output_buffering signifie qu'une nouvelle file d'attente est établie avant le tampon TCP et que les données doivent passer par la file d'attente. Lorsqu'un tampon php est plein, le processus de script transmettra les données de sortie dans le tampon php au noyau du système et les transmettra au navigateur via TCP pour affichage. Par conséquent, les données seront écrites à ces endroits dans la séquence echo/pring -> php buffer -> tcp buffer -> browser


2. )
Par défaut, le tampon php est activé et la valeur par défaut du tampon est 4096, soit 1 Ko. Vous pouvez trouver la configuration de output_buffering dans le fichier de configuration php.ini. Lorsque echo, print, etc. génèrent des données utilisateur, les données de sortie seront écrites dans php output_buffering jusqu'à ce que output_buffering soit plein, les données seront envoyées au navigateur via TCP. . montrer. Vous pouvez également activer manuellement le mécanisme php output_buffering via ob_start(), de sorte que même si la sortie dépasse 1 Ko de données, les données ne sont pas réellement transmises à TCP et transmises au navigateur, car ob_start() définit le php espace tampon à une taille suffisamment grande . Les données ne seront pas envoyées au navigateur client tant que le script n'est pas terminé ou que la fonction ob_end_flush n'est pas appelée.

L'utilisation de ces deux fonctions est probablement le problème le plus déroutant pour de nombreuses personnes. L'explication des deux fonctions dans le manuel n'est pas non plus claire, et leurs différences ne sont pas clairement soulignées. les fonctions des deux sont les mêmes : vider le cache de sortie. Mais dans le code au début de notre article, si flush() est remplacé par ob_flush(), le programme ne s'exécutera plus correctement. Évidemment, il y a une différence entre eux. Sinon, il suffirait d'indiquer directement dans le manuel que l'un d'eux est un alias d'une autre fonction. Il n'est pas nécessaire de les expliquer séparément. Alors, quelle est la différence entre eux ?
Lorsque la mise en cache n'est pas activée, le contenu généré par le script est dans l'état en attente de sortie côté serveur. flush() peut immédiatement envoyer le contenu en attente de sortie au client.

Une fois la mise en cache activée, le contenu généré par le script est stocké dans le cache de sortie À l'heure actuelle, aucun contenu n'attend la sortie si vous utilisez directement flush(). , il n'enverra aucun message au contenu du client. La fonction de ob_flush() est de retirer le contenu initialement stocké dans le cache de sortie et de définir sur l'état de sortie en attente, mais il ne sera pas envoyé directement au client Dans ce cas, vous en avez besoin. Pour utiliser ob_flush() d'abord, puis en utilisant flush(), le client peut immédiatement obtenir la sortie du script.

3. L'ordre correct de flush et ob_flush est, ob_flush d'abord puis flush, comme suit :
ob_flush();
flush();
Si le serveur Web Si le système d'exploitation est Windows, il n'y aura aucun problème si l'ordre est inversé ou si ob_flush() n'est pas utilisé. [À vérifier ] Cependant, le tampon de sortie ne peut pas être actualisé sur les systèmes Linux.

4. Fonction de mise en mémoire tampon de sortie
bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
Activez le mécanisme output_buffering. Une fois activée, la sortie du script n'est plus envoyée directement au navigateur, mais est temporairement écrite dans la zone mémoire tampon PHP.
php active le mécanisme output_buffering par défaut, mais en appelant la fonction ob_start(), la valeur output_buffering des données est étendue à une valeur suffisamment grande. Vous pouvez également spécifier $chunk_size pour spécifier la valeur de output_buffering. La valeur par défaut de $chunk_size est 0, ce qui signifie que les données du tampon php ne seront envoyées au navigateur qu'à la fin du script. Si vous définissez la taille de $chunk_size, cela signifie que tant que la longueur des données dans le tampon atteint cette valeur, les données dans le tampon seront envoyées au navigateur.
Bien sûr, vous pouvez traiter les données dans le tampon en spécifiant $ouput_callback. Par exemple, la fonction ob_gzhandler compresse les données dans le tampon puis les envoie au navigateur.
Le troisième paramètre : s'il faut vider le cache, facultatif, la valeur par défaut est true, s'il est défini sur false, le cache ne sera pas vidé avant la fin de l'exécution du script.
ob_get_contents
Obtenez une copie des données dans le tampon php. Il convient de noter que vous devez appeler cette fonction avant l'appel de la fonction ob_end_clean(), sinon ob_get_contents() renvoie un caractère nul.

Vous pouvez utiliser ob_get_contents() pour obtenir les données mises en cache par le serveur sous la forme d'une chaîne
Utilisez ob_end_flush() pour afficher les données mises en cache et fermer le cache.
L'utilisation de ob_end_clean() effacera silencieusement les données mises en cache sur le serveur sans aucune donnée ni autre action.
Les caches côté serveur sont empilés, ce qui signifie qu'après avoir activé ob_start() et avant de le fermer, vous pouvez également activer un autre cache ob_start() à l'intérieur.

Mais vous devez également vous assurer que le nombre d'opérations pour désactiver le cache est le même que le nombre d'opérations pour activer le cache.
ob_start() peut spécifier une fonction de rappel pour gérer les données du cache Si un ob_start() est imbriqué dans un autre ob_start(), nous supposons que l'extérieur. le nombre d'ob_start() de la couche est A et le numéro d'ob_start() de la couche interne est B. Ils ont chacun une fonction de rappel appelée functionA et functionB. Ensuite, lorsque les données du cache B sont sorties, elles seront traitées. par la fonction de rappel funcitonB, puis transmis à la fonction de rappel externe functionA pour le traitement, puis peut être envoyé au client.

De plus, le manuel indique que pour certains serveurs Web, comme Apache, l'utilisation de la fonction de rappel peut modifier le répertoire de travail actuel du programme. La solution consiste à modifier manuellement le répertoire de travail dans la fonction de rappel. , en utilisant La fonction chdir ne semble pas être rencontrée souvent. N'oubliez pas de consulter le manuel lorsque vous la rencontrez.

ob_end_flush et ob_end_clean
Les deux fonctions sont quelque peu similaires, toutes deux désactivent le mécanisme ouptu_buffering. Mais la différence est que ob_end_flush vide uniquement (vide/envoie) les données du tampon php vers le navigateur client, tandis que ob_clean_clean efface (efface) les données dans le tampon php mais ne les envoie pas au navigateur client.

Avant l'appel de ob_end_flush, les données dans le tampon php existent toujours et ob_get_contents() peut toujours obtenir une copie des données dans le tampon php.

Après avoir appelé ob_end_flush(), ob_get_contents() obtient une chaîne vide et le navigateur ne peut pas recevoir la sortie, c'est-à-dire qu'il n'y a pas de sortie.

Vous pouvez utiliser ob_get_contents() pour obtenir les données mises en cache côté serveur sous la forme d'une chaîne, et utiliser ob_end_flush() pour afficher les données mises en cache et fermer le cache.
L'utilisation de ob_end_clean() effacera silencieusement les données mises en cache sur le serveur sans aucune donnée ni autre action.
Les caches côté serveur sont empilés, ce qui signifie qu'après avoir activé ob_start() et avant de le fermer, vous pouvez ouvrir un autre cache ob_start() à l'intérieur. Cependant, vous devez également vous assurer qu'il existe autant d'opérations pour désactiver le cache que d'opérations pour activer le cache.
ob_start() peut spécifier une fonction de rappel pour traiter les données mises en cache. Si un ob_start() est imbriqué dans un autre ob_start(), nous supposons que l'ob_start() externe a le numéro A et le numéro interne ob_start() ). est B. Ils ont chacun une fonction de rappel, une fonction A et une fonction B. Ensuite, lorsque les données du cache B sont sorties, elles seront d'abord traitées par la fonction de rappel funcitonB, puis transmises à la fonction de rappel externe functionA pour traitement avant de pouvoir le faire. être envoyé au client.

De plus, le manuel indique que pour certains serveurs Web, comme Apache, l'utilisation de la fonction de rappel peut modifier le répertoire de travail actuel du programme. La solution consiste à modifier manuellement le répertoire de travail dans la fonction de rappel. , en utilisant La fonction chdir ne semble pas être rencontrée souvent. N'oubliez pas de consulter le manuel lorsque vous la rencontrez.

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Deepseek Quelle est la différence entre la version R1 et V3 Deepseek Quelle est la différence entre la version R1 et V3 Feb 19, 2025 pm 03:24 PM

Deepseek: Une comparaison approfondie entre les versions R1 et V3 vous aide à choisir le meilleur assistant d'IA! Deepseek compte déjà des dizaines de millions d'utilisateurs et sa fonction de dialogue AI a été bien accueillie. Mais êtes-vous confus lorsque vous faites face aux versions R1 et V3? Cet article expliquera les différences entre les deux en détail pour vous aider à choisir la version la plus appropriée. La différence de base entre DeepseEkr1 et V3 version: dispose de l'objectif de conception de la version V3 se concentre sur le raisonnement de problèmes complexe, l'analyse logique profonde, le modèle multifonctionnel de grande langue, en se concentrant sur l'évolutivité et l'architecture d'efficacité et l'architecture d'optimisation d'apprentissage du renforcement des paramètres, l'échelle de paramètre 1.5 Des milliards à 70 milliards d'architecture d'experts hybrides MOE, les paramètres totaux sont élevés que 671 milliards, chaque jeton est activé de 37 milliards

Résumé des FAQ pour une utilisation profonde Résumé des FAQ pour une utilisation profonde Feb 19, 2025 pm 03:45 PM

Deepseekai Tool User Guide et FAQ Deepseek est un puissant outil intelligent AI. FAQ: La différence entre les différentes méthodes d'accès: il n'y a pas de différence de fonction entre la version Web, la version de l'application et les appels API, et l'application n'est qu'un wrapper pour la version Web. Le déploiement local utilise un modèle de distillation, qui est légèrement inférieur à la version complète de Deepseek-R1, mais le modèle 32 bits a théoriquement une capacité de version complète de 90%. Qu'est-ce qu'une taverne? SillyTavern est une interface frontale qui nécessite d'appeler le modèle AI via l'API ou le olllama. Qu'est-ce que la limite de rupture

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Bitcoin a-t-il des actions? Bitcoin a-t-il des actions? Mar 03, 2025 pm 06:42 PM

Le marché des crypto-monnaies est en plein essor et Bitcoin, en tant que leader, a attiré l'attention de nombreux investisseurs. Beaucoup de gens sont curieux: Bitcoin a-t-il des actions? La réponse est non. Le Bitcoin lui-même n'est pas un stock, mais les investisseurs peuvent indirectement investir dans des actifs liés à Bitcoin via divers canaux, qui seront expliqués en détail dans cet article. Alternatives à l'investissement de Bitcoin: Au lieu d'investir directement dans Bitcoin, les investisseurs peuvent participer au marché Bitcoin par: Bitcoin ETF: Il s'agit d'un fonds négocié sur le marché des échanges d'actions, dont le portefeuille d'actifs contient des contrats à terme Bitcoin ou Bitcoin. Il s'agit d'une option relativement pratique pour les investisseurs habitués aux investissements en actions, sans avoir à tenir directement le bitcoin. Bitcoin Mining Company Stocks: Les activités de ces sociétés sont l'extraction de Bitcoin et tient le bitcoin

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Quelle est la différence entre le trading pré-commercial et après-marché? Explication détaillée des différences entre le pré-commercialisation et le trading après le marché Quelle est la différence entre le trading pré-commercial et après-marché? Explication détaillée des différences entre le pré-commercialisation et le trading après le marché Mar 03, 2025 pm 11:54 PM

Dans les marchés financiers traditionnels, le commerce pré-commercial et après-vente fait référence aux activités de négociation en dehors de la période de négociation régulière. Bien que le marché des crypto-monnaies se négocie 24 heures sur 24, les plates-formes de trading comme Bitget offrent également des fonctionnalités similaires, en particulier certaines plateformes complètes qui échangent des actions et des crypto-monnaies en même temps. Cet article clarifiera les différences dans le trading pré-commercial et après-vente et explorera son impact sur le prix de la devise. Quatre différences majeures entre les échanges pré-commerciaux et après le marché: les principales différences entre les périodes de négociation pré-commercialisation et après le marché sont en quatre aspects: le temps de négociation, la liquidité, les fluctuations des prix et le volume de trading: le temps de négociation: les échanges pré-marché se produisent avant les débuts officiels de négociation, et le commerce après le marché est entraîné après les extrémités régulières. Liquidité: La liquidité du trading pré et après les heures

See all articles