現在の位置: ホーム> 最新記事一覧> 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()。
 *
 * 1つ、なぜ出力バッファリングを使用するのか?
 * -----------------------
 * 存在する PHP 真ん中,通常、コンテンツはブラウザに直接出力されます,1つ旦输出后,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: ...') リダイレクト。
 *
 * 4、サンプルコード
 * ------------
 * 以下示例展示了のように何存在する重定向前获取页面内容并保存到文件:
 */</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>