【PHP8.x】gzcompress関数の使い方
gzcompress関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
gzcompress関数は、与えられた文字列を指定されたレベルで圧縮する関数です。この関数は、DEFLATE圧縮アルゴリズムを用いてデータを圧縮し、圧縮された文字列を返します。主にデータ量を削減し、ストレージ容量の節約やネットワーク転送の高速化に役立ちます。
gzcompress関数は、以下の引数を受け取ります。
$data(string): 圧縮対象となる文字列データです。必須の引数です。$level(int, オプション): 圧縮レベルを0から9の範囲で指定します。0は圧縮を行わず、9は最大の圧縮率を意味します。デフォルト値は-1で、zlibライブラリのデフォルト圧縮レベルが使用されます。$encoding(int, オプション): エンコーディング方式を指定します。ZLIB_ENCODING_RAW(負の値) を指定すると、zlibヘッダやtrailerが付加されないRawストリームを生成します。ZLIB_ENCODING_DEFLATE(正の値) を指定すると、RFC 1951に準拠したdeflate形式で圧縮されます。ZLIB_ENCODING_GZIP(0)を指定すると、RFC 1952に準拠したgzip形式で圧縮されます。デフォルト値はZLIB_ENCODING_DEFLATEです。
圧縮に失敗した場合、gzcompress関数は false を返します。正常に圧縮された場合は、圧縮された文字列が返されます。圧縮レベルを調整することで、圧縮時間と圧縮率のバランスを調整できます。ウェブアプリケーションにおけるデータ転送や、ファイルストレージにおけるデータ圧縮など、様々な場面で利用される関数です。
構文(syntax)
1gzcompress(string $data, int $level = -1, int $encoding = ZLIB_ENCODING_DEFLATE): string|false
引数(parameters)
string $data, int $level = -1, int $encoding = ZLIB_ENCODING_DEFLATE
- string $data: 圧縮したい文字列データ
- int $level = -1: 圧縮レベルを指定します。-1 はデフォルト値で、ZLIB_DEFAULT_COMPRESSION に相当します。値は 0 (圧縮なし) から 9 (最大圧縮) まで指定できます。
- int $encoding = ZLIB_ENCODING_DEFLATE: 使用するエンコーディングを指定します。デフォルトは ZLIB_ENCODING_DEFLATE です。
戻り値(return)
string|false
圧縮された文字列、または圧縮に失敗した場合は false を返します。
サンプルコード
PHPでgzcompress/gzuncompressを使う
1<?php 2 3/** 4 * 文字列を圧縮し、圧縮された文字列を返します。 5 * 6 * @param string $data 圧縮する文字列 7 * @return string|false 圧縮された文字列。失敗した場合は false。 8 */ 9function compress_data(string $data): string|false 10{ 11 // 圧縮レベルを指定 (省略した場合はデフォルトの圧縮レベルが使用されます) 12 $compressed_data = gzcompress($data); 13 14 if ($compressed_data === false) { 15 return false; // 圧縮に失敗した場合 16 } 17 18 return $compressed_data; 19} 20 21/** 22 * 圧縮された文字列を解凍し、元の文字列を返します。 23 * 24 * @param string $compressed_data 解凍する文字列 25 * @return string|false 解凍された文字列。失敗した場合は false。 26 */ 27function uncompress_data(string $compressed_data): string|false 28{ 29 // 圧縮されたデータを解凍 30 $uncompressed_data = gzuncompress($compressed_data); 31 32 if ($uncompressed_data === false) { 33 return false; // 解凍に失敗した場合 34 } 35 36 return $uncompressed_data; 37} 38 39// 使用例 40$original_string = "This is a string to be compressed and uncompressed."; 41 42// 圧縮 43$compressed_string = compress_data($original_string); 44 45if ($compressed_string !== false) { 46 echo "圧縮後の文字列: " . base64_encode($compressed_string) . "\n"; // バイナリデータを表示するためにbase64エンコード 47 48 // 解凍 49 $uncompressed_string = uncompress_data($compressed_string); 50 51 if ($uncompressed_string !== false) { 52 echo "解凍後の文字列: " . $uncompressed_string . "\n"; 53 } else { 54 echo "解凍に失敗しました。\n"; 55 } 56} else { 57 echo "圧縮に失敗しました。\n"; 58} 59 60?>
PHPのgzcompress関数は、文字列を圧縮するために使用されます。第一引数 $data に圧縮したい文字列を渡します。第二引数 $level で圧縮レベルを0から9の間で指定できます。省略した場合、デフォルトの圧縮レベルが使用されます。圧縮レベルが高いほど圧縮率は上がりますが、処理時間も長くなります。第三引数 $encoding は圧縮形式を指定します。通常は ZLIB_ENCODING_DEFLATE が使用されます。
関数は、圧縮された文字列を返します。圧縮に失敗した場合は false を返します。
サンプルコードでは、compress_data 関数で文字列を圧縮し、uncompress_data 関数で圧縮された文字列を解凍しています。圧縮されたデータはバイナリデータであるため、画面に出力する際は base64_encode 関数でエンコードしています。
gzuncompress 関数は、gzcompress 関数で圧縮された文字列を解凍するために使用されます。引数に圧縮された文字列を渡すと、元の文字列が返されます。解凍に失敗した場合は false を返します。
サンプルコードでは、圧縮と解凍が成功したかどうかを if 文で確認し、結果に応じてメッセージを出力しています。
gzcompress関数は文字列を圧縮する関数です。圧縮レベルは省略可能で、-1を指定するとデフォルトの圧縮レベルが使用されます。圧縮に失敗するとfalseを返すため、必ず返り値を確認しましょう。圧縮されたデータはバイナリデータとなるため、そのまま表示すると文字化けする可能性があります。base64_encode関数などでエンコードしてから表示することを推奨します。また、gzuncompress関数で解凍する際も、失敗時にfalseが返るため、エラーハンドリングを忘れないようにしましょう。圧縮・解凍処理はCPU負荷が高くなる可能性があるため、大量のデータを扱う場合は注意が必要です。
PHPのgzcompressとgzdeflateを比較する
1<?php 2 3/** 4 * gzcompress, gzdeflate の比較サンプル. 5 */ 6 7$data = "This is a test string to be compressed."; 8 9// gzcompress を使用してデータを圧縮. 10$compressed_data_compress = gzcompress($data, 9); // level 9 は最高の圧縮率. 11 12// gzdeflate を使用してデータを圧縮. 13$compressed_data_deflate = gzdeflate($data, 9); // level 9 は最高の圧縮率. 14 15// 圧縮されたデータのサイズを表示. 16echo "Original size: " . strlen($data) . " bytes\n"; 17echo "gzcompress size: " . strlen($compressed_data_compress) . " bytes\n"; 18echo "gzdeflate size: " . strlen($compressed_data_deflate) . " bytes\n"; 19 20// 圧縮データをデコードして比較. 21$decompressed_data_compress = gzuncompress($compressed_data_compress); 22$decompressed_data_deflate = gzinflate($compressed_data_deflate); 23 24// 元のデータとデコードされたデータが一致するか確認. 25if ($data === $decompressed_data_compress) { 26 echo "gzcompress: Successfully compressed and decompressed.\n"; 27} else { 28 echo "gzcompress: Compression or decompression failed.\n"; 29} 30 31if ($data === $decompressed_data_deflate) { 32 echo "gzdeflate: Successfully compressed and decompressed.\n"; 33} else { 34 echo "gzdeflate: Compression or decompression failed.\n"; 35} 36 37?>
PHP 8.4 の gzcompress 関数は、データを圧縮するために使用されます。この関数は、文字列型の $data を引数として受け取り、圧縮された文字列を返します。オプションで、圧縮レベル $level を指定できます。$level は 0 から 9 までの整数で、0 は圧縮なし、9 は最高の圧縮率を示します。デフォルト値は -1 で、zlib ライブラリのデフォルトの圧縮レベルが使用されます。また、$encoding 引数でエンコーディング方式を指定できますが、通常はデフォルト値の ZLIB_ENCODING_DEFLATE を使用します。
サンプルコードでは、gzcompress と gzdeflate という似た機能を持つ関数との比較を行っています。どちらの関数もデータを圧縮しますが、圧縮フォーマットが異なります。gzcompress は zlib フォーマットを使用し、gzdeflate は deflate フォーマットを使用します。
コードでは、まず $data という文字列を定義し、それぞれの関数で圧縮しています。gzcompress($data, 9) は、最高レベルの圧縮を行い、圧縮されたデータを $compressed_data_compress に格納します。同様に、gzdeflate($data, 9) も最高レベルで圧縮し、結果を $compressed_data_deflate に格納します。
その後、元のデータサイズと圧縮後のデータサイズを比較し、圧縮効果を確認しています。圧縮されたデータは、それぞれ gzuncompress 関数および gzinflate 関数で元のデータに戻すことができます。最後に、圧縮・解凍後のデータが元のデータと一致するかどうかを検証し、結果を表示しています。gzcompress で圧縮したデータは gzuncompress で、gzdeflate で圧縮したデータは gzinflate で解凍する必要がある点に注意してください。
gzcompressとgzdeflateはどちらもデータを圧縮しますが、互換性のある解凍関数が異なります。gzcompressで圧縮したデータはgzuncompressで、gzdeflateで圧縮したデータはgzinflateで解凍する必要があります。圧縮レベルは0から9で指定し、9が最も高い圧縮率ですが、処理時間も長くなります。圧縮に失敗した場合、gzcompressとgzdeflateはfalseを返すため、戻り値がfalseでないか確認することが重要です。gzcompressはzlibヘッダとトレーラを含むのに対し、gzdeflateは生のdeflateストリームを生成するため、使用する場面に応じて適切な関数を選択してください。セキュリティ上の理由から、外部からの入力データを直接圧縮・解凍する際には、データサイズの上限を設定することを推奨します。