ホームページ >php教程 >php手册 >PHP zlib 拡張機能はページの GZIP 圧縮出力を実装します

PHP zlib 拡張機能はページの GZIP 圧縮出力を実装します

WBOY
WBOYオリジナル
2016-06-13 12:15:521042ブラウズ

GZIP 圧縮ページを実装するには、ブラウザーとサーバーがそれをサポートする必要があります。実際には、ブラウザーに送信された後、ブラウザーはそれを解凍して解析します。現在、ほとんどのブラウザは GZIP ページの解析をサポートしているため、ブラウザについて心配する必要はありません。サーバー側でページを圧縮してブラウザに出力するだけです。

少しくどいので本題に入りましょう:

圧縮 Cookie を作成するのと同じように、まず原材料を取得する必要があり、ページを圧縮するには、まずコンテンツを取得する必要があります。出力されます。 PHP の ob_start() (ob => 出力バッファ) 関数は、この機能を実現できます。これは、プログラム内で出力する内容を最初に「バッファ」と呼ばれる場所に置くことができます。もちろん、圧縮されたクッキーを作成することと理解できます。 . 原材料を一時的に置くための作業台。
この関数はページが出力される前に使用する必要があるため、通常はコードの先頭に配置されます。作業台のようなものなので、原材料が到着する前に準備しておかないと、原材料が到着したときに置き場所がなくて問題が発生します。 ob_start() を使用してページを圧縮した後、圧縮 Cookie を作成できます。いいえ、ページは圧縮されている必要があります。しかし、まだコンプレッサー EZ が不足しているようです。PHP の zlib 拡張機能を使用してコンプレッサーを作成します。

コードをコピーします コードは次のとおりです。以下のように:


function ob_gzip($content) // $content は圧縮されるページ コンテンツ、または Cookie の原材料です
{
if( !headers_sent() && //ページヘッダー情報がまだ出力されていない場合
extension_loaded("zlib") && // そして zlib 拡張機能が PHP にロードされています
strstr($_SERVER["HTTP_ACCEPT_ENCODING"], "gzip")) / / そして、ブラウザは GZIP ページを受け入れることができると言います
{
$content = gzencode($content." n//このページは圧縮されています",9); gzencode() 関数は、レベル 9 で圧縮を実行します。このパラメータの値の範囲は 0 ~ 9 で、0 は圧縮なし、9 は最大の圧縮を意味します。もちろん、圧縮の度合いが高くなるほど、CPU の消費量も増加します。

//次に、header() 関数を使用してヘッダー情報をブラウザーに送信し、このページが GZIP で圧縮されていることをブラウザーに伝えます。
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content)); }
return $content; // 圧縮されたコンテンツを返すか、圧縮された Cookie をワークベンチに送り返します。
}

コンプレッサーが完了したら、コンプレッサーをワークベンチに置き、元の ob_start() は

ob_start('ob_gzip') になります。 , ob_start() にパラメータを追加するだけで、パラメータ名は先ほど作成した「コンプレッサー」の関数名になります。このようにして、コンテンツがバッファーに入ると、PHP は ob_gzip 関数を呼び出してコンテンツを圧縮します。
すべての作業が完了しました。最終的な配信は次のとおりです:

ob_end_flush(); //バッファを終了し、コンテンツを出力します。もちろん、バッファの内容はプログラムの実行終了時に自動的に出力されるため、この関数は必要ありません。
完全な例は次のとおりです:

コードをコピーします コードは次のとおりです:

//ob_gzip 圧縮機能を備えたワークベンチを有効にする
ob_start('ob_gzip');
//圧縮するコンテンツを準備します
for($i=0; $i<100; $i )
{
echo('ここに圧縮ビスケットの原料があります、ここに圧縮ビスケットの原料があります、原料')
}
//圧縮結果を出力します
ob_end_flush ();
// これは ob_gzip 圧縮プログラムです
関数 ob_gzip($content)
{
if( !headers_sent() &&
extension_loaded("zlib") &&
strstr( $_SERVER["HTTP_ACCEPT_ENCODING"] ,"gzip"))
{
$content = gzencode($content." n//このページは圧縮されています",9); "Content-Encoding: gzip") ;
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content)); $content;
}
?>


上記のコードで GZIP を使用しない場合、GZIP を有効にすると 4.69KB = 4802.56B になります。 104B に縮小されました。私は数学が苦手なので、元のサイズの何パーセントかに圧縮されています。 。

さらに、FlashGet を使用して取得されたログ情報は次のとおりです。プログラムに追加されたヘッダー情報を確認できます。



コードをコピーします

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

Fri Jan 25 17:53:10 2008 HTTP/1.1 200 OK Fri Jan 25 17:53:10 2008 Server: Microsoft-IIS/5.1 Fri Jan 25 17:53:10 2008 日付: Fri, 25 Jan 2008 09:53:10 GMT

Fri Jan 25 17:53:10 2008 接続: close

Fri Jan 25 17:53:10 2008 X-Powered-By: PHP/5.2.5
Fri Jan 25 17:53:10 2008 Content-Encoding: gzip
Fri Jan 25 17:53:10 2008 Vary: Accept-Encoding
Fri Jan 25 17:53:10 2008 Content-Length: 104
Fri Jan 25 17:53:10 2008 Content-type: text/html


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。