Web aym.pekori.to

CLXXVII. zlib 圧縮関数

導入

このモジュールにより gzip (.gz) で圧縮されたファイルを読み書きすることが可能となります。 この際、ファイルシステム 関数の gzip 圧縮対応版 (非圧縮ファイルも扱えますが、 ソケットは扱えません)を使用します。

注意: バージョン 4.0.4 で .gz ファイルに対応した fopen のラッパー を導入しました。 fopen() に渡すファイル名または パス名に zlib: をつけると、通常の f*() ファイルアクセス関数を使用して圧縮ファイルに透過的にアクセスすることが できます。

PHP 4.3.0 において、';' を含むファイル名との曖昧さを避けるため zlib:compress.zlib:// に変更されました。fopencookie() 関数は もはや必要ありません。詳細な情報は、 圧縮ストリーム項付録M にあります。

要件

このモジュールは、Jean-loup Gailly および Mark Adler による zlib の関数を使用します。 このモジュールを使用するには、zlib バージョン >= 1.0.9 を使用する必要があります。

インストール手順

PHPにおけるZlibサポートは、デフォルトでは利用できません。 Zlibサポートを有効にするには、PHPのコンパイル時にconfigureの オプションに--with-zlib[=DIR]を 指定してコンパイルする必要があります。

Windows 版の PHP には この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。

注意: PHP 4.3.0 以降、zlib モジュールは Windows 用 php バイナリにビルトインされています。

実行時設定

php.ini の設定により動作が変化します。

zlib 拡張モジュールは、 ブラウザがサポートする場合にページを透過的に圧縮するオプションを提供します。 ここで、 設定ファイル php.ini のオプションには、以下の 3 種類があります。

表 1. Zlib設定オプション

名前デフォルト変更の可否変更履歴
zlib.output_compression"0"PHP_INI_ALLPHP 4.0.5 から利用可能
zlib.output_compression_level"-1"PHP_INI_ALLPHP 4.3.0 から利用可能
zlib.output_handler""PHP_INI_ALLPHP 4.3.0 から利用可能
PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

zlib.output_compression boolean/integer

透過的なページ圧縮を行うかどうか。php.ini または Apache の設定でこのオプションが、"On" に設定された場合、 ブラウザが "Accept-Encoding: gzip" または "deflate" ヘッダを送信する場合に、ページは圧縮されます。 "Content-Encoding: gzip" (および "deflate") と "Vary: Accept-Encoding" ヘッダが出力に追加されます。 実行時、何らかのデータを送出する前にのみ設定することが可能です。

このオプションも論理値 "On"/"Off" のかわりに整数値をとることができ、 これを用いて出力のバッファサイズ (デフォルトは 4KB) を設定することができます。

注意: このオプションに 'On' を設定した場合、 output_handler を空にする必要があります! かわりに zlib.output_handler を使用する必要があります。

zlib.output_compression_level integer

透過的出力圧縮で使用される圧縮レベル。

zlib.output_handler string

zlib.output_compression が有効な場合、 他の出力ハンドラを指定することはできません。 この設定は、output_handler と同じですが、順番が異なります。

リソース型

リソース型は定義されていません。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

FORCE_GZIP (integer)

FORCE_DEFLATE (integer)

テンポラリファイルをオープンし、テスト用文字列を書きこみ、 続いて、このファイルの内容を 2 回出力します。

例 1. 簡単な Zlib の例

<?php

$filename
= tempnam('/tmp', 'zlibtest') . '.gz';
echo
"<html>\n<head></head>\n<body>\n<pre>\n";
$s = "Only a test, test, test, test, test, test, test, test!\n";

// 最大限の圧縮を指定して書きこみ用にファイルをオープン
$zp = gzopen($filename, "w9");

// 文字列をファイルに書きこむ
gzwrite($zp, $s);

// ファイルを閉じる
gzclose($zp);

// 読みこみ用にファイルをオープン
$zp = gzopen($filename, "r");

// 3 文字読みこむ
echo gzread($zp, 3);

// ファイルの終端まで出力して閉じる
gzpassthru($zp);
gzclose($zp);

echo
"\n";

// ファイルをオープンし、内容を出力する (2回目)
if (readgzfile($filename) != strlen($s)) {
        echo
"Error with zlib functions!";
}
unlink($filename);
echo
"</pre>\n</body>\n</html>\n";

?>
目次
gzclose -- 開かれたgzファイルへのポインタを閉じる
gzcompress -- 文字列を圧縮する
gzdeflate -- 文字列を deflate 圧縮する
gzencode -- gzip 圧縮された文字列を作成
gzeof -- gz ファイルポインタがファイル終端かどうか調べる
gzfile -- gzファイル全体を配列に読み込む
gzgetc -- gz ファイルへのポインタから文字を得る
gzgets -- ファイルポインタから 1 行を得る
gzgetss --  gzファイルへのポインタから1行を得て、HTMLタグを取り除く
gzinflate -- deflate圧縮された文字列を解凍する
gzopen -- gz ファイルを開く
gzpassthru --  gzファイルへのポインタから残りのデータ全部を出力する
gzputs -- のエイリアス gzwrite()
gzread -- バイナリ対応のgzファイル読み込み
gzrewind -- gz ファイルポインタの示す位置を元に戻す
gzseek -- gz ファイルポインタの位置を移動する
gztell -- gzファイルポインタの読み込み/書き込み位置を返します
gzuncompress -- 圧縮された文字列を解凍する
gzwrite -- バイナリセーフな gz ファイル書き込み
readgzfile -- gz ファイルを出力する
zlib_get_coding_type -- 出力圧縮に使用されたコーディングの種類を返す