PHP 手册
上一页 |  | 下一页

# CLXXXVII. Zip File Functions

# 简介

This extension enables you to transparently read or write ZIP compressed archives and the files inside them.

# 需求

## PHP 4

The bundled PHP 4 version requires ZZIPlib, by Guido Draheim, version 0.10.6 or later

## PHP 5.2.0 or later

This extension uses the functions of zlib by Jean-loup Gailly and Mark Adler.

# 安装

## PHP 4

> 注意: Zip support before PHP 4.1.0 is experimental.

警告
Because the PHP 4 zip extension is unmaintained we recommend that the PECL extension is used rather than the bundled one.

### Linux systems

In order to use these functions you must compile PHP with zip support by using the `--with-zip[=DIR]` configure option, where [DIR] is the prefix of the ZZIPlib library install.

### Windows

Windows users need to enable `php_zip.dll` inside of `php.ini` in order to use these functions.

## PHP 5.2.0 and later

### Linux systems

In order to use these functions you must compile PHP with zip support by using the `--enable-zip` configure option.

### Windows

Windows users need to enable `php_zip.dll` inside of `php.ini` in order to use these functions.

## Installation via PECL

安装此 PECL 扩展库的信息可在手册中标题为 PECL 扩展库安装的一章中找到。 更多信息如新版本，下载，源文件，维护者信息以及更新日志等可以在这里找到： http://pecl.php.net/package/zip.

可以从 PHP 下载页面或者 http://snaps.php.net/ 下载此 PECL 扩展的 DLL 文件。

在 PHP 4 中本 DLL 位于 PHP Windows 执行包中的 `extensions/` 目录下。

# 运行时配置

本扩展模块在 `php.ini` 中未定义任何配置选项。

# 资源类型

There are two resource types used in the Zip module. The first one is the Zip directory for the Zip archive, the second Zip Entry for the archive entries.

# 预定义常量

以下常量由本扩展模块定义，因此只有在本扩展模块被编译到 PHP 中，或者在运行时被动态加载后才有效。

ZipArchive uses class constants. There is three types of constants, Flags (FL_) errors (ER_) or mode (no prefix).

`ZIPARCHIVE::CREATE` (integer)

  Create the archive if it does not exist.

`ZIPARCHIVE::OVERWRITE` (integer)

  Always start a new archive, this mode will overwrite the file if it already exists.

`ZIPARCHIVE::EXCL` (integer)

  Error if archive already exists.

`ZIPARCHIVE::CHECKCONS` (integer)

  Perform additional consistency checks on the archive, and error if they fail.

`ZIPARCHIVE::FL_NOCASE` (integer)

  Ignore case on name lookup

`ZIPARCHIVE::FL_NODIR` (integer)

  Ignore directory component

`ZIPARCHIVE::FL_COMPRESSED` (integer)

  Read compressed data

`ZIPARCHIVE::FL_UNCHANGED` (integer)

  Use original data, ignoring changes.

`ZIPARCHIVE::CM_DEFAULT` (integer)

  better of deflate or store.

`ZIPARCHIVE::CM_STORE` (integer)

  stored (uncompressed).

`ZIPARCHIVE::CM_SHRINK` (integer)

  shrunk

`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 imploding

`ZIPARCHIVE::CM_BZIP2` (integer)

  BZIP2 algorithm

`ZIPARCHIVE::ER_OK` (integer)

  No error.

`ZIPARCHIVE::ER_MULTIDISK` (integer)

  Multi-disk zip archives not supported.

`ZIPARCHIVE::ER_RENAME` (integer)

  Renaming temporary file failed.

`ZIPARCHIVE::ER_CLOSE` (integer)

  Closing zip archive failed

`ZIPARCHIVE::ER_SEEK` (integer)

  Seek error

`ZIPARCHIVE::ER_READ` (integer)

  Read error

`ZIPARCHIVE::ER_WRITE` (integer)

  Write error

`ZIPARCHIVE::ER_CRC` (integer)

  CRC error

`ZIPARCHIVE::ER_ZIPCLOSED` (integer)

  Containing zip archive was closed

`ZIPARCHIVE::ER_NOENT` (integer)

  No such file.

`ZIPARCHIVE::ER_EXISTS` (integer)

  File already exists

`ZIPARCHIVE::ER_OPEN` (integer)

  Can't open file

`ZIPARCHIVE::ER_TMPOPEN` (integer)

  Failure to create temporary file.

`ZIPARCHIVE::ER_ZLIB` (integer)

  Zlib error

`ZIPARCHIVE::ER_MEMORY` (integer)

  Memory allocation failure

`ZIPARCHIVE::ER_CHANGED` (string)

  Entry has been changed

`ZIPARCHIVE::ER_COMPNOTSUPP` (integer)

  Compression method not supported.

`ZIPARCHIVE::ER_EOF` (integer)

  Premature EOF

`ZIPARCHIVE::ER_INVAL` (integer)

  Invalid argument

`ZIPARCHIVE::ER_NOZIP` (integer)

  Not a zip archive

`ZIPARCHIVE::ER_INTERNAL` (integer)

  Internal error

`ZIPARCHIVE::ER_INCONS` (integer)

  Zip archive inconsistent

`ZIPARCHIVE::ER_REMOVE` (integer)

  Can't remove file

`ZIPARCHIVE::ER_DELETED` (integer)

  Entry has been deleted

# 范例

例 1. Create a Zip archive

`<?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. Dump the archive details and listing

`<?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 stream wrapper, read an OpenOffice meta info

`<?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);
?>`

This example uses the old API (PHP 4), it opens a ZIP file archive, reads each file in the archive and prints out its contents. The `test2.zip` archive used in this example is one of the test archives in the ZZIPlib source distribution.

例 4. Zip Usage Example

`<?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