Position actuelle: Accueil> Derniers articles> Comment utiliser ob_get_contents () pour obtenir le contenu complet de la page avant la redirection de la page PHP? Explication détaillée de la méthode d'opération

Comment utiliser ob_get_contents () pour obtenir le contenu complet de la page avant la redirection de la page PHP? Explication détaillée de la méthode d'opération

gitbox 2025-08-23
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * Cet exemple est pour la démonstration uniquement,La partie précédente n&#39;a rien à voir avec le contenu de l&#39;article
 * Vous pouvez placer n&#39;importe quel endroit ici PHP Logique d&#39;initialisation
 */</span>

</span><span><span class="hljs-variable">$start_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">microtime</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>); </span><span><span class="hljs-comment">// Enregistrer l&#39;heure de début du script</span></span><span>

</span><span><span class="hljs-comment">// Simuler un code qui n&#39;est pas lié à l&#39;article</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dummy_log</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$message</span></span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-string">'dummy.log'</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-string">' - '</span></span><span> . </span><span><span class="hljs-variable">$message</span></span><span> . PHP_EOL, FILE_APPEND);
}

</span><span><span class="hljs-title function_ invoke__">dummy_log</span></span><span>(</span><span><span class="hljs-string">"Visité la page de l&#39;article"</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 class="hljs-comment">/**
 * PHP Comment utiliser la redirection de la page ob_get_contents() Obtenez le contenu complet de la page?Explication détaillée de la méthode d&#39;opération
 *
 * exister PHP En cours de développement,我们有时需要exister执行 header('Location: ...') Avant de rediriger,
 * Obtenez d&#39;abord le contenu de sortie complet de la page actuelle pour enregistrer ou analyser,C&#39;est à ce moment que la fonction de tampon de sortie peut être utilisée
 * ob_get_contents()。
 *
 * un、Pourquoi utiliser la mise en mémoire tampon de sortie?
 * -----------------------
 * exister PHP milieu,Habituellement, le contenu est sorti directement vers le navigateur,un旦输出后,PHP Vous ne pouvez plus modifier les informations d&#39;en-tête que vous avez envoyées,
 * 这会导致existerAppel header() Apparaît lors de la redirection “headers already sent” Erreur。
 * Utiliser la tampon de sortie(Output Buffering)Peut PHP 将输出暂存到内存milieu,Afin que nous pouvons le lire,
 * 又能exister发送给浏览器前做处理。
 *
 * deux、ob_get_contents() Le rôle de
 * --------------------------
 * ob_get_contents() Utilisé pour obtenir le contenu du tampon de sortie actuel。La prémisse est qu&#39;il doit être utilisé ob_start() La mise en mémoire tampon de sortie est activée。
 *
 * trois、Étapes de fonctionnement
 * ----------------
 * 1. exister页面最开始Appel ob_start() Allumer le tampon。
 * 2. Écrire du contenu de la page,Ces contenus seront temporairement stockés dans le tampon au lieu d&#39;être sortis directement。
 * 3. Appel ob_get_contents() Obtenez le contenu dans le tampon。
 * 4. exister获取内容后,Il peut être enregistré dans un fichier、base de données,Ou effectuer l&#39;analyse et le traitement。
 * 5. 最后Appel ob_end_clean() ou ob_end_flush():
 *    - ob_end_clean():Effacer le contenu tampon,Pas de sortie vers le navigateur。
 *    - ob_end_flush():Contenu du tampon de sortie au navigateur。
 * 6. existerNettoyer le tampon后执行 header('Location: ...') Réorienter。
 *
 * Quatre、Exemple de code
 * ------------
 * 以下示例展示了comme何exister重定向前获取页面内容并保存到文件:
 */</span>

</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 1. Allumer le tampon</span></span><span>

</span><span><span class="hljs-comment">// 2. Simuler la sortie de la page</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;h1&gt;Bienvenue sur ce site&lt;/h1&gt;"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;p&gt;Voici le contenu de la page。&lt;/p&gt;"</span></span><span>;

</span><span><span class="hljs-comment">// 3. Obtenez le contenu tampon</span></span><span>
</span><span><span class="hljs-variable">$pageContent</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();

</span><span><span class="hljs-comment">// 4. Enregistrer le contenu dans le fichier</span></span><span>
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-string">'page_backup.html'</span></span><span>, </span><span><span class="hljs-variable">$pageContent</span></span><span>);

</span><span><span class="hljs-comment">// 5. Nettoyer le tampon</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();

</span><span><span class="hljs-comment">// 6. Effectuer une redirection</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">"Location: https://www.example.com"</span></span><span>);
</span><span><span class="hljs-keyword">exit</span></span><span>;

<span class="hljs-comment">/**
 * cinq、Choses à noter
 * ------------
 * - 必须exister任何实际输出前Appel ob_start(),Sinon le tampon ne peut pas capturer le contenu。
 * - si header() Il y a déjà une sortie avant la redirection,Et la mise en mémoire tampon n&#39;est pas excitée,Rapportera une erreur。
 * - Le contenu enregistré ne contient que le contenu actuel PHP Sortie du script,Aucune ressource externe n&#39;est incluse(comme CSS、JS、image)。
 *
 * Résumer:
 * -----
 * ob_get_contents() 是exister PHP Outil utile pour obtenir la sortie avant la redirection de la page。
 * Correspondre ob_start()、ob_end_clean() Fonction égale,可以exister不影响 HTTP Dans le cas de la tête,
 * 完整捕获页面内容用于备份ou处理,Idéal pour l&#39;exploitation forestière、Scénarios de débogage et de mise en cache。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>