現在の位置: ホーム> 最新記事一覧> OB_StartとOB_END_CLEANの一般的な使用法とその主な違いは何ですか?

OB_StartとOB_END_CLEANの一般的な使用法とその主な違いは何ですか?

gitbox 2025-09-18

[OB_STARTとOB_END_CLEANの一般的な使用法とその主な違いは何ですか? ]

PHPでは、 OB_STARTOB_END_CLEANは、2つの非常に有用な出力バッファー動作関数です。スクリプト出力を制御するために多くの場合、データの出力をブラウザに直接避けますが、いつ出力するかを決定するまでメモリにキャッシュします。これは、パフォーマンスの最適化、コンテンツ処理、またはページのヘッダーでHTTPヘッダーの送信に特に役立ちます。

出力バッファとは何ですか?

PHPの出力バッファリングメカニズムにより、ブラウザに直接送信する代わりに、メモリ内のバッファーにスクリプト出力(HTML、JavaScript、プレーンテキストなど)を保存できます。出力バッファリングを使用することにより、ページが出力を送信する前に、より細かい制御を実行できます。これは、出力を操作または変更する必要があるいくつかのシナリオに非常に役立ちます。

ob_startの役割

OB_START関数は、出力バッファーを起動するために使用されます。 OB_Start()が呼び出されると、PHPはブラウザに直接送信する代わりにキャッシュ出力を開始します。

文法:

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

OB_Start()を呼び出すと、すべての出力コンテンツは、ブラウザにすぐに表示されるのではなく、内部バッファに保存されます。現時点では、キャッシュされたコンテンツの変更や、キャッシュされたコンテンツをファイルまたはデータベースに送信するなど、いくつかの処理を行うことができます。

例:

 <span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();  </span><span><span class="hljs-comment">// 出力バッファリングを開始します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;  </span><span><span class="hljs-comment">// 出力コンテンツはすぐには表示されません</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-comment">// 現在のバッファの内容を取得します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();  </span><span><span class="hljs-comment">// バッファをクリアし、出力バッファーをオフにします</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"The buffered content: "</span></span><span> . </span><span><span class="hljs-variable">$content</span></span><span>;  </span><span><span class="hljs-comment">// 出力 "The buffered content: Hello, world!"</span></span><span>
</span></span>

上記の例では、 ob_start()がバッファを開始し、エコーを介したすべてのコンテンツ出力は一時的にキャッシュされます。次に、 OB_GET_CONTENTS()関数はバッファーに内容を取得し、 OB_END_CLEAN()を呼び出した後、バッファーをクリーニングします。

OB_END_CLEANの役割

OB_END_CLEANは、現在の出力バッファーを閉じて、バッファ内の内容をクリアするために使用されます。つまり、ブラウザに送信する代わりに、現在のバッファーのすべての出力を破棄します。

文法:

 <span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();
</span></span>

この関数は通常、 ob_start()で使用され、バッファの内容を取得または操作した後にバッファーをクリーニングします。

例:

 <span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();  </span><span><span class="hljs-comment">// 出力バッファリングを開始します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is buffered."</span></span><span>;  </span><span><span class="hljs-comment">// 出力不会立即显示</span></span><span>

</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();  </span><span><span class="hljs-comment">// バッファをクリアして閉じます</span></span><span>

</span><span><span class="hljs-comment">// 出力什么都不会显示,バッファの内容がクリアされているためです</span></span><span>
</span></span>

OB_STARTOB_END_CLEANの主な違い

  • OB_STARTは、出力バッファーを起動し、バッファ内のその後の出力を一時的に保存するために使用されます。

  • OB_END_CLEANは、現在の出力バッファーを閉じて、ブラウザに何も出力せずにバッファー内のすべてのコンテンツをクリアするために使用されます。

これらの2つの機能の組み合わせにより、出力を送信せずにHTTPヘッダー情報を変更したり、ページがロードされたときに特定の出力処理を実行したりするなど、出力コンテンツを柔軟に制御できます。

一般的な使用法

  1. HTTPヘッダー情報を送信する前に出力を変更します<BR> 出力バッファリングは、出力バッファーの内容がクリアまたは送信された後にのみ送信できるため、PHPの「ヘッダーが既に送信されている」エラーを回避するために使用できます。スクリプトが開始される前にカスタムHTTPヘッダーを送信する必要がある場合は、 ob_start()を使用できます。

     <span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();  </span><span><span class="hljs-comment">// 出力バッファリングを開始します区</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">"Location: http://example.com"</span></span><span>);  </span><span><span class="hljs-comment">// ヘッダー情報を変更します</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();  </span><span><span class="hljs-comment">// バッファをクリアして閉じます</span></span><span>
    </span></span>
  2. キャッシュページのコンテンツ<br> 一部のパフォーマンス最適化シナリオでは、キャッシュページの出力は、後続の要求の応答時間を大幅に短縮できます。たとえば、出力バッファーコンテンツをファイルに保存して、データベースクエリ操作の重複を避けることができます。

     <span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();  </span><span><span class="hljs-comment">// 出力バッファリングを開始します</span></span><span>
    </span><span><span class="hljs-keyword">include</span></span><span>(</span><span><span class="hljs-string">"content.php"</span></span><span>);  </span><span><span class="hljs-comment">// 生成出力</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-comment">// キャッシュされたコンテンツを取得します</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();  </span><span><span class="hljs-comment">// バッファをクリアします</span></span><span>
    
    </span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-string">"cached_page.html"</span></span><span>, </span><span><span class="hljs-variable">$content</span></span><span>);  </span><span><span class="hljs-comment">// キャッシュされたコンテンツをファイルに保存します</span></span><span>
    </span></span>
  3. コンテンツの変更またはリダイレクト<br> 生成されたHTMLコンテンツを変更するか、リダイレクトする必要がある場合、出力バッファーも非常に便利です。たとえば、 ob_get_contents()を介してバッファーの内容を取得し、必要に応じて変更できます。

     <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">"Hello, this is the original content!"</span></span><span>;
    </span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</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-variable">$modified_content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">"original"</span></span><span>, </span><span><span class="hljs-string">"modified"</span></span><span>, </span><span><span class="hljs-variable">$buffer</span></span><span>);
    
    </span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();  </span><span><span class="hljs-comment">// バッファをクリアします</span></span><span>
    
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$modified_content</span></span><span>;  </span><span><span class="hljs-comment">// 出力修改后的内容</span></span><span>
    </span></span>

要約します

OB_STARTOB_END_CLEANは、柔軟な出力制御を提供するPHPの強力な出力バッファリングツールであり、出力を送信する前に開発者が出力コンテンツを変更、キャッシュ、または破棄できるようにします。これら2つの機能を適切に使用することにより、HTTPヘッダーエラー、出力コンテンツの早期表示、パフォーマンスを最適化するときに不必要な計算を減らすなど、いくつかの一般的な問題を効果的に回避できます。