Position actuelle: Accueil> Derniers articles> Comment implémenter la mise en mémoire tampon de sortie en utilisant OB_START dans PHP? Analyse des étapes détaillée

Comment implémenter la mise en mémoire tampon de sortie en utilisant OB_START dans PHP? Analyse des étapes détaillée

gitbox 2025-09-11

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie n&#39;a rien à voir avec le contenu de l&#39;article</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bienvenue pour lire ce tutoriel!\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans le développement de PHP, nous devons parfois traiter la sortie avant d'envoyer le contenu au navigateur, tel que la compression, la mise en cache, la modification du contenu HTML, etc. Ob_Start () est une fonction de mise en mémoire tampon de sortie très puissante fournie par PHP, qui peut aider les développeurs à contrôler flexiblement le flux de sortie. Cet article vous mènera plus en détail sur la façon d'utiliser OB_START dans PHP pour implémenter la mise en mémoire tampon de sortie.

1. Qu'est-ce que la tampon de sortie

Par défaut, PHP enverra immédiatement du contenu au navigateur lors de l'exécution d'instructions de sortie telles que Echo ou Print . La mise en mémoire tampon de sortie permet à PHP de stocker la sortie dans le tampon d'abord jusqu'à ce que le tampon soit effacé ou envoyé. Cela permet aux développeurs de:

  • Modifiez la sortie avant d'envoyer au navigateur.

  • Contrôle l'ordre de sortie.

  • Implémentez la compression de contenu ou le mécanisme de mise en cache.

  • Évitez les erreurs "les en-têtes déjà envoyés".

2. Utilisation de base

Dans PHP, il est très simple d'activer la mise en mémoire tampon de sortie en utilisant ob_start () :

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Allumez la tampon de sortie</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Cette section est d&#39;abord stockée dans le tampon,Au lieu de sortir immédiatement。"</span></span><span>;

</span><span><span class="hljs-comment">// Obtenez du contenu tamponné</span></span><span>
</span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); 
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le contenu du tampon est: "</span></span><span> . </span><span><span class="hljs-variable">$content</span></span><span>;

</span><span><span class="hljs-comment">// Effacer et désactiver la mise en mémoire tampon</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Pas de sortie de contenu tamponnée,Effacer directement</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

expliquer

  1. ob_start () : Démarrer la tampon de sortie.

  2. ob_get_contents () : Obtenez le contenu du tampon actuel.

  3. ob_end_clean () : effacez le tampon et fermez le tampon, sans sortir le contenu.

  4. Si vous souhaitez sortir du contenu tamponné au lieu de le nettoyer, vous pouvez utiliser ob_end_flush () .

3. Utilisez des fonctions de rappel pour traiter le contenu tamponné

ob_start () peut accepter une fonction de rappel qui nous permet de traiter la sortie avant d'être envoyée au navigateur. Par exemple, Compress Html:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Compression de la fonction de rappel HTML</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compress_output</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$buffer</span></span></span><span>) {
    </span><span><span class="hljs-variable">$search</span></span><span> = [</span><span><span class="hljs-string">'/&gt;\s+/'</span></span><span>,</span><span><span class="hljs-string">'/\s+&lt;/'</span></span><span>,</span><span><span class="hljs-string">'/\s{2,}/'</span></span><span>];
    </span><span><span class="hljs-variable">$replace</span></span><span> = [</span><span><span class="hljs-string">'&gt;'</span></span><span>,</span><span><span class="hljs-string">'&lt;'</span></span><span>,</span><span><span class="hljs-string">' '</span></span><span>];
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$search</span></span><span>, </span><span><span class="hljs-variable">$replace</span></span><span>, </span><span><span class="hljs-variable">$buffer</span></span><span>);
}

</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(</span><span><span class="hljs-string">"compress_output"</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;html&gt;   &lt;body&gt;    &lt;h1&gt;  Accueillir PHP Tampon de sortie  &lt;/h1&gt;  &lt;/body&gt; &lt;/html&gt;"</span></span><span>;

</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// Sortir le contenu traité</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans cet exemple, la fonction de rappel Compress_output supprime les blancs et les ruptures de ligne inutiles en HTML, réduisant ainsi la quantité de données transmises.

4. Tamponner à plusieurs niveaux et utilisation de nidification

PHP prend en charge la mise en mémoire tampon à plusieurs niveaux, ce qui signifie qu'un autre tampon peut être activé dans un seul tampon:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Première couche de tampon"</span></span><span>;

</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Deuxième couche de tampon"</span></span><span>;

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Deuxième couche de tampon内容: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 输出Deuxième couche de tampon内容</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Première couche de tampon内容: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 输出Première couche de tampon内容</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

La tampon à plusieurs niveaux peut être utilisée pour traiter différentes sorties en couches, telles que différentes stratégies de cache pour différents modules.

5. Précautions courantes

  1. N'envoyez pas d'informations d'en-tête une fois la sortie envoyée : l'utilisation de la tampon de sortie peut éviter l'erreur "les en-têtes déjà envoyés".

  2. Contrôle du cache : si vous devez mettre en cache ou comprimer la page, assurez-vous que le tampon ne sera pas effacé trop tôt.

  3. Considérations de performances : les tampons de fichiers importants peuvent occuper la mémoire et doivent être utilisés avec prudence.

6. Résumé

Grâce à ob_start () , les développeurs PHP peuvent contrôler pleinement l'heure de l'envoi de sortie et la façon dont le contenu est traité. Qu'il s'agisse de compression de pages, de mise en cache des politiques ou de prévention des erreurs d'information de l'en-tête, la tampon de sortie est un outil très pratique. Après maîtrise ob_start () et des fonctions connexes (telles que ob_get_contents () , ob_end_flush () , ob_end_clean () ), vos capacités de gestion de sortie PHP seront considérablement améliorées.