tampon php

May 15, 2018 pm 05:46 PM
php 缓冲区

Cet article présente la connaissance du tampon PHP. Maintenant, je le partage avec vous et donne une référence aux amis qui ont besoin d'aide. Jetons un coup d'œil ensemble

Qu'est-ce qu'un tampon ?
Pour faire simple, la fonction du tampon est de mettre d'abord le contenu d'entrée ou de sortie dans la mémoire sans l'afficher ni le lire. Quant à savoir pourquoi il y a un tampon, c'est une question très large
.

En fait, le rôle le plus essentiel du tampon est de coordonner le fonctionnement du processeur à grande vitesse et des périphériques IO relativement lents (disques, etc.).

Si vous voulez comprendre le tampon de PHP, vous devez savoir où le tampon est défini lors de l'exécution de PHP.
Lors de l'exécution de PHP, si vous rencontrez du code qui génère des données telles que echo print_r, PHP placera les données à sortir dans le propre tampon de PHP et attendra la sortie.

Lorsque le propre tampon de PHP reçoit une instruction pour afficher le contenu du tampon, il affichera les données dans le tampon vers Apache. Apache reçoit les données sorties par PHP puis stocke les données dans Apache lui-même. Dans le tampon, attendez la sortie

. Lorsqu'Apache reçoit l'instruction et veut juste afficher le contenu du tampon, il affichera le contenu du tampon et le renverra au navigateur. On peut voir que PHP veut afficher l'heure des données, il passera par deux tampons (. d'abord le sien, puis celui d'Apache), puis revenez au navigateur.

Quel rôle le tampon joue-t-il en PHP ?
1. été généré avant d'utiliser la fonction d'en-tête, ce qui entraînera certaines erreurs, telles que Impossible de modifier les informations d'en-tête – en-têtes déjà envoyés par ;

1

1

2


echo "this is test";

header("LOCATION http://www.baidu.com");

2

echo "ceci est un test";

en-tête("LOCALISATION http://www.baidu.com");


La raison de cette erreur est que certaines données ont été sorties avant l'en-tête, et lors de la sortie de ces données, Apache enverra simultanément un état de réponse au navigateur (puisqu'il y a une sortie, cette demande est valide), et puis vous utilisez à nouveau la fonction d'en-tête
pour envoyer l'en-tête http, cette erreur sera renvoyée. L'erreur signifie : l'en-tête HTTP a été envoyé et vous ne pouvez pas le modifier
Pourquoi l'utilisation d'un tampon peut-elle éviter cette erreur. ?
Parce que la fonction d'en-tête n'est pas affectée par le tampon. Lorsqu'il rencontre la fonction d'en-tête, PHP exécute immédiatement Apache pour envoyer cet en-tête http au navigateur
Et après les données de sortie, PHP ouvre le tampon de sortie. les données seront stockées dans le tampon et attendront la sortie. Cela peut éviter les erreurs survenues auparavant.
2. Lors de l'écriture d'un programme de téléchargement de fichiers via PHP.
Afin de rendre le téléchargement de fichiers plus sûr et d'améliorer plus de contrôlabilité, De nombreux amis aiment utiliser PHP pour écrire des pages de téléchargement de fichiers. Le principe est très simple, il s'agit de lire et d'afficher le contenu du fichier via fwrite, puis d'envoyer l'en-tête HTTP via header et d'informer le navigateur qu'il s'agit d'une pièce jointe. cela
peut avoir pour effet de fournir des téléchargements
Si vous utilisez la méthode ci-dessus pour fournir une page de téléchargement, vous rencontrerez un problème d'efficacité si un fichier est volumineux, supposons qu'il fait 100 Mo, alors sans allumer le. sortie du tampon, toutes les 100 millions de données doivent être lues, puis renvoyées à la page en même temps. Si cela est fait, l'utilisateur n'obtiendra pas de réponse tant que toutes les données ne seront pas lues
, ce qui réduit et améliore l'expérience utilisateur. 🎜> Si le tampon de sortie est activé, lorsque le programme PHP a fini de lire une certaine section du fichier, il l'affichera immédiatement sur Apache, puis laissera Apache revenir immédiatement au navigateur, ce qui peut réduire le temps d'attente de l'utilisateur. Que faire des données ? On peut écrire une boucle while pour lire le fichier section par section
Chaque fois qu'une section est lue, elle sera sortie immédiatement jusqu'à ce que le fichier entier soit sorti, afin que le navigateur puisse continuer à recevoir données, et il n'est pas nécessaire d'attendre que tous les fichiers soient lus

De plus, cette approche résout également un autre problème très grave, par exemple, si un fichier fait 100 Mo, si le tampon n'est pas activé, tous les 100 M de fichiers doivent être lus dans la mémoire puis sortis. Cependant, que se passe-t-il si le programme PHP a une limite de mémoire ? Afin de garantir la stabilité du serveur, l'administrateur fixe généralement une limite à l'exécution de PHP

. mémoire (via la limite mémoire totale de php.ini, qui est par défaut La valeur est 8 Mo), c'est-à-dire que la mémoire utilisée par chaque programme PHP ne peut pas utiliser plus que cette valeur et le fichier à lire. est de 100 Mo, il n'y a tout simplement pas assez de mémoire pour lire le fichier. Cette fois, nous devons utiliser la méthode
ci-dessus pour résoudre ce problème. Ne lisez qu'un certain paragraphe à la fois, afin d'éviter les limitations de mémoire
. 3. Cache de fichiers statiques
De nombreuses entreprises disposent désormais d'un tel cache. L'exigence est que lorsqu'une certaine page est visitée pour la première fois, PHP sera exécuté, puis le contenu affiché sera renvoyé au navigateur en même temps. , le contenu affiché doit être enregistré sur le serveur, afin que lors de sa prochaine visite, il soit affiché directement. Affichez directement les fichiers enregistrés sur le serveur sans avoir à le faire fonctionner via PHP
C'est ainsi. appelé "cache de page statique". Alors, comment pouvons-nous renvoyer le contenu au navigateur et enregistrer les données sur le serveur en même temps ? Cela nécessite l'utilisation du tampon de sortie.

table>


Configuration liée au tampon de sortie

Dans PHP.INI, il existe deux éléments de configuration étroitement liés au tampon
1.output_buffering
Cette configuration Ce qui affecte directement le tampon de PHP lui-même est constitué des trois paramètres de configuration. on/off/xK (x est une valeur entière)
on - ouvre le tampon
off - ferme le tampon
256k - Active le tampon, et lorsque le contenu du tampon dépasse 256k, le tampon sera automatiquement rafraîchi (envoyer les données à Apache) ;

2. implicit_flush
Cette configuration affecte directement le tampon Apache, il y a 2 paramètres de configuration. on/off
on - Actualise automatiquement le tampon Apache, c'est-à-dire que lorsque php envoie des données au tampon Apache, il n'a pas besoin d'attendre d'autres instructions et renvoie directement la sortie au navigateur
off - Do ne rafraîchit pas automatiquement le tampon Apache. Après avoir reçu les données, attendez la commande d'actualisation
Fonctions liées au tampon

1 ob_implicit_flush
La fonction est la même que implicit_flush, que ce soit le cas. Flush automatique du tampon d'Apache
2.flush
consiste à envoyer des instructions à Apache pour permettre à Apache de rafraîchir son propre tampon de sortie
3.ob_start
Ouvrez le tampon de sortie, quel que soit le fichier php.ini. à configurer, si vous utilisez cette fonction, même si output_buffering est désactivé, le tampon de sortie sera ouvert
La fonction ob_start accepte également un paramètre, qui est un rappel d'une fonction, ce qui signifie qu'avant de saisir le contenu du tampon , vous devez utiliser Appeler les paramètres passés pour traiter le contenu du tampon une fois, puis le mettre dans le tampon
4.ob_flush
demande à php lui-même d'actualiser son propre tampon et d'envoyer les données à Apache
5.ob_clean
Effacer le contenu du tampon php
6.ob_end_clean
Effacer le contenu du tampon php et fermer le tampon de sortie
7.ob_end_flush
Envoyer le contenu de celui de php tampon vers Apache et efface le contenu dans son propre tampon
8.ob_get_clean
Après avoir obtenu le contenu du tampon, effacez le tampon.
9.ob_get_contents
Obtenez le contenu du tampon de sortie
🎜> 10.ob_get_flush
Obtenir le contenu dans le tampon et envoyer le contenu à Apache
11.ob_get_length
Obtenir la longueur du contenu dans le tampon
12.ob_list_handlers
Obtenir lors de l'exécution ob_start, Le nom de la fonction rappelée, par exemple :
ob_start('ob_gzhandler');
print_r(ob_list_handlers);
affichera ob_gzhandler;
13.ob_gzhandler
La fonction de cette fonction est comme ob_start Le paramètre de rappel, avant que le tampon ne soit actualisé, appellera cette fonction pour effectuer une compression gzip ou dégonfler les données. Cette fonction nécessite la prise en charge de l'extension zlib

Utilisation du tampon. -contenu lié
1. La relation d'ordre entre ob_flush et flush. D'après l'analyse ci-dessus, nous pouvons voir que ob_flush est lié à PHP lui-même, tandis que flush exploite le tampon apache. Ainsi, lorsque nous utilisons ces deux fonctions, nous devons d'abord les exécuter. ob_flush,
puis exécuter flush, car nous devons d'abord envoyer les données de PHP à Apache, puis les renvoyer d'Apache au navigateur. Si php n'a pas actualisé les données à Apache, et flush est appelé, apache n'aura rien Les données sont renvoyées au navigateur

2. Certains navigateurs n'afficheront pas les données s'ils reçoivent trop peu de caractères, comme l'ancienne version d'IE (cela doit être le cas). plus de 256 Ko à afficher). De cette façon, cela posera une question. Il est clair que le tampon est actualisé à la fois dans php et dans Apache, mais le navigateur n'affiche pas les données souhaitées. C'est peut-être la raison. vous pouvez afficher les données. Ajoutez plusieurs espaces après pour remplir les données afin de garantir que le navigateur ne causera pas de problèmes aussi étranges

3. Certains serveurs Web ont certaines restrictions sur leurs propres tampons de sortie, comme nginx. Il existe une configuration fastcgi_buffer_size 4k, ce qui signifie qu'elle sera actualisée lorsque le contenu de son propre tampon de sortie atteint 4K, donc afin de garantir les données du contenu, vous pouvez ajouter le code suivant pour garantir la longueur du contenu

1

2

1

2

3

4

5

6


ob_start();

echo 'aaa';

$string = ob_get_contents();

file_put_contents('a.html', $string);

ob_flush();

flush();

3

4

5

6

ob_start();

echo 'aaa';

$string = ob_get_contents();

file_put_contents('a.html', $string);

ob_flush();

flush();

1

1

2

3

4

5


<?php

echo str_repeat(" ",4096);

?>

23

4

5

<?php

echo code> <code class="php function">str_repeat(" ",4096);

 ?


4. Dans Apache, si vous activez le module de compression de mod_gzip, cela peut empêcher l'actualisation de votre fonction flush. La raison est que mod_gzip a son propre tampon de sortie lorsque PHP exécute la fonction flush, indique Apache. pour actualiser le tampon de sortie, mais si le contenu doit être compressé, Apache affichera le contenu dans son propre module mod_gzip. mod_gzip a également son propre tampon de sortie, et il ne sera pas affiché immédiatement, le contenu ne peut donc pas être affiché immédiatement. afin d'améliorer Dans ce cas, vous pouvez désactiver le module mod_gzip, ou ajouter le contenu suivant à httpd.conf pour désactiver la compression

1

1


SetEnv no-gzip dont-vary


SetEnv no-gzip dont-vary

tr>

Recommandations associées :

Explication détaillée pour accélérer votre site en actualisant le tampon PHP

Qu'est-ce qu'un tampon 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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois 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)

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

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

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

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

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

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles