PHPのZipコンテキストオプション徹底解説
概要
PHPのZIP拡張モジュールは、zip:// ストリームラッパーを登録しており、これを使うことでZIPアーカイブ内のファイルにストリーム経由でアクセスできます。さらに、PHP 7.2.0以降では、暗号化されたアーカイブに対するパスワード認証がサポートされています。
Zipコンテキストオプションとして用意されているのは「password」のみです。このオプションを指定することで、パスワードで保護されたアーカイブを読み込む際に認証情報を渡すことが可能になります。
コンテキストオプション一覧
| オプション名 | 説明 |
|---|---|
| password | 暗号化されたZIPアーカイブの復号に使用するパスワード |
使用例
パスワード付きZIPアーカイブの作成
まず、ZipArchiveクラスを使って、パスワードで保護されたZIPアーカイブを次のように作成します。
<?php
$zip = new ZipArchive;
$zip->open('test.zip');
$zip->setPassword("MySecretPassword");
$zip->addFile('c:/xampp/php/test.txt', 'test.txt');
$zip->close();
?>
setPassword()メソッドでアーカイブ全体のパスワードを設定し、addFile()メソッドでファイルを追加しています。
zip://ストリームからファイルを読み取る
暗号化されたアーカイブからファイルを読み取るには、stream_context_create()関数でコンテキストを作成し、passwordオプションにパスワードを指定します。作成したコンテキストをfile_get_contents()関数の第3引数に渡すことで、zip://ストリーム経由でファイルの内容を取得できます。
<?php
$opts = array(
'zip' => array(
'password' => 'secret',
),
);
$context = stream_context_create($opts);
echo file_get_contents('zip://test.zip#test.txt', false, $context);
?>
なお、zip://ラッパーでアーカイブ内の特定のファイルにアクセスする場合は、「zip://アーカイブ名#ファイル名」のように、シャープ(#)で区切って指定する点に注意してください。パスワードを指定せずに暗号化されたアーカイブへアクセスした場合、読み取りは失敗しますので、必ずコンテキストオプションで正しいパスワードを設定してください。
-
PHPのzip_entry_compressed_size()関数とは?ZIPエントリの圧縮後サイズを取得する方法を解説
zip_entry_compressed_size()関数は、ZIPアーカイブ内のエントリ(ファイル)の圧縮後のサイズを取得するための関数です。ZIPファイルを開いて各エントリを読み込む際に、そのファイルが実際にどれだけの容量で格納されているかを確認できます。 構文 zip_entry_compressed_size(zip_entry) パラメータ zip_entry − サイズを取得したいZIPエントリのリソース。必須のパラメータです。通常はzip_read()で読み込んだエントリを指定します。 戻り値 指定したZIPアーカイブエントリの圧縮後のファイルサイズ(バイト数)を返します。元
-
PHPのzip_entry_close()関数とは?使い方とサンプルコードを解説
PHPのzip_entry_close()関数は、zip_entry_open()関数によって開かれたZIPアーカイブ内のエントリを閉じるために使用されます。ZIPファイルを読み込んだ後は、リソースを適切に解放するためにこの関数でエントリを閉じることが推奨されます。構文zip_entry_close(zip_entry)パラメータzip_entry − 閉じたいZIPエントリのリソースを指定します。このパラメータは必須です。戻り値zip_entry_close()関数は、処理が成功した場合にTRUEを返し、失敗した場合にFALSEを返します。使用例以下は具体的な使用例です。ここでは、アーカイブ