PHP マニュアル
前のページ |  | 次のページ

# CLXXXIV. Zip ファイル関数

# 導入

このモジュールにより、ZIP 圧縮されたアーカイブとその内部のファイルに対する 透過的な読み書きが可能となります。

# 要件

## PHP 4 の同梱版

最初のバージョンは PHP 4 に同梱されています。また、PECL でバージョン 1.0 として公開されています。 http://pecl.php.net/package/zip を参照ください。 これは、Zip アーカイブの読み込みのみに対応しています。

このバージョンは、Guido Draheim による ZZIPlib ライブラリの関数を使用しています。 ZZIPlib バージョン >= 0.10.6 が必要です。

## PECL 版および PHP 5.2 以降の版

最新のバージョンは PHP 5.2.0 以降に同梱されており、 PECL 版のバージョン 1.1.0 以降となっています。これは、 外部のライブラリを必要としません。PHP 5.1 以降で使用した場合には Zip アーカイブの読み書きが可能で、PHP 4 で使用した場合には 読み込みのみが可能となります。

# インストール手順

この PECL 拡張 モジュールは PHP にバンドルされていません。 この PECL 拡張モジュールをインストールする方法は、 マニュアルの PECL 拡張モジュールのインストール という章にあります。 新規リリース・ダウンロード・ソースファイル・管理者情報・CHANGELOG といった関連する情報については、次の場所にあります。 http://pecl.php.net/package/zip.

## Linux でのインストール

### PHP 4 の同梱版のインストール

これらの関数を使用するには、zip サポートを有効にして PHP をコンパイルしなければなりません。そのためには、設定オプション `--with-zip[=DIR]` を使用します。 [DIR] は、ZZIPlib ライブラリのインストールされている場所です。

### PECL 版あるいは PHP 5.2 以降のバージョンの同梱版のインストール

これらの関数を使用するには、zip サポートを有効にして PHP をコンパイルしなければなりません。そのためには、設定オプション `--enable-zip` を使用します。 これは外部のライブラリを必要としません。

> 注意: PECL 版を PHP 4 で使用することもできます。そのためには、 同梱版の zip 拡張モジュールを無効にするか、あるいは zip サポートを無効にして PHP を再コンパイルする必要があります。

## Windows でのインストール

### PHP 4 の同梱版のインストール

Windows ユーザは、`php.ini` で `php_zip.dll` を有効にすると、 これらの関数を使用できるようになります。 PHP 4 の場合、この DLL は PHP の Windows ダウンロードバイナリの `extensions/` ディレクトリ にあります。 この PECL 拡張モジュール の DLL を PHP ダウンロード ページ または http://snaps.php.net/ からダウンロードできます。

> 注意: Zip のサポートは、PHP 4.1.0 以前は実験的なものでした。 この節に書かれている内容は、PHP 4.1.0 以降の Zip 拡張モジュールに関するものです。

### PECL 版あるいは PHP 5.2 以降のバージョンの同梱版のインストール

Windows ユーザは、`php.ini` で `php_zip.dll` を有効にすると、 これらの関数を使用できるようになります。 PHP 4 の場合、この DLL は PHP の Windows ダウンロードバイナリの `extensions/` ディレクトリ にあります。 この PECL 拡張モジュール の DLL を PHP ダウンロード ページ または http://snaps.php.net/ からダウンロードできます。

# 実行時設定

設定ディレクティブは定義されていません。

# リソース型

Zip モジュールでは二種類のリソース型が使用されます。 まず最初が Zip アーカイブを表す Zip directory で、 もうひとつはアーカイブのエントリを表す Zip Entry です。

# 定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

ZipArchive はクラス定数を使用します。定数には フラグ (FL_)、エラー (ER_) あるいはモード (接頭辞なし) の三種類があります。

`ZIPARCHIVE::CREATE` (integer)

  アーカイブが存在しない場合に、作成します。

`ZIPARCHIVE::OVERWRITE` (integer)

  常に新しいアーカイブを開始します。このモードは、 ファイルが既に存在する場合にはそれを上書きします。

`ZIPARCHIVE::EXCL` (integer)

  アーカイブが既に存在する場合はエラーとします。

`ZIPARCHIVE::CHECKCONS` (integer)

  アーカイブの一貫性チェックを別途行い、 失敗した場合はエラーとします。

`ZIPARCHIVE::FL_NOCASE` (integer)

  名前で検索する際に大文字小文字を区別しません。

`ZIPARCHIVE::FL_NODIR` (integer)

  ディレクトリ要素を無視します。

`ZIPARCHIVE::FL_COMPRESSED` (integer)

  圧縮されたデータを読み込みます。

`ZIPARCHIVE::FL_UNCHANGED` (integer)

  元のデータを使用し、変更内容を無視します。

`ZIPARCHIVE::CM_DEFAULT` (integer)

  圧縮あるいは保存のどちらか有効なほうを実行します。

`ZIPARCHIVE::CM_STORE` (integer)

  保存します (圧縮しません)。

`ZIPARCHIVE::CM_SHRINK` (integer)

  圧縮します。

`ZIPARCHIVE::CM_REDUCE_1` (integer)

  reduced with factor 1

`ZIPARCHIVE::CM_REDUCE_2` (integer)

  reduced with factor 2

`ZIPARCHIVE::CM_REDUCE_3` (integer)

  reduced with factor 3

`ZIPARCHIVE::CM_REDUCE_4` (integer)

  reduced with factor 4

`ZIPARCHIVE::CM_IMPLODE` (integer)

  imploded

`ZIPARCHIVE::CM_DEFLATE` (integer)

  deflated

`ZIPARCHIVE::CM_DEFLATE64` (integer)

  deflate64

`ZIPARCHIVE::CM_PKWARE_IMPLODE` (integer)

  PKWARE 方式。

`ZIPARCHIVE::CM_BZIP2` (integer)

  BZIP2 アルゴリズム。

`ZIPARCHIVE::ER_OK` (integer)

  エラーはありません。

`ZIPARCHIVE::ER_MULTIDISK` (integer)

  複数ディスクの zip アーカイブはサポートされません。

`ZIPARCHIVE::ER_RENAME` (integer)

  一時ファイルの名前変更に失敗しました。

`ZIPARCHIVE::ER_CLOSE` (integer)

  zip アーカイブのクローズに失敗しました。

`ZIPARCHIVE::ER_SEEK` (integer)

  シークエラー。

`ZIPARCHIVE::ER_READ` (integer)

  読み込みエラー。

`ZIPARCHIVE::ER_WRITE` (integer)

  書き込みエラー。

`ZIPARCHIVE::ER_CRC` (integer)

  CRC エラー。

`ZIPARCHIVE::ER_ZIPCLOSED` (integer)

  zip アーカイブはクローズされました。

`ZIPARCHIVE::ER_NOENT` (integer)

  そのファイルはありません。

`ZIPARCHIVE::ER_EXISTS` (integer)

  ファイルが既に存在します。

`ZIPARCHIVE::ER_OPEN` (integer)

  ファイルをオープンできません。

`ZIPARCHIVE::ER_TMPOPEN` (integer)

  一時ファイルの作成に失敗しました。

`ZIPARCHIVE::ER_ZLIB` (integer)

  Zlib エラー。

`ZIPARCHIVE::ER_MEMORY` (integer)

  メモリの確保に失敗しました。

`ZIPARCHIVE::ER_CHANGED` (string)

  エントリが変更されました。

`ZIPARCHIVE::ER_COMPNOTSUPP` (integer)

  圧縮方式がサポートされていません。

`ZIPARCHIVE::ER_EOF` (integer)

  予期せぬ EOF です。

`ZIPARCHIVE::ER_INVAL` (integer)

  無効な引数です。

`ZIPARCHIVE::ER_NOZIP` (integer)

  zip アーカイブではありません。

`ZIPARCHIVE::ER_INTERNAL` (integer)

  内部エラー。

`ZIPARCHIVE::ER_INCONS` (integer)

  矛盾した Zip アーカイブです。

`ZIPARCHIVE::ER_REMOVE` (integer)

  ファイルを削除できません。

`ZIPARCHIVE::ER_DELETED` (integer)

  エントリが削除されました。

# 例

例 1. Zip アーカイブの作成

`<?php
$zip = new ZipArchive();
$filename = "./test112.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$zip->addFromString("testfilephp.txt" . time(), "#1 This is a test string added as testfilephp.txt.\n");
$zip->addFromString("testfilephp2.txt" . time(), "#2 This is a test string added as testfilephp2.txt.\n");
$zip->addFile($thisdir . "/too.php","/testfromfile.php");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
$zip->close();
?>`

例 2. アーカイブの詳細の出力および一覧表示

`<?php
$za = new ZipArchive();
$za->open('test_with_comment.zip');
print_r($za);
var_dump($za);
echo "numFiles: " . $za->numFiles . "\n";
echo "status: " . $za->status . "\n";
echo "statusSys: " . $za->statusSys . "\n";
echo "filename: " . $za->filename . "\n";
echo "comment: " . $za->comment . "\n";
for ($i=0; $i<$za->numFiles;$i++) {
echo "index: $i\n";
print_r($za->statIndex($i));
}
echo "numFile:" . $za->numFiles . "\n";
?>`

例 3. Zip ストリームラッパーによる OpenOffice メタ情報の読み込み

`<?php
$reader = new XMLReader();
$reader->open('zip://' . dirname(__FILE__) . '/test.odt#meta.xml');
$odt_meta = array();
while ($reader->read()) {
if ($reader->nodeType == XMLREADER::ELEMENT) {
$elm = $reader->name;
} else {
if ($reader->nodeType == XMLREADER::END_ELEMENT && $reader->name == 'office:meta') {
break;
}
if (!trim($reader->value)) {
continue;
}
$odt_meta[$elm] = $reader->value;
}
}
print_r($odt_meta);
?>`

この例は旧 API (PHP 4 用) を使用します。まず ZIP ファイルアーカイブをオープンし、アーカイブ内の各ファイルを読み込み、 その内容を出力します。この例で使用するアーカイブ `test2.zip` は、ZZIPlib のソース配布物に含まれているテスト用アーカイブのひとつです。

例 4. Zip の使用例

`<?php
$zip = zip_open("/tmp/test2.zip");
if ($zip) {
while ($zip_entry = zip_read($zip)) {
echo "Name: " . zip_entry_name($zip_entry) . "\n";
echo "Actual Filesize: " . zip_entry_filesize($zip_entry) . "\n";
echo "Compressed Size: " . zip_entry_compressedsize($zip_entry) . "\n";
echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";
if (zip_entry_open($zip, $zip_entry, "r")) {
echo "File Contents:\n";
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo "$buf\n";
zip_entry_close($zip_entry);
}
echo "\n";
}
zip_close($zip);
}
?>`

前のページ | ホーム | 次のページ
yp_order | 上に戻る | zip_close