ホームページ >バックエンド開発 >PHPチュートリアル >PHP zlib 拡張機能の GZIP 圧縮機能の詳細説明 page_PHP チュートリアル

PHP zlib 拡張機能の GZIP 圧縮機能の詳細説明 page_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:40:30809ブラウズ

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

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

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

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

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

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

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

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

ob_end_flush(); // もちろん、バッファーを終了してコンテンツを出力します。プログラムが最後にバッファーコンテンツ出力を自動的に実行するため、この関数は必要ありません。

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

//Enable a 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." //このページは圧縮されています",9);

header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($ content ));
}
return $content;
}
?>

実際のテスト後、上記のコードで GZIP が使用されていない場合、GZIP を有効にすると 4.69KB=4802.56B に減少します。えっと…数学は苦手かもしれません。それでは、元の値にどれだけ圧縮されているか計算してみましょう

なお、以下は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 Date: Fri 、2008 年 1 月 25 日 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 コンテンツ-type: text/html


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486206.html技術記事 GZIP 圧縮ページを実装するには、ブラウザーとサーバーがそれをサポートする必要があります。実際には、ブラウザーに送信された後、ブラウザーはそれを解凍して解析します。ブラウザについて心配する必要はありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。