PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPでgzipファイルを解凍・展開する方法を初心者向けに解説

gzip形式で圧縮されたファイルは、PHPに標準で用意されているgzopen関数とgzread関数を組み合わせることで簡単に解凍(展開)できます。メモリに一括して読み込まないため、大きなダンプファイルなども安定して処理できるのが特徴です。以下に具体的なコード例を示します。

コード例

$file_name = 'name_of_file.dump.gz';

$buffer_size = 4096; // 一度に読み込むバイト数(ここでは4KB)

// 出力ファイル名から .gz 拡張子を取り除く
$out_file_name = str_replace('.gz', '', $file_name);

$file = gzopen($file_name, 'rb'); // gzipファイルを読み取りバイナリモードで開く
$out_file = fopen($out_file_name, 'wb'); // 出力ファイルを書き込みバイナリモードで開く

// 入力ファイルの終端に達するまで繰り返し処理
while (!gzeof($file)) {
    fwrite($out_file, gzread($file, $buffer_size)); // buffer_sizeバイトずつ読み込んで書き込む
}

fclose($out_file); // 処理完了後、各ファイルを閉じる
gzclose($file);

実行結果

上記のコードを実行すると、gzipファイルが解凍され、以下のような出力が得られます。

圧縮ファイルを解凍することで抽出された、非圧縮状態のデータ。

コードの仕組み

まず、圧縮ファイルのパスを変数$file_nameに格納します。次に、一度に読み込むバイト数を表す固定値を変数$buffer_sizeに代入します。ここでは4KB(4096バイト)を指定していますが、ファイルサイズに応じて調整可能です。

出力ファイルには「.gz」という拡張子が付かないようにするため、str_replace関数で拡張子を取り除いた名前を変数$out_file_nameに保存しています。

その後、$out_file_nameを書き込みバイナリモード('wb')で開き、解凍元のファイルから読み取った内容を順次書き込めるようにします。$file_name側は読み取りモード('rb')で開き、gzread関数によって展開済みのデータを読み込みます。

whileループ内ではgzeof関数を使ってファイル終端(EOF)に達したかどうかを判定し、終端に到達するまでbuffer_sizeバイトずつの読み込みと書き込みを繰り返します。すべての処理が完了したら、fcloseおよびgzclose関数で各ファイルを確実に閉じてリソースを解放します。

補足:小さなファイルならgzdecodeも便利

ファイルサイズが小さく、メモリ上で完結させても問題ない場合は、以下のようにgzdecode関数を使うことでよりシンプルに記述できます。

$data = file_get_contents('name_of_file.dump.gz');
$uncompressed = gzdecode($data);
file_put_contents('name_of_file', $uncompressed);

ただし、この方法ではファイル全体をメモリに読み込むため、巨大なファイルを扱う場合は冒頭で紹介したバッファリング方式の利用を推奨します。

  1. ZArchiverでAndroidのファイルを圧縮・解凍する方法

    Android端末では、メールで受信したファイルやダウンロードしたファイルのすべての形式を開けるとは限りません。ファイルを圧縮する場合も同様です。ファイルの種類によっては、これが大きな不便につながることがあります。一部のファイルマネージャーではzipファイルの圧縮・解凍に対応していますが、rarや7z形式のファイルを開きたい場合はどうすればよいのでしょうか。そこで便利なのが「ZArchiver」です。このアプリを使えば、標準のファイルマネージャーが対応していない場合でも、Android上でファイルの圧縮と解凍を自由に行えます。Androidでファイルを圧縮する方法圧縮フォルダを作成する手順は、

  2. WordPressのwp-config.phpファイルを保護する方法を徹底解説

    ハッカーの視点で考えてみてください。何千ものWebサイトが利用しているプラットフォームに侵入したり、複数のサイトに対してブルートフォース攻撃を仕掛けたりするのは、彼らにとって魅力的な標的です。WP-Scannerのようなオープンソースツールが出回っている現在、初心者レベルの攻撃者でも、プロフェッショナルなWordPressサイトに侵入し、悪夢のような被害をもたらすことが可能になっています。 その中でもwp-config.phpは、サイトの運命を左右する最重要ファイルの一つです。このファイルが漏洩すれば、サイト全体が危険にさらされます。本記事では、wp-config.phpファイルを安全に保護す