【PHP8.x】gzencode関数の使い方

作成日: 更新日:

gzencode関数は、与えられた文字列データを標準的なGZIP形式で圧縮する関数です。この関数は、データのサイズを小さくすることで、ウェブサーバーからクライアントへのデータ転送を高速化したり、ファイルシステムやデータベースでの保存容量を節約したりする目的で利用されます。

第一引数には、圧縮したい元の文字列データを渡します。第二引数にはオプションで圧縮レベルを整数で指定でき、デフォルトは-1です。この-1はzlibライブラリのデフォルト設定を意味し、速度と圧縮率のバランスが取れた値です。0を指定すると無圧縮となり、1を指定すると最も高速な圧縮、9を指定すると最も高い圧縮率が得られますが、その分処理時間も長くなります。

gzencode関数は、圧縮処理が成功した場合は圧縮されたバイナリ文字列を返します。何らかの理由で圧縮に失敗した場合には、ブール値のfalseを返しますので、戻り値の確認が重要です。圧縮されたデータは、通常、gzdecode関数などを用いて元の文字列データに復元できます。これにより、効率的なデータの管理と利用が可能になります。

基本的な使い方

構文(syntax)

$original_data = "これは圧縮したい元の文字列です。";
$compressed_data = gzencode($original_data, 9);

引数(parameters)

string $data, int $level = -1, int $encoding = FORCE_GZIP

  • string $data: GZIP圧縮したいデータ
  • int $level = -1: 圧縮レベルを指定する整数。-1はデフォルト値で、PHPのGZIP圧縮設定に従います。0は無圧縮、9は最高圧縮です。
  • int $encoding = FORCE_GZIP: エンコーディングの種類を指定する整数。デフォルトはFORCE_GZIPです。

戻り値(return)

string|false

指定された文字列をzlib圧縮したバイナリ形式の文字列を返します。圧縮に失敗した場合はfalseを返します。

サンプルコード

gzencodeとgzcompressで圧縮する

<?php

/**
 * gzencode と gzcompress の違いを示すサンプルコード
 * gzencode は HTTP ヘッダーに適した形式で圧縮します。
 * gzcompress はより一般的な圧縮形式です。
 */

$data = "This is a string that will be compressed.";

// gzencode で圧縮
$encoded_data = gzencode($data, 9); // 9 は最高の圧縮レベル

// gzcompress で圧縮
$compressed_data = gzcompress($data, 9); // 9 は最高の圧縮レベル

// 結果の比較
echo "Original length: " . strlen($data) . "\n";
echo "gzencode length: " . strlen($encoded_data) . "\n";
echo "gzcompress length: " . strlen($compressed_data) . "\n";

// gzencode の結果をデコード
$decoded_data_gzencode = gzdecode($encoded_data);

// gzcompress の結果をデコード
$decoded_data_gzcompress = gzuncompress($compressed_data);


echo "gzencode decode result: " . ($decoded_data_gzencode === $data ? "OK" : "NG") . "\n";
echo "gzcompress decode result: " . ($decoded_data_gzcompress === $data ? "OK" : "NG") . "\n";
?>

PHPのgzencode関数は、指定された文字列をGZIP形式で圧縮するために使用されます。この関数は特に、Webサーバーとブラウザ間のHTTP通信において、コンテンツの転送量を削減する目的でよく利用されます。

引数$dataには圧縮したい元の文字列を指定します。$levelは圧縮レベルで、-1はデフォルト設定、0は無圧縮、1から9は圧縮の度合いを示し、9が最も高い圧縮率です。$encodingはGZIP形式の種類を指定しますが、通常はデフォルトのFORCE_GZIPで問題ありません。処理が成功すると圧縮された文字列を返しますが、失敗した場合はfalseを返します。

似た機能を持つgzcompress関数も文字列を圧縮しますが、こちらはGZIP形式ではなくZLIB形式で圧縮します。gzencodeはHTTPヘッダーに含めるのに適した形式である一方、gzcompressはより一般的な圧縮用途に利用されます。

提供されたサンプルコードでは、まず「This is a string that will be compressed.」という文字列を定義しています。次に、この文字列をgzencodegzcompressの両方で圧縮レベル9を指定して圧縮し、それぞれの圧縮後の文字列の長さを比較しています。通常、圧縮された文字列の長さは元の文字列よりも短くなります。

さらに、圧縮されたデータをそれぞれ対応する関数、gzdecodegzuncompressを使って元のデータに戻しています。gzencodeで圧縮したデータはgzdecodeで、gzcompressで圧縮したデータはgzuncompressでデコードされ、元の文字列と完全に一致するかどうかを確認することで、圧縮とデコードが正しく行われたことを検証しています。

gzencode は主にHTTP通信に適したGZIP形式で、gzcompress はより汎用的なZLIB形式でデータを圧縮します。用途に合わせて使い分けることが重要です。両関数とも圧縮に失敗すると false を返すため、必ず戻り値をチェックし、エラー処理を実装してください。圧縮レベルの引数は -1 がデフォルト、9 が最高の圧縮率を示します。利用シーンに応じて調整してください。また、それぞれ gzdecode および gzuncompress といった対応するデコード関数とペアで利用することを忘れないでください。サンプルコードのようにデコード後のデータが元のデータと一致するか確認することで、処理の正しさを検証できます。

【PHP8.x】gzencode関数の使い方 | いっしー@Webエンジニア