Apache php gzip 圧縮出力を実装する方法、apachegzip_PHP チュートリアル

WBOY
リリース: 2016-07-12 09:08:12
オリジナル
741 人が閲覧しました

Apache phpのgzip圧縮出力実装方法、apachegzip

1 gzipの紹介 N GZIP は GNU ZIP の略で、GNU フリーソフトウェアのファイル圧縮プログラムで、GZIP のファイル形式を表すこともよくあります。ソフトウェアの作者は Jean-loup Gailly と Mark Adler です。 1992 年 10 月 31 日に初めて公開されました。バージョン番号は 0.1 で、現在の安定バージョンは 1.2.4 です。

Gzip は主に Unix システムでのファイル圧縮に使用されます。 Linux では拡張子 .gz の付いたファイルをよく使用しますが、それらは GZIP 形式です。現在、インターネット上で使用される非常に一般的なデータ圧縮形式またはファイル形式になっています。 GZIP 圧縮をプレーン テキスト ファイルに適用すると、その効果は非常に明白で、ファイルの内容に応じて、GZIP 圧縮後のページ サイズは元のサイズの 40%、またはさらに小さくなります。

HTTP プロトコル上の GZIP エンコードは、WEB アプリケーションのパフォーマンスを向上させるために使用されるテクノロジーです。 Web 開発では、gzip を使用してページを圧縮し、Web サイトのトラフィックを減らすことができます。ただし、gzip は CPU をあまり占有しませんが、増加はわずか数パーセントですが、ページを 30% 以上圧縮できます。費用対効果が高い。

Apache の Gzip モジュールを使用すると、Gzip 圧縮アルゴリズムを使用して、Apache サーバーによって公開された Web コンテンツを圧縮し、クライアントのブラウザーに送信できます。この圧縮により、実際にネットワーク上で送信されるバイト数が削減されます (送信のためのネットワーク I/O が節約されます)。最も明白な利点は、Web ページの読み込みを高速化できることです。

Web ページの読み込みが高速化する利点は、トラフィックを節約し、ユーザーのブラウジング エクスペリエンスを向上させることに加えて、Gzip と検索エンジン クローラーとの関係が改善されることも明らかです。たとえば、Google は gzip ファイルを直接読み取ることで、通常の手動クロールよりも速く Web ページをクロールできます。 Google ウェブマスター ツールでは、sitemap.xml.gz がサイトマップとして直接送信されていることがわかります。

これらの利点は静的コンテンツに限定されません。PHP 動的ページやその他の動的に生成されたコンテンツは、他のパフォーマンス調整メカニズムや対応するサーバー側のキャッシュ ルールと併用することで圧縮でき、パフォーマンスを大幅に向上させることができます。ウェブサイトのパフォーマンス。したがって、Linux サーバーにデプロイされた PHP プログラムの場合は、サーバーがサポートしている場合は Gzip Web 圧縮を有効にすることをお勧めします。

2. WebサーバーがHTTP圧縮を処理するプロセスは次のとおりです: 1. Web サーバーはブラウザから HTTP リクエストを受信した後、ブラウザが HTTP 圧縮 (Accept-Encoding 情報) をサポートしているかどうかを確認します。

2. ブラウザが HTTP 圧縮をサポートしている場合、Web サーバーは要求されたファイルのサフィックスをチェックします。

3. リクエストされたファイルが HTML、CSS などの静的ファイルの場合、Web サーバーはリクエストされたファイルの最新の圧縮ファイルが圧縮バッファ ディレクトリに既に存在するかどうかを確認します。

4. 要求されたファイルの圧縮ファイルが存在しない場合、Web サーバーは圧縮されていない要求されたファイルをブラウザに返し、要求されたファイルの圧縮ファイルを圧縮バッファ ディレクトリに保存します。

5. 要求されたファイルの最新の圧縮ファイルが既に存在する場合、要求されたファイルの圧縮ファイルが直接返されます。

6. 要求されたファイルが動的ファイルの場合、Web サーバーはコンテンツを動的に圧縮し、ブラウザに返します。圧縮されたコンテンツは圧縮キャッシュ ディレクトリに保存されません。

3. Apache の gzip 関数を有効にする

Apache には、圧縮に Gzip 圧縮アルゴリズムを使用する 2 つのモジュールがあります: mod_gzip と mod_deflate。 Gzip Web 圧縮を使用するには、まずサーバーがこれら 2 つのコンポーネントのいずれかをサポートしていることを確認してください。 Gzip を使用するにはクライアント ブラウザのサポートも必要ですが、現在、IE、Mozilla Firefox、Opera、Chrome など、ほとんどのブラウザが Gzip をサポートしていますので、ご安心ください。

HTTP ヘッダーを調べることで、使用されているクライアント ブラウザーが gzip 圧縮をサポートしているかどうかをすぐに判断できます。送信された HTTP ヘッダーに次の情報が表示される場合は、ブラウザーが対応する gzip 圧縮をサポートしていることを意味します:

コードは以下のように表示されます: Accept-Encoding: gzip は mod_gzip をサポートします Accept-Encoding: deflate は mod_deflate をサポートします

Accept-Encoding: gzip,deflate は mod_gzip と mod_deflate の両方をサポートします




firebug ビューのようなもの:
Accept-Encoding: gzip,deflate は mod_gzip と mod_deflate の両方をサポートします

サーバーが Gzip コンポーネントのサポートを有効にしている場合は、http.conf または .htaccess でカスタマイズできます。 .htaccess 構成の簡単な例を次に示します。

mod_gzip構成:

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

# mod_gzip:

mod_gzip_on はい
mod_gzip_dechunk はい
mod_gzip_item_include ファイル .(html?|txt|css|js|php|pl)$
mod_gzip_item_include ハンドラー ^cgi-script$
mod _gzip_item_include mime ^text /.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*


mod_deflate 設定例:

開く Apache 設定ファイル httpd.conf を開きます

意志

#LoadModule deflate_module modules/mod_deflate.so

#LoadModule headers_module modules/mod_headers.so

先頭の#記号を削除してください


コードは以下のように表示されます:
# mod_deflate:


DeflateCompressionLevel 6 #圧縮率、6 が推奨値です。
AddOutputFilterByType DEFLATE text/html
AddFi lterByType DEFLATE text/xml
AddOut putFilterByType DEFLATE テキスト/CSS
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterBy Type DE FLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x- httpd-php
AddOutputFilterByType DEFLATE image/svg+xml




里 PDF については、状況に応じて次のファイル MIME タイプを追加できます。 、写真、音楽ドキュメントなどはすでに高度に圧縮された形式であるため、圧縮を繰り返しても効果はほとんどなく、逆に CPU の処理時間が増加し、ブラウザのレンダリングの問題が発生する可能性があります。だから必要ないんだよ Gzip で再度圧縮します。上記の設定を行った後、返された HTTP ヘッダーを確認してください。以下の情報が表示されている場合は、返されたデータが圧縮されていることを意味します。つまり、Web サイト プログラムで設定された Gzip 圧縮が有効になります。
リーリー
ファイアバグビュー:

注:

1) mod_gzip と mod_deflate のどちらが使用されているかに関係なく、ここで返される情報は同じです。なぜなら、それらはすべて gzip 圧縮を実装しているからです。

2) CompressionLevel 9 は圧縮レベル (圧縮率の設定) を指し、値の範囲は 1 ~ 9 で、9 が最高レベルです。これにより、転送サイズが最大 80% (ファイルの内容に応じて) 削減され、少なくとも半分が節約できることがわかります。 CompressionLevel は、プロセッサのパフォーマンスと Web ページの圧縮品質のバランスを維持するために、デフォルトで 6 に設定できます。ただし、高いレベルに設定すると、圧縮率は高くなります。

3) jpg などの画像形式、mp3 などの音楽ファイル、すでに圧縮されている zip などの圧縮ファイルを圧縮する必要はありません。

4. mod_gzip と mod_deflate の主な違いは何ですか?どちらを使用するのが良いですか?

最初の違いは、それらがインストールされている Apache Web サーバーのバージョンの違いです:

Apache 1.x

シリーズには Web ページ圧縮テクノロジーが組み込まれていないため、追加のサードパーティの mod_gzip モジュールを使用して圧縮を実行します。

Apache 2.x が正式に開発されたとき、Web ページの圧縮が考慮され、mod_gzip を置き換えるために mod_deflate モジュールが組み込まれました。どちらも Gzip 圧縮アルゴリズムを使用しますが、動作原理は似ています。 2 番目の違いは圧縮品質です:

F MOD_DEFLATE の圧縮速度はわずかに速く、MOD_GZIP の圧縮率はわずかに高くなります。一般に、デフォルトでは、mod_gzip は mod_deflate よりも 4% ~ 6% 高い圧縮率を実現します。

では、なぜ mod_deflate を使用するのでしょうか?

3 番目の違いは、サーバー リソースの占有です:

一般に、mod_gzip はサーバー CPU の使用率が高くなります。 mod_deflate これは、サーバーのパフォーマンスを確保するために特別に使用される圧縮モジュール、mod_deflate ファイルの圧縮に必要なリソースが少なくなります。これは、トラフィックの多いサーバーでは、mod_deflate を使用した方が mod_gzip よりも高速にロードされる可能性があることを意味します。

わからない?つまり、Web サイトの 1 日あたりのユニーク訪問者数が 1,000 人未満で、Web ページの読み込みを高速化したい場合は、mod_gzip を使用してください。追加のサーバー リソースを消費しますが、 でも、その価値はある。 Web サイトに 1 日あたり 1,000 人を超えるユニーク訪問者がいて、割り当てられたシステム リソースが限られた共有仮想ホストを使用している場合は、mod_deflate を使用します。 より良い選択となるでしょう。

さらに、Apache 2.0.45 以降、mod_deflate は DeflateCompressionLevel を使用できるようになりました。 圧縮レベルを設定するディレクティブ。このディレクティブの値は、1 (最も速い圧縮、最も低い圧縮品質) から 9 (最も遅い圧縮、最も高い圧縮率) までの整数です。デフォルト値は 6 (圧縮速度と圧縮品質) です。 よりバランスの取れた値)。この単純な変更により、mod_deflate は mod_gzip の圧縮と簡単に比較できるようになります。

追記:上記の 2 つの Gzip モジュールが有効になっていない仮想空間では、PHP の zlib 関数ライブラリを使用してファイルを圧縮することもできますが、この方法は使用するのがより面倒です。一般的にはサーバーリソースを消費しますので、状況に応じて注意してご利用ください。

5. zlib.output_compression と ob_g​​zhandler エンコーディングメソッド圧縮

サーバーは mod_gzip および mod_deflate モジュールをサポートしていません。GZIP を使用して Web ページのコンテンツを圧縮する場合は、zlib.output_compression を有効にするか、ob_g​​zhandler を使用してエンコードする という 2 つの方法を検討できます。

1) zlib.output_compression は、Web コンテンツを圧縮しながらクライアントにデータを送信します。

2) ob_gzhandler は、Web ページのコンテンツが圧縮されるのを待ってから送信します。比較すると、前者の方が効率的ですが、2 つは同時に使用できないことに注意してください。選択できるのは 1 つだけです。エラーが発生します。

做 2 つの実装方法を簡単に説明します:

1. zlib.output_compression の実装
デフォルトでは、zlib.output_compression はオフになっています:

コードは以下のように表示されます:

; zlib ライブラリを使用した透過的な出力圧縮

; このオプションの有効な値は、圧縮に使用される「off」、「on」、または特定のバッファ サイズです
; 結果のチャンク圧縮の性質により、サイズは異なる場合があります。
圧縮の結果として、より大きなチャンク サイズを使用したい場合は、さらに、output_buffering を使用する必要があります。標準の
の代わりに、output_handler を使用しないと、出力が破損します
http://php.net/zlib.output-compression = Off

; .output-compression-level
;zlib.output_compression_level = -1






これを開きたい場合は、php.ini ファイルを編集して次の内容を追加します:

コードは以下のように表示されます。
zlib.output_compression = オン
zlib.output_compression_level = 6



phpinfo()関数を通じて結果を確認できます。
zlib.output_compression がローカルの場合 Value と MasterValue の値が両方とも On の場合、この時点でアクセスした PHP ページ (疑似静的ページを含む) が Firebug または GZIP 圧縮されていることを意味します。 オンライン Web ページの GZIP 圧縮検出ツールは、圧縮効果を検出できます。
2. ob_gzhandler の実装方法

ob_gzhandler を使用する必要がある場合は、zlib.output_compression をオフにして、php.ini ファイルの内容を次のように変更する必要があります:
zlib.output_compression = Off
zlib.output_compression_level = -1
関連するコードを挿入して GZIP 圧縮を実装するPHP ファイル:

コードは以下のように表示されます。
if (extension_loaded('zlib')) {
if ( !headers_sent() AND isset($_SERVER['HTTP_ACCEPT_ENCODING']) &&
strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) !== FALSE) ️
ob_end_flush();






zlib.output_compression であっても ob_gzhandler であっても、HTML、CSS、JS などの静的ファイルの GZIP 圧縮は、PHP を呼び出すことによってのみ実行できます。
最後に言いたいのは、現在、主流のブラウザはデフォルトで HTTP1.1 プロトコルを使用しているということです。 IE の場合、メニュー バーの [ツール] - [インターネット オプション] - [詳細設定] - [HTTP 1.1 設定] - [HTTP を使用] を選択しない場合は、すべて GZIP 圧縮をサポートします。 1.1 では、Web ページ圧縮後の速度向上によってもたらされる喜びを感じることはできません。

http://www.bkjia.com/PHPjc/1056839.htmlwww.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/1056839.html技術記事 Apache php で gzip 圧縮出力を実装する方法、apachegzip 1. gzip の概要 gzip は GNU zip の略称で、GNU フリー ソフトウェアのファイル圧縮プログラムであり、gzip のようなファイルを表すためによく使用されます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート