コンテンツを圧縮するには、1つ書くだけ
<?php ob_start("ob_gzhander");
たったこれだけ。たったこれだけ。楽チンですね―
え?if 文は accept-encoding は?
ブラウザが非対応ならどうするの?、IFぶんで条件分岐は?それが、いらないんです。私も実験して驚きました。
実験してみました。
<?php ob_start('ob_gzhander'); phpinfo(); header("Content-Length: ".ob_get_length()); ob_end_flush();
単純に、ob_start を追記しただけです。
gzip 非対応(Accept-Encoding 無し )の場合
非対応なら、生のHTMLを返す(バッファリングは失敗するので、処理されない)
curl -v https://localhost/info.php > /dev/null < HTTP/1.1 200 OK < Date: Sat, 14 May 2016 10:46:45 GMT < Server: Apache/2.2.22 (Debian) Phusion_Passenger/5.0.23 PHP/5.4.45-0+deb7u2 mod_ssl/2.2.22 OpenSSL/1.0.1e < X-Powered-By: PHP/5.4.45-0+deb7u2 < Vary: Accept-Encoding < Transfer-Encoding: chunked < Content-Type: text/html
gzip 対応(Accept-Encoding 有り)の場合
対応なら、HTMLのバッファリングが成功するので、圧縮されたコンテンツが飛んでくる
curl -v https://localhost/info.php -H 'Accept-Encoding: gzip, deflate, sdch' > /dev/null < HTTP/1.1 200 OK < Date: Sat, 14 May 2016 10:53:58 GMT < Server: Apache/2.2.22 (Debian) Phusion_Passenger/5.0.23 PHP/5.4.45-0+deb7u2 mod_ssl/2.2.22 OpenSSL/1.0.1e < X-Powered-By: PHP/5.4.45-0+deb7u2 < Vary: Accept-Encoding < Content-Encoding: gzip < Content-Length: 11219 < Content-Type: text/html <
ちゃんと圧縮されて飛んできます。
調べたら安心。
チャント調べたら安心できますね。
追記
自動適用されるのは content-type : text/**
だけでした。 image は自分でやる必要がありますね。