ホームページ  >  記事  >  バックエンド開発  >  PHPでoutput_bufferingを使用するにはどうすればよいですか? _PHP チュートリアル

PHPでoutput_bufferingを使用するにはどうすればよいですか? _PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:18:06855ブラウズ

PHPでoutput_bufferingを使用するにはどうすればよいですか?

この記事では主に、PHP における出力バッファリングの詳細な紹介を紹介します。この記事では、出力バッファリングの高度な使用法について説明します。必要な方は参考にしてください。

私は個人的に、出力バッファリングは比較的純粋な 4.0 の機能だと考えています。概念的には非常に単純ですが、出力バッファリングは非常に強力であり、開発者は高度で効率的なプログラムを開発しやすくなります。

この記事では、HTTP ヘッダー、出力バッファリングが HTTP ヘッダーの処理にどのように役立つか、および出力バッファリングの高度な使用法をいくつか紹介します。

HTTPヘッダー

HTTPプロトコルを使用して確立された各リクエストに対して、Webサーバーによって生成されるレスポンスは通常、ヘッダーとボディの2つの部分で構成されます。たとえば、Web サーバーのドキュメント ルート ディレクトリに example.txt という小さなテキスト ファイルがあり、そのファイルに Hello, world! というテキストが含まれている場合、このファイルに対する HTTP リクエストの応答は次のようになります。

コードは次のとおりです:

HTTP/1.1 200 OK

日付: Sat, 02 Sep 2000 21:40:08 GMT

サーバー: Apache/1.3.11 (Unix) mod_macro/1.1.1 PHP/4.0.2-dev

Last-Modified: Sat, 02 Sep 2000 21:39:49 GMT

ETag: "12600b-e-39b173a5"

受け入れ範囲: バイト

Content-Length: 14

接続: 閉じる

Content-Type: text/plain

Hello, world!

このリクエストの最初の部分 (大きな部分) は HTTP ヘッダーです。 HTTP ヘッダーはブラウザーのユーザーには表示されませんが、文書のコンテンツ タイプ、使用されているプロトコルのバージョン、文書の最終変更日などのブラウザー用の情報が含まれています。 HTTP ヘッダーには多くの規則はありません。通常、その形式は次のとおりです。

コードは次のとおりです:

フィールド: 値[フィールド: 値]

文書本体と空白行で区切る必要があります。

このHTTPヘッダー情報はPHPスクリプトから追加や変更が可能です。たとえば、 header() 関数を使用できます:

コードは次のとおりです:

header("Location: http://www.php.net/"); // http://www.php.net/

にリダイレクトします。

SetCookie() 関数も使用できます:

コードは次のとおりです:

SetCookie("foo", "bar");

HTTP Cookie が HTTP ヘッダーを使用して実装されていることはご存知かもしれません。たとえば、次の PHP ファイルに対する HTTP リクエストの応答

コードは次のとおりです:

SetCookie("foo", "bar");

print "Cookie を設定します。";

?>

次のようになります:

コードは次のとおりです:

HTTP/1.1 200 OK

日付: Sat, 02 Sep 2000 21:43:02 GMT

サーバー: Apache/1.3.11 (Unix) mod_macro/1.1.1PHP/4.0.2-dev

X-Powered-By: PHP/4.0.2-dev

Set-Cookie: foo=bar

接続: 閉じる

Content-Type: text/html

クッキーをセットします

ブラウザはサーバーから返されたHTTPヘッダーを読み取り、fooというCookie(この場合はセッションCookie)が送信され、その値がbarであることを知ります。

出力バッファリングテクノロジーを使用する理由

出力バッファリング技術の必要性は、PHP/FI 2.0 の時点で明らかでした。このバージョンの PHP を使用したことがある場合は、「おっと、ヘッダーの送信後に SetCookie が呼び出されました」というエラー メッセージが頻繁に表示され、原因は何だったのか頭を悩ませたことをまだ覚えているかもしれません。

最新バージョンの PHP (PHP 3.0、さらには PHP 4.0) を使用したことがある場合は、次のエラー メッセージをご存知でしょう: おっと、ヘッダーが送信された後に php_set_cookie が呼び出されました。あるいは、PHP の header() 関数を呼び出そうとすると、「ヘッダー情報を追加できません - ヘッダーはすでに送信されました」というメッセージが表示される場合があります。一般に、出力バッファリング テクノロジのユーザーはこれらの煩わしいエラー メッセージを回避しますが、開発者はこれを高度な目的に使用することもできます。

これらのエラーはどのようなときに発生しますか? これらのエラー メッセージは、HTTP ヘッダーが送信された後にヘッダー情報を追加または変更しようとした場合、およびドキュメント本文とヘッダーの間に空白行がない場合に発生します。これがどのように起こるかを理解するために、PHP が HTTP ヘッダー出力と本文出力をどのように処理するかを見てみましょう。

スクリプトの実行が開始されると、ヘッダー情報と本文情報を同時に送信できます。

ヘッダー情報 (header() または SetCookie() 関数から) はすぐには送信されず、代わりにリストに保存されます。

これにより、デフォルトのヘッダー(Content-Type ヘッダーなど)を含むヘッダー情報を変更できます。ただし、スクリプトがヘッダー以外の出力を送信すると (たとえば、ブロックまたは print() 呼び出しを使用して)、PHP は最初にすべてのヘッダーを送信し、次に空行を送信して HTTP ヘッダーを終了し、その後のみ続行する必要があります。本文データを送信します。これ以降、ヘッダー情報を追加または変更しようとする試みは許可されず、上記のエラー メッセージのいずれかが送信されます。

これは大きな問題を引き起こしませんが、入力を送信する前に HTTP ヘッダーを終了するだけで、スクリプト ロジックが複雑になる場合があります。出力バッファリング技術はこれらの問題を解決できます。

出力バッファリングの仕組み

出力バッファリングが有効になっている場合、スクリプトが出力を送信するときに PHP は HTTP ヘッダーを送信しません。代わりに、この出力を動的に増加するキャッシュにパイプ処理します (集中出力メカニズムを持つ PHP 4.0 でのみ使用可能)。ヘッダーは実際には送信されないため、ヘッダー行の変更、追加、または Cookie の設定を行うことができます。最も単純なケースでは、スクリプトが終了すると、PHP は自動的に HTTP ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。それは簡単です。

基本的な使い方

出力バッファリングの制御に役立つ次の 4 つの関数を使用できます。

コードは次のとおりです:

ob_start()

出力バッファリングメカニズムを有効にします。

出力バッファリングは複数のレベルをサポートしています - たとえば、ob_start() 関数は複数回呼び出すことができます。

ob_end_flush()

出力バッファ(出力バッファ)を送信し、出力バッファリングメカニズムを無効にします。

ob_end_clean()

出力バッファをクリアしますが送信はせず、出力バッファリングを無効にします。

http://www.bkjia.com/PHPjc/886045.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/886045.html技術記事 PHPでoutput_bufferingを使用するにはどうすればよいですか? この記事では主に、PHP における Output_buffering の詳細な紹介を紹介します。この記事では、出力バッファリングの高度な使用方法について説明します。必要な方は参考にしてください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。