【PHP8.x】gzdeflate関数の使い方
『gzdeflate関数は、指定された文字列をDEFLATEアルゴリズムを用いて圧縮する処理を実行する関数です。この関数は、データ転送量を削減したり、ストレージ容量を節約したりする目的で、文字列データのサイズを小さくするために使用されます。第一引数には、圧縮したい文字列を指定します。第二引数には、圧縮レベルを0(無圧縮)から9(最大圧縮)までの整数で任意に指定できます。この値を大きくするほど圧縮率は高くなりますが、その分、処理にかかる時間が増加します。この引数を省略したり-1を指定したりした場合は、zlibライブラリのデフォルトの圧縮レベルが適用されます。処理が成功すると圧縮されたバイナリ文字列を返し、失敗した場合はfalse
を返します。この関数によって生成されるデータは、zlibヘッダーやフッター情報を含まない生のDEFLATE形式です。圧縮されたデータを元の状態に戻す(解凍する)際には、対になるgzinflate
関数を使用する必要があります。
基本的な使い方
構文(syntax)
<?php
$original_string = "Hello, this is a test string for gzdeflate.";
$compressed_data = gzdeflate($original_string);
?>
引数(parameters)
string $data, int $level = -1, int $encoding = ZLIB_ENCODING_DEFLATE
- string $data: 圧縮するデータ。
- int $level = -1: 圧縮レベルを指定する整数。-1から9までの値が指定でき、値が大きいほど圧縮率が高くなりますが、処理時間も増加します。デフォルト値は-1で、PHPのデフォルト圧縮レベルが使用されます。
- int $encoding = ZLIB_ENCODING_DEFLATE: 圧縮に使用するエンコーディングを指定する整数。ZLIB_ENCODING_DEFLATE (デフォルト) または ZLIB_ENCODING_GZIP が指定できます。
戻り値(return)
string|false
圧縮された文字列を返します。圧縮に失敗した場合は false を返します。
サンプルコード
gzdeflate と gzcompress の違いを解説する
<?php
/**
* gzdeflate と gzcompress の違いを示すサンプルコード.
*/
function demonstrateGzDeflateVsGzCompress(): void
{
$data = "This is a sample string to demonstrate the difference between gzdeflate and gzcompress functions in PHP.";
// gzdeflate を使用してデータを圧縮
$deflated = gzdeflate($data, 9); // 9 は最高の圧縮レベル
// gzcompress を使用してデータを圧縮
$compressed = gzcompress($data, 9); // 9 は最高の圧縮レベル
echo "Original data length: " . strlen($data) . "\n";
echo "Deflated data length: " . strlen($deflated) . "\n";
echo "Compressed data length: " . strlen($compressed) . "\n";
// 出力された文字列を比較する。gzcompress は gzdeflate より 10 バイト長いヘッダー/フッターを追加する。
echo "Deflated data: " . base64_encode($deflated) . "\n";
echo "Compressed data: " . base64_encode($compressed) . "\n";
// gzinflate を使用して deflate データを展開
$inflated = gzinflate($deflated);
// gzuncompress を使用して compress データを展開
$uncompressed = gzuncompress($compressed);
echo "Inflated data: " . $inflated . "\n";
echo "Uncompressed data: " . $uncompressed . "\n";
// 元のデータと展開されたデータが一致することを確認
echo "Deflate/Inflate match: " . ($data === $inflated ? "true" : "false") . "\n";
echo "Compress/Uncompress match: " . ($data === $uncompressed ? "true" : "false") . "\n";
}
demonstrateGzDeflateVsGzCompress();
PHP 8.4 の gzdeflate
関数は、文字列 $data
をdeflateアルゴリズムで圧縮します。gzcompress
関数との違いは、gzdeflate
が raw なdeflateストリームを生成するのに対し、gzcompress
は zlib 形式のヘッダーとフッターを付加することです。
gzdeflate
の第一引数 $data
には圧縮したい文字列を指定します。第二引数 $level
は圧縮レベルを 0 から 9 の整数で指定します。0 は圧縮なし、9 は最高の圧縮率を示し、デフォルト値は -1 です。第三引数 $encoding
はエンコーディング方式を指定します。デフォルトは ZLIB_ENCODING_DEFLATE
です。
戻り値は、圧縮された文字列を返します。エラーが発生した場合は false
を返します。
サンプルコードでは、gzdeflate
と gzcompress
で同じ文字列を圧縮し、それぞれの圧縮後のデータ長を比較しています。gzcompress
の方がヘッダー/フッターの分だけデータ長が長くなります。また、gzdeflate
で圧縮したデータは gzinflate
で、gzcompress
で圧縮したデータは gzuncompress
で展開できることを示しています。最後に、展開されたデータが元のデータと一致するかどうかを確認しています。gzdeflate
は、より小さいファイルサイズが必要で、zlibヘッダーが不要な場合に適しています。
gzdeflate
関数とgzcompress
関数の主な違いは、圧縮データの形式です。gzdeflate
は生のdeflate形式で圧縮しますが、gzcompress
はzlib形式で圧縮し、ヘッダーとチェックサムが付加されます。そのため、gzcompress
の方がわずかにデータサイズが大きくなります。
gzdeflate
で圧縮したデータはgzinflate
で、gzcompress
で圧縮したデータはgzuncompress
で展開する必要があります。圧縮レベルは0から9の範囲で指定でき、9が最も高い圧縮率ですが、処理時間も長くなります。デフォルト値の-1は、zlibライブラリのデフォルト設定を使用します。
圧縮・展開処理では、メモリを大量に消費する可能性があるため、特に大きなデータを扱う際には注意が必要です。また、圧縮・展開に失敗した場合、これらの関数はfalse
を返すため、戻り値のチェックを必ず行ってください。