私のサイトでzlib圧縮を実行中にいくつかの問題があります..
まず、php_value output_handler ob_gzhandler
を使用して.htaccessでzlib圧縮を有効にすると、次のエラーが数千行表示されます。
PHP警告:ヘッダー情報を変更できません-ヘッダーは行0でUnknownに既に送信されています
空白に使用されるすべてのファイルと、16進エディタで表示されないはずのその他の文字をすべてチェックしましたが、.htaccessでzlibをオンにすると、そのエラーを抑えることができませんでした。
したがって、私はphp.iniファイルでzlib圧縮をオンにしようとしました:
zlib.output_compression "1"
zlib.output_compression_level "1"
しかし、圧縮チェッカーから、圧縮が有効になっていないため、正しい形式ではないようだと言われました。
最初に心に留めておくべきことは、圧縮チェッカーは時々さまざまな理由で存在するため、警告を大量に受け取ることです。スタックオーバーフローで最近言ったように、ySlowは福音ではありません(しかし、私は自分で好きです)。
PHPでzlib.output_compression
を使用するのではなく、Apacheでmod_deflate
を有効にすることをお勧めします。これにより、静的ファイルもキャッチおよび圧縮されます(たとえば、提供する静的テキストファイル/ csv/xmlがある場合)。画像やビデオのようなほとんどのマルチメディアを圧縮したくないことを覚えておいてください。ファイルサイズの削減(実質的にゼロ)と比較すると、オーバーヘッドは比例して非効率的です。
Httpd2に関連する例を次に示しますが、 選択できるオプションは他にもたくさんあります(マニュアルを確認してください) :
<Location />
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>