web-dev-qa-db-ja.com

Apache mod deflateがphp出力を圧縮しない

Mod_deflateを実行しました。 Apacheサーバーにsome.txtファイルを投入し、curlを使用してチェックアウトできます。

curl --compressed -I /somefile.txtは、圧縮された次の結果を返します。

Vary: Accept-Encoding
Content-Encoding: gzip

しかし、/ some.phpを使用すると、次のようになります。

Accept-Ranges: bytes
X-Powered-By: PHP/5.4.4-14+deb7u5

しかし、Content-Encodingはありません:gzip、.htaccessは複数のオプションで使用しました:

SetOutPutFilter DEFLATE

または

AddOutputFilterByType DEFLATE application/json

また、php.iniでzlib圧縮がオフになっているかどうかを確認し、出力バッファーをオフに設定しようとしました。しかし、何を試しても、Apacheによってphp出力が圧縮されることはありません。 ApacheからZipへのオーバーヘッドは、php zlibを使用する場合よりも少なくなります。

CSS/JSでは動作するが、PHPでは動作しないApache出力圧縮 のような十分な投稿がありますが、これによりphpからの圧縮が可能になります。 Apacheで処理してほしい。

ここにはばかげた何かが欠けているに違いない。

UPDATE:与えられた回答のため、私はすべての問題を解決しました。結局、それはまだ100%機能しませんでした。これは、間違ったパッケージがインストールされたことが原因でした。 Apache2filterが使用され、間違ったパスで私を送りました。

5

AddOutputFilterByTypeは、出力フィルターチェーンにアイテムを追加するための非推奨の方法です( ref here ):

もう1つのディレクティブAddOutputFilterByTypeはまだサポートされていますが、問題がある可能性があり、現在は非推奨です。代わりに動的構成を使用してください。

また、PHPは、DEFLATEフィルターを含まない1つのフィルターチェーンに関連付けられているため、問題が発生する可能性があります。

mod_filter の新しい構文をFilterChainとともにこの質問で 示されているように使用してみることができます (in答えではなく質問)。

4
regilero

この問題が発生し、.htaccessとhttpd.confでmod_deflateオプションを設定すると、結果が異なることに気づきました。 httpd.conf設定は、PHP fastcgiまたはDSOとして実行された場合に機能しました。htaccessファイルでは、PHP Fastcgiを実行できなかったため、 deflateディレクティブ。

.htaccessの代わりにhttpd.confにルールを記述して問題が解決するかどうかを確認してください(変更を加えた後、Apacheを再起動することを忘れないでください)。

2

これを試して、うまくいくかどうかを確認してください:

AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp