PHP マニュアル
前のページ |  | 次のページ

# CXXVII. zlib圧縮関数

# 導入

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

> 注意: バージョン4.0.4-devで.gzファイルに対応したfopen-wrapperを導入しました。 これによりfopen()に'zlib:'をプレフィクスとした ファイル名又はパス名を渡すことで、通常のf*()関数で圧縮されたファイルに 透過的にアクセスすることが出来ます。

> 4.3.0において、';'を含むファイル名との曖昧さを避けるためこの特別 なプレフィックスは'zlib://'に変更されました。

> この機能を利用するにはfopencookie()関数を提供する Cのランタイムライブラリが必要です。現在私の知る限りでは、GNU libcが この機能を提供する唯一のライブラリです。

# 要件

このモジュールは、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 モジュールは php バイナリにビルトインされています。

# 実行用の設定

これらの関数の動作は、`php.ini`の設定により変化します。

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

表 1. Zlib設定オプション

名前 | デフォルト | 変更の可否
--- | --- | ---
zlib.output_compression | "Off" | PHP_INI_ALL
zlib.output_compression_level | "-1" | PHP_INI_ALL
zlib.output_handler | "" | PHP_INI_ALL

PHP_INI_*定数の定義と詳細については、 ini_set()を参照して下さい。

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

zlib.output_compression boolean/integer

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

  ヘッダが未送信の場合、スクリプト内でこのオプションを無効にするた めにini_set()を使用することが可能です。 "Content-Type: image/"ヘッダを出力した場合、(Netscapeのバグのせ いで)圧縮が無効となります。 image content-typeを追加するヘッダコールの後、 "ini_set('zlib.output_compression', 'On')"を追加した場合、 再度有効にすることができます。

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

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

zlib.output_compression_level integer

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

zlib.output_handler string

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

# 簡単なコードの例

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

例 1. 簡単な Zlib の例

`<?php
$filename = tempnam ('/tmp', 'zlibtest').'.gz';
print "<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文字読みこむ
print gzread ($zp, 3);
// ファイルの終端まで読み、閉じる
gzpassthru ($zp);
print "\n";
// ファイルをオープンし、内容を出力する (2回目)。
if (readgzfile ($filename) != strlen ($s)) {
echo "Error with zlib functions!";
}
unlink ($filename);
print "</pre>\n</h1></body>\n</html>\n";
?>`

前のページ | ホーム | 次のページ
zip_read | 上に戻る | gzclose