Maison développement back-end tutoriel php mécanisme de mise en mémoire tampon de la fonction ob en php

mécanisme de mise en mémoire tampon de la fonction ob en php

Jun 07, 2018 pm 05:39 PM

Cet article le présente principalement. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Lorsqu'il s'agit de buffering, c'est-à-dire de buffer, nous devons le comparer avec le cache. La simple comparaison des définitions n'a aucun sens. Pourquoi ne pas regarder ce qu'elles font. La mise en cache résout le problème de la recherche et de l'utilisation rapides des données et économise la consommation du processeur, tandis que la mise en mémoire tampon résout le problème de l'inadéquation entre le processeur à haute vitesse et les périphériques d'E/S à faible vitesse.

Parlons de l'autre protagoniste de cet article, la fonction ob ob est l'abréviation de output_buffering. Puisque la fonction ob est une fonction d'extension PHP, l'opération principale de la fonction ob est tampon php.

Après avoir brièvement évoqué les deux protagonistes de cet article, il faut revenir au sujet de départ. Comment les données sorties par la fonction echo print_r parviennent-elles au navigateur pour que l'utilisateur les voie ? Le processus réel est le suivant :

Le code est le suivant :

echo、print_r=>php output_buffering=>webServer buffer=>browser buffer=>browser display
Copier après la connexion

Nous pouvons clairement le voir depuis les fonctions echo et print_r jusqu'à l'envoi d'informations au client Deux tampons sont transmis et un tampon de navigateur est transmis côté client. Ce dont nous discutons principalement dans cet article est php output_buffering.

Utilisation du tampon lorsque la fonction ob n'est pas utilisée

Nos codes n'utilisent souvent pas du tout la fonction ob, alors utilisent-ils le tampon ? Cela dépend des paramètres php. Le tampon est contrôlé via la variable output_buffering dans php.ini. Sa valeur par défaut est off et peut être activée pour ouvrir le tampon. Après avoir appelé le tampon, même si la fonction ob n'est pas utilisée dans le programme, le code utilise effectivement le tampon. De plus, quel que soit le réglage de output_buffering dans php.ini, php en mode cli est toujours fermé par défaut.

Pourquoi c'est un tampon ? Pour faire simple, le processeur haute vitesse a traité ses propres données plus tôt et souhaite les transmettre à l'utilisateur via la ligne, mais la ligne est trop étroite et ne peut pas être transmise en une seule fois. Si un tampon est introduit, le processeur peut rapidement placer les données générées dans le tampon, puis les reposer dans un endroit frais. Le tampon produit les données en temps opportun selon les instructions. Cela résout efficacement la contradiction entre les processeurs à haute vitesse et les périphériques d'E/S à faible vitesse.

Quand les données du tampon seront-elles sorties ? 1. Lorsque le tampon est plein, le tampon a une capacité et le contenu sera automatiquement affiché lorsque la limite est atteinte. 2. L'exécution du script est terminée. De nombreux petits programmes ne génèrent pas autant de contenu. Vous ne pouvez pas attendre que le tampon soit plein avant de générer ~ C'est naturel.

 Utilisation du tampon lors de l'utilisation de la fonction ob

Le code est le suivant :

 ob_start()
Copier après la connexion

Activez le tampon de sortie. Cette fonction est l’une des fonctions que nous appelons le plus. Avec output_buffering défini sur on ou x k, cette fonction n'ouvre pas tant le tampon de sortie qu'elle étend le tampon de sortie à une grande taille. Bien entendu, à condition que output_buffering soit désactivé, ob_start jouera le rôle d'ouverture du tampon. ob_start() peut également transmettre un paramètre facultatif à la fonction output_callback, qui est expliqué en détail dans le manuel officiel de PHP.

Le code est le suivant :

ob_get_contents
Copier après la connexion

()

Récupérez simplement le contenu du tampon de sortie, mais ne l'effacez pas.

Le code est le suivant :

ob_end_clean()与ob_clean()
Copier après la connexion

La différence entre ces deux fonctions peut être vue littéralement. Le premier efface le contenu du tampon et le ferme, tandis que le second effectue uniquement le travail de nettoyage. Il convient de noter qu'après avoir utilisé ces deux fonctions, les fonctions précédentes telles que echo et print_r ne généreront pas le contenu.

L'auteur a essayé une fois d'imprimer le contenu de ob_get_contents() via print_r, puis a appelé ob_clean() pour vider le tampon, afin de ne pas affecter les opérations ultérieures sur le tampon ont échoué à plusieurs reprises. Si vous y réfléchissez bien, le contenu de print_r est à nouveau écrit dans le tampon, puis l'opération ob_clean() est effectuée, donc naturellement il n'y aura aucune sortie. L'appel de la fonction ob_flush() avant l'opération ob_clean peut obtenir l'effet souhaité.

Le code est le suivant :

ob_flush()与flush()
Copier après la connexion

 ob_flush() envoie le contenu du tampon et supprime le contenu. Par conséquent, il est préférable d'utiliser ob_get_contents() pour obtenir le contenu du tampon avant cette fonction. flush() vide le tampon côté serveur et l'envoie au client. Par conséquent, du point de vue du processus, ob_flush() doit être appelé en premier, puis la fonction flush.

De plus, laissez-moi vous expliquer le principe de fonctionnement de Apache buffer flush() : sous la sapi du module apache, le flush se fera en appelant sapi_module()Le pointeur de fonction membre flush utilise indirectement l'API::ap_rflush d'Apache pour actualiser le tampon de sortie d'Apache. Bien entendu, d'autres modules d'Apache tels que mod_gzip peuvent modifier le résultat de cette action et effectuer eux-mêmes le tampon de sortie, ce qui empêchera l'envoi des résultats générés par la fonction flush() au client. navigateur immédiatement.

Le code est le suivant :

ob_get_clean()
Copier après la connexion

Si vous connaissez déjà ob_get_contents() et ob_clean(), alors cette fonction c'est très simple. Parce que c'est une combinaison des deux premiers. Il récupère principalement le contenu du tampon actuel et supprime le tampon de sortie actuel.

Il existe de nombreuses autres fonctions ob, mais la plupart d'entre elles sont relativement simples à utiliser et faciles à comprendre. Vous pouvez vous référer au manuel php, qui contiendra des explications détaillées. Cet article répertorie certaines fonctions que l'auteur n'a pas très bien compris au début. Bien sûr, de nouveaux problèmes surgiront à l'avenir. Penser aux problèmes et les résoudre peut être la joie de vivre ici.

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

méthode php smtp pour implémenter la fonction d'envoi d'e-mails

php pour implémenter une fonction purement statique page Méthode

Comment implémenter le modèle observateur en PHP

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

Expliquez le concept de liaison statique tardive en PHP. Expliquez le concept de liaison statique tardive en PHP. Mar 21, 2025 pm 01:33 PM

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Caractéristiques de sécurité du cadre: protection contre les vulnérabilités. Mar 28, 2025 pm 05:11 PM

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Mar 28, 2025 pm 05:12 PM

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

See all articles