当前位置: 首页> 最新文章列表> PHP 页面重定向前怎样用 ob_get_contents() 获取页面完整内容?操作方法详解

PHP 页面重定向前怎样用 ob_get_contents() 获取页面完整内容?操作方法详解

gitbox 2025-08-23
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * 本示例仅用于演示,前面部分与文章内容无关
 * 可以在这里放置任意 PHP 初始化逻辑
 */</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">// 记录脚本开始时间</span></span><span>

</span><span><span class="hljs-comment">// 模拟一些和文章无关的代码</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">"访问了文章页面"</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 页面重定向前怎样用 ob_get_contents() 获取页面完整内容?操作方法详解
 *
 * 在 PHP 开发中,我们有时需要在执行 header('Location: ...') 进行重定向之前,
 * 先获取当前页面的完整输出内容进行保存或分析,这时候就可以用到输出缓冲区函数
 * ob_get_contents()。
 *
 * 一、为什么要用输出缓冲?
 * -----------------------
 * 在 PHP 中,通常内容是直接输出给浏览器的,一旦输出后,PHP 就不能再修改已经发送的头信息,
 * 这会导致在调用 header() 进行重定向时出现 “headers already sent” 的错误。
 * 使用输出缓冲(Output Buffering)可以让 PHP 将输出暂存到内存中,这样我们既能读取它,
 * 又能在发送给浏览器前做处理。
 *
 * 二、ob_get_contents() 的作用
 * --------------------------
 * ob_get_contents() 用于获取当前输出缓冲区的内容。前提是必须已经用 ob_start() 开启了输出缓冲。
 *
 * 三、操作方法步骤
 * ----------------
 * 1. 在页面最开始调用 ob_start() 开启缓冲区。
 * 2. 编写页面内容,这些内容会被暂存到缓冲区而不是直接输出。
 * 3. 调用 ob_get_contents() 获取缓冲区里的内容。
 * 4. 在获取内容后,可以将其保存到文件、数据库,或者进行分析处理。
 * 5. 最后调用 ob_end_clean() 或 ob_end_flush():
 *    - ob_end_clean():清空缓冲区内容,不输出到浏览器。
 *    - ob_end_flush():输出缓冲区内容到浏览器。
 * 6. 在清理缓冲区后执行 header('Location: ...') 进行重定向。
 *
 * 四、示例代码
 * ------------
 * 以下示例展示了如何在重定向前获取页面内容并保存到文件:
 */</span>

</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 1. 开启缓冲区</span></span><span>

</span><span><span class="hljs-comment">// 2. 模拟页面输出</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&lt;h1&gt;欢迎访问本站&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;这里是页面正文内容。&lt;/p&gt;"</span></span><span>;

</span><span><span class="hljs-comment">// 3. 获取缓冲区内容</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. 保存内容到文件</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. 清理缓冲区</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();

</span><span><span class="hljs-comment">// 6. 执行重定向</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">/**
 * 五、注意事项
 * ------------
 * - 必须在任何实际输出前调用 ob_start(),否则缓冲区无法捕获内容。
 * - 如果 header() 重定向前已经有输出,且未开启缓冲,会报错。
 * - 保存的内容仅包含当前 PHP 脚本输出,不会包含外部资源(如 CSS、JS、图片)。
 *
 * 总结:
 * -----
 * ob_get_contents() 是在 PHP 页面重定向前获取输出内容的实用工具。
 * 搭配 ob_start()、ob_end_clean() 等函数,可以在不影响 HTTP 头的情况下,
 * 完整捕获页面内容用于备份或处理,非常适合日志记录、调试和缓存等场景。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>