GZIP 圧縮ページを実装するには、ブラウザーとサーバーがそれをサポートする必要があります。実際には、ブラウザーに送信された後、ブラウザーはそれを解凍して解析します。現在、ほとんどのブラウザは GZIP ページの解析をサポートしているため、ブラウザについて心配する必要はありません。サーバー側でページを圧縮してブラウザに出力するだけです。
少しくどいので本題に入りましょう:
圧縮ビスケットを作るのと同じように、まず原材料を入手する必要があり、ページを圧縮するには、まず出力するコンテンツを入手する必要があります。 PHP の ob_start() (ob => 出力バッファ) 関数は、この機能を実現します。これは、プログラム内で出力するコンテンツを最初に「バッファ」と呼ばれる場所に置くことができます。 . 原材料を一時的に置くための作業台。
この関数はページが出力される前に使用する必要があるため、通常はコードの先頭に配置されます。作業台のようなものなので、原材料が到着する前に準備しておかないと、原材料が到着したときに置き場所がなくて問題が発生します。 ob_start() を使用してページを圧縮した後、圧縮 Cookie を作成できます。いいえ、ページは圧縮されている必要があります。しかし、まだコンプレッサーがないようです。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//Thisページは圧縮されています",9); 圧縮の準備 コンテンツには「//このページは圧縮されています」というコメントが付けられ、zlib が提供する gzencode() 関数を使用してレベル 9 で圧縮が実行されます。このパラメータの範囲は 0 ~ 9 で、0 は圧縮なし、9 は最大圧縮を意味します。当然、圧縮の程度が高くなるほど、CPU の消費量も増加します。
//次に、header() 関数を使用してヘッダー情報をブラウザーに送信し、このページが GZIP で圧縮されていることをブラウザーに伝えます。
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
}
return $content;圧縮されたコンテンツを返すか、圧縮された Cookie をワークベンチに送り返します。
}
コンプレッサーが完了したら、コンプレッサーをワークベンチに置きます。そのため、元の ob_start() は
ob_start('ob_gzip') になります。 //はい、ob_start() パラメーター (パラメーター名) に 1 つ追加するだけです。は先ほど作った「コンプレッサー」の機能名です。このようにして、コンテンツがバッファーに入ると、PHP は ob_gzip 関数を呼び出してコンテンツを圧縮します。
すべての作業が完了し、最終的な配信は次のようになります:
ob_end_flush(); // バッファを終了し、コンテンツを出力します。もちろん、バッファの内容はプログラムの実行終了時に自動的に出力されるため、この関数は必要ありません。
完全な例は次のとおりです:
コードをコピーしますコードは次のとおりです:
// ob_gzip コンプレッサーを使用してワークベンチを有効にする
ob_start('ob_gzip');
//圧縮するコンテンツを準備します
for($i=0; $i<100; $i )
{
echo('ここに圧縮ビスケットの原料があります、ここに圧縮ビスケットの原料があります、原料') ;
}
//圧縮結果を出力
ob_end_flush();
//これは ob_gzip 圧縮プログラムです
function ob_gzip($content)
{
if( !headers_sent() &&
extension_loaded("zlib") &&
strstr($) _SERVER["HTTP_ACCEPT_ENCODING"] ,"gzip"))
{
$content = gzencode($content." n//このページは圧縮されています",9);
header("Content-Encoding: gzip"); header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
return $content;
上記のコードでは使用されていませんが、GZIP を有効にすると 104B に減ります。元の圧縮率を計算してみます。 。
さらに、FlashGet を使用して取得されたログ情報は次のとおりです。プログラムに追加されたヘッダー情報を確認できます:
コードをコピーします
コードは次のとおりです:
Fri Jan 25 17:53: 10 2008 HTTP/1.1 200 OKFri Jan 25 17:53:10 2008 Server: Microsoft-IIS/5.1Fri Jan 25 17:53:10 2008 Date: Fri, 25 Jan 2008 09:53:10 GMT
Fri Jan 25 17:53:10 2008 接続: 閉じる
Fri Jan 25 17:53:10 2008 : Accept-Encoding
Fri Jan 25 17:53:10 2008 Content-Length: 104
Fri Jan 25 17:53:10 2008 コンテンツ-type: text/html
例 1 (PHP の組み込み圧縮関数を使用):
コードをコピーします
コードは次のとおりです:
if(Extension_Loaded('zlib')) Ob_Start('ob_gzhandler');
Header("コンテンツタイプ: text/html");
?>
無标题文档
<ボディ>
for($i=0;$i<10000;$i++){
echo 'Hello World!';
}
?>
if(Extension_Loaded('zlib')) Ob_End_Flush();
?>
例二(自書関数):
复制代码代码如下:
無标题文档
<ボディ>
ob_end_flush();
//压缩関数数
function ob_gzip($content){
if(!headers_sent()&&extension_loaded("zlib")&&strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")){
$content = gzencode($content) ,9);
header("コンテンツエンコーディング: gzip");
header("Vary: Accept-Encoding");
header("Content-Length: ".strlen($content));
}
$content を返します。
}
?>
http://www.bkjia.com/PHPjc/321325.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/321325.html
技術記事
GZIP 圧縮を実現するには、視聴者とサーバーの共同サポートが必要です。実際には、サーバーの圧縮が行われ、視聴者に転送されてから、視聴者が圧縮して解析されます。