Position actuelle: Accueil> Derniers articles> Comment utiliser ob_get_contents () et ob_start () nidification multi-couches en php? Analyse des compétences pratiques

Comment utiliser ob_get_contents () et ob_start () nidification multi-couches en php? Analyse des compétences pratiques

gitbox 2025-09-08
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ------------------- Contenu non pertinent préexistant -------------------</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Ce sont certaines choses qui ne sont pas liées au contenu de l&#39;article PHP Exemple de sortie。\n"</span></span><span>;
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Heure actuelle: <span class="hljs-subst">$time</span></span></span><span>\n";
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ------------------- Démarrer le texte -------------------</span></span><span>

<span class="hljs-comment">/**
 * titre: PHP milieu ob_get_contents() et ob_start() Comment utiliser la nidification multicouche?Analyse des compétences pratiques
 *
 * exister PHP milieu,Tampon de sortie(Output Buffering)C&#39;est une fonctionnalité très utile,它允许你exister脚本执行过程milieu
 * Capturer le contenu de sortie,Au lieu de l&#39;envoyer immédiatement au navigateur。`ob_start()` et `ob_get_contents()` 是Tampon de sortie
 * milieu最常用的函数。Lorsque vous avez besoin d&#39;une mise en mémoire tampon imbriquée multicouche pour contrôler la sortie de différentes parties,Il est particulièrement important de comprendre comment ils fonctionnent。
 *
 * 1. ob_start() Le rôle de
 * --------------------
 * `ob_start()` 启动一个新的Tampon de sortie区。Toutes les sorties après(comme echo、print)Ils seront mis en cache dans ce tampon,
 * Au lieu de le sortir directement dans le navigateur。
 *
 * Exemple:
 */</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">"Ceci est le contenu du premier tampon de couche。"</span></span><span>;
</span><span><span class="hljs-variable">$content1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); </span><span><span class="hljs-comment">// Obtenez le contenu tampon actuel</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// Sortir et terminer le tampon</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\nLe contenu du premier tampon obtenu: <span class="hljs-subst">$content1</span></span></span><span>\n";

<span class="hljs-comment">/**
 * 2. Tampon imbriqué multicouche
 * ----------------
 * Lorsque la nidification multicouche est requise,Peut être appelé plusieurs fois ob_start(),Un nouveau tampon est créé à chaque fois que l&#39;appel est appelé,Former une structure de pile。
 * passer ob_get_contents() Vous pouvez obtenir le contenu du tampon actuel,passer ob_end_flush() ou ob_end_clean() 
 * Peut mettre fin au tampon actuel。
 *
 * Exemple:
 */</span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Première couche de tampon</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le premier niveau commence\n"</span></span><span>;

</span><span><span class="hljs-title function_ invoke__">ob_start</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">"Contenu de deuxième couche\n"</span></span><span>;
</span><span><span class="hljs-variable">$secondLayer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); </span><span><span class="hljs-comment">// 获取Contenu de deuxième couche</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// 清空Deuxième couche de tampon(Pas de sortie)</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le premier étage continue\n"</span></span><span>;
</span><span><span class="hljs-variable">$firstLayer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); </span><span><span class="hljs-comment">// Obtenez la première couche de contenu</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\nContenu capturé dans la deuxième couche: <span class="hljs-subst">$secondLayer</span></span></span><span>\n";
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Contenu capturé dans la première couche: <span class="hljs-subst">$firstLayer</span></span></span><span>\n";

<span class="hljs-comment">/**
 * 3. Conseils pratiques
 * ------------
 * - Sortie retardée:passer多层缓冲,Vous pouvez d&#39;abord traiter le contenu,Modifier et sortir。
 * - Rendu de modèle:exister渲染模板时,Vous pouvez d&#39;abord tamponner la sortie,进行变量替换ou缓存后再输出。
 * - Enregistrement:Capturer le contenu de sortie到文件而不是直接输出。
 *
 * Choses à noter:
 * - à chaque fois ob_start() Tous doivent coopérer ob_end_flush() ou ob_end_clean()。
 * - Trop de couches imbriquées peuvent augmenter les frais généraux de mémoire,Il est recommandé d&#39;utiliser en fonction des besoins réels。
 *
 * 4. 综合Exemple
 */</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">"HTML En-tête de page\n"</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">"&lt;p&gt;Contenu du sujet&lt;/p&gt;\n"</span></span><span>;
</span><span><span class="hljs-variable">$bodyContent</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_clean</span></span><span>(); </span><span><span class="hljs-comment">// Effacer mais pas la sortie</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;header&gt;tête&lt;/header&gt;\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$bodyContent</span></span><span>; </span><span><span class="hljs-comment">// 再次输出Contenu du sujet</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// Sortir tout</span></span><span>

</span><span><span class="hljs-comment">// ------------------- Fin de texte -------------------</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ------------------- Pas de contenu à la fin -------------------</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文章结束Exemple:Merci d&#39;avoir lu!\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>