PHP ZIP函数

PHP ZipArchive::open() 方法用于打开新的或现有的 zip 文件以进行读取、写入或修改.

自 libzip 1.6.0 起,空文件不再是有效的存档。

语法

public ZipArchive::open(filename, flags) 

参数

filename必填。 指定要打开的 ZIP 存档的文件名。
flags可选。 指定用于打开存档的模式。它可以采用以下值:
  • ZipArchive::OVERWRITE - 如果存档存在,则忽略其当前内容。换句话说,以与空存档相同的方式处理它。
  • ZipArchive::CREATE - 如果存档不存在,则创建它。
  • ZipArchive::RDONLY - 在以下位置打开存档只读模式。
  • ZipArchive::EXCL - 如果存档已存在则出错。
  • ZipArchive::CHECKCONS - 对存档执行额外的一致性检查,如果失败则出错。
  • ZipArchive::CHECKCONS - 对存档执行额外的一致性检查,如果失败则出错。 

返回值

成功时返回 true,或者出现以下错误代码之一:

  • ZipArchive::ER_EXISTS - 文件已存在。
  • ZipArchive::ER_INCONS - Zip 存档不一致。
  • ZipArchive::ER_INVAL - 参数无效。
  • ZipArchive::ER_MEMORY - Malloc 失败。
  • ZipArchive::ER_NOENT - 没有这样的文件。
  • ZipArchive::ER_NOZIP - 不是 zip 存档。
  • ZipArchive::ER_OPEN - 无法打开文件。
  • ZipArchive::ER_READ - 读取错误。
  • ZipArchive::ER_SEEK - 查找错误。

示例:打开并解压

假设我们有一个名为 example.zip 的 zip 文件,其中包含以下文件:

test.txt
example.csv
image.png 

下面的示例演示了如何在指定位置打开并提取此 zip 文件内容:

<?php
$zip = new ZipArchive;
$result = $zip->open('example.zip');

if ($result === TRUE) {
  $zip->extractTo('/example/');
  $zip->close();
  echo 'Zip file opened and extracted successfully.';
} else {
  echo 'Opening of the Zip file failed.';
}
?> 

上述代码的输出将是:

Zip file opened and extracted successfully. 

示例:创建一个存档

下面的示例描述了如何创建存档。

<?php
$zip = new ZipArchive;
$result = $zip->open('example.zip', ZipArchive::CREATE);

if ($result === TRUE) {
  //将文件添加到存档中
  $zip->addFromString('test.txt', 'file content goes here');
  $zip->addFile('/path/example.pdf', 'newname.pdf');
  $zip->close();
  echo 'Zip file created successfully.';
} else {
  echo 'Zip file can not be created.';
}
?> 

上述代码的输出将是:

Zip file created successfully. 

示例:创建临时存档

考虑下面的示例,其中此方法用于创建临时存档。

<?php
$name = tempnam(sys_get_temp_dir(), "FOO");
$zip = new ZipArchive;

//截断为空文件无效
$result = $zip->open($name, ZipArchive::OVERWRITE); 

if ($result === TRUE) {
  $zip->addFile('/path/example.pdf', 'newname.pdf');
  $zip->close();
  echo 'Zip file created successfully.';
} else {
  echo 'Zip file can not be created.';
}
?> 

上述代码的输出将是:

Zip file created successfully.