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

PHPの圧縮ストリームラッパーの使い方徹底解説


はじめに

PHPには、zlib://bzip2://zip:// という3つの圧縮ストリームラッパーが標準で用意されています。これらを活用すると、通常のファイル操作関数と同じ感覚で圧縮ファイルの読み書きが行えるため、コードを大幅にシンプルにできます。

compress.zlib://

compress.zlib:// は、gzopen() 関数と同様の動作をするラッパーです。最大の特徴は、fread() をはじめとするファイルシステム系の関数と組み合わせて使える点にあります。gzip形式の圧縮・展開を手軽に実装したい場合に便利です。

compress.bzip2://

compress.bzip2:// は、bzopen() 関数に相当する機能を提供するラッパーです。zlib および bzip2 の両ラッパーは、fopencookie をサポートしていないシステム上でも動作するため、サーバー環境を選ばずに利用できるのも大きな利点です。

zip://

zip:// ラッパーは、ZIP拡張モジュールによって登録されます。PHP 7.2.0 以降では、パスワードで暗号化されたアーカイブにも対応しており、ストリームコンテキストの「password」オプションでパスワードを指定することが可能です。

使用例

まず、zlibによる圧縮ファイルを作成する基本的なコードを見てみましょう。

<?php
file_put_contents("compress.zlib://test.txt.gz", "Hello World\r\n");
?>

次に、圧縮されたファイルを展開して内容を読み出す方法です。

<?php
echo file_get_contents("compress.zlib://test.txt.gz");
?>

さらに、組み込みの copy() 関数を使えば、圧縮ファイルの作成と展開をわずか2行で記述できます。

copy('file.txt', 'compress.zlib://' . 'file.txt.gz');
copy('compress.zlib://' . 'file.txt.gz', 'file.txt');

このように、ストリームラッパーを活用すれば、専用の圧縮関数を個別に呼び出す必要がなく、普段使い慣れたファイル操作関数だけで圧縮処理を完結できます。ログファイルの圧縮保存や、既存コードへの最小限の変更での圧縮対応など、実務でも幅広く応用できるテクニックです。

  1. PHPのzip_entry_compressionmethod()関数の使い方を徹底解説!圧縮方式の取得方法と実例

    PHPのzip_entry_compressionmethod()関数は、ZIPアーカイブ内のエントリ(ファイル)に使用されている圧縮方式(compression method)を取得するための関数です。ZIPファイルの中身を解析したい場合や、各ファイルがどのような圧縮方式で格納されているかを確認したい場合に役立ちます。基本構文zip_entry_compressionmethod(zip_entry)パラメータzip_entry:ZIPエントリのリソースを指定します。必須の引数です。このリソースは、zip_read()関数によって読み込まれたZIPディレクトリエントリである必要があります。戻

  2. Pythonのzlibモジュールで実現するgzip互換のデータ圧縮

    Python標準ライブラリのzlibモジュールは、GNUプロジェクトの一部であるZlib圧縮ライブラリ(https://www.zlib.net)をPythonから利用するための実装を提供します。gzip形式とも互換性があり、データ圧縮・解凍の処理を手軽に行えるのが特徴です。この記事では、zlibモジュールに定義されている主要な関数とクラスについて、具体例を交えながら解説します。compress()関数 ― データを圧縮するcompress()関数は、decompress()関数と並ぶこのモジュールの中心的なインターフェースです。引数として渡したデータを圧縮し、バイトオブジェクト(bytes型