VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

PHPスクリプトで出力データを圧縮する方法

PHPスクリプトで出力データを圧縮する方法を調べました。備忘としてメモ書きしています。

※目次をクリックすると目次の下部にコンテンツが表示されます。

出力バッファをgzip圧縮
〇構文
bool ob_start(callable $output_callback)
 
・出力のバッファリングを有効にする。
・output_callbackは、出力バッファの内容をパラメータとして受け取り、処理した結果をブラウザに送信する。
 
①ob_gzhandlerを使用
 
・出力バッファをgzip圧縮するためのob_startコールバック関数。
・実際に圧縮されたデータを送信する前にブラウザがサポートするcontent encodingの種類(“gzip”、”deflate” またはなし)を調べ、それに基づいて出力を返す。
例)
<?php
ob_start(“ob_gzhandler”);
?>
<html>
<body>
・・・・
</body>
</html>
 
②コールバックを自分で定義
 
例)
<?php
ob_start("customhandler");

function customhandler($buffer) {
  $buffer = str_replace(
    array ("\r", " ", "\n", "\t"),"");
    return $buffer;
  }
?>
<html>
<body>
・・・・
</body>
</html>
zlibを使って圧縮
・このモジュールによりgzip(.gz)で圧縮されたファイルを読み書きすることが可能となる。
・php.iniまたはApacheの設定で下記オプションを設定。
 
①output_compression boolean/integer
 
・透過的なページ圧縮を行うかどうかを設定。
・このオプションが”On”に設定された場合、ブラウザが”Accept-Encoding: gzip”または”deflate”ヘッダを送信する場合に、ページは圧縮される
・”Content-Encoding: gzip”(および “deflate”)と”Vary: Accept-Encoding”ヘッダが出力に追加される。
・実行時、何らかのデータを送出する前にのみ設定することが可能。
・”On”/”Off”のかわりに整数値をとることができ、出力のバッファサイズ(デフォルトは4KB)を設定することができる。
 
②output_compression_level integer
 
・透過的出力圧縮で使用される圧縮レベル。
・0(圧縮しない)から9(最高レベルの圧縮をする)までの値を指定。
・デフォルト値の-1は、どのレベルを使用するかをサーバーで決定させる。
モバイルバージョンを終了