ZipArchive::addGlob

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL zip >= 1.9.0)

ZipArchive::addGlob通过 glob 模式添加目录中的文件

说明

public ZipArchive::addGlob(string $pattern, int $flags = 0, array $options = []): array|false

添加与 glob pattern 匹配的目录中的文件。

注意: 为了最大程度的移植性,建议始终使用正斜杠 (/) 作为 ZIP 文件名中的目录分隔符。

参数

pattern

将与之匹配文件的 glob() 模式。

flags

glob() 标志的位掩码。

options

一个关联数组选项。可用的选项是

  • "add_path"

    在转换为存档中文件的本地路径时要预先添加的前缀。这将在 "remove_path""remove_all_path" 选项定义的任何移除操作之后应用。

  • "remove_path"

    在添加到存档之前,从匹配的文件路径中删除的前缀。

  • "remove_all_path"

    true 用于仅使用文件名并添加到存档的根目录。

  • "flags"

    位掩码,由 ZipArchive::FL_OVERWRITEZipArchive::FL_ENC_GUESSZipArchive::FL_ENC_UTF_8ZipArchive::FL_ENC_CP437ZipArchive::FL_OPEN_FILE_NOW 组成。这些常量的行为在 ZIP 常量 页面上进行了描述。

  • "comp_method"

    压缩方法,一个 ZipArchive::CM_* 常量,参见 ZIP 常量 页面。

  • "comp_flags"

    压缩级别。

  • "enc_method"

    加密方法,一个 ZipArchive::EM_* 常量,参见 ZIP 常量 页面。

  • "enc_password"

    用于加密的密码。

返回值

成功时为添加的文件的 array,失败时为 false

变更日志

版本 说明
8.0.0 / 1.18.0 options 中添加了 "flags"
8.0.0 / 1.18.1 options 中添加了 "comp_method""comp_flags""enc_method""enc_password"
8.3.0 / 1.22.1 添加了 ZipArchive::FL_OPEN_FILE_NOW

示例

示例 #1 ZipArchive::addGlob() 示例

添加当前工作目录中的所有 php 脚本和文本文件

<?php
$zip
= new ZipArchive();
$ret = $zip->open('application.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
if (
$ret !== TRUE) {
printf('Failed with code %d', $ret);
} else {
$options = array('add_path' => 'sources/', 'remove_all_path' => TRUE);
$zip->addGlob('*.{php,txt}', GLOB_BRACE, $options);
$zip->close();
}
?>

参见

添加注释

用户贡献注释 6 个注释

johnsmith at na dot com
9 年前
'remove_all_path' 或 'remove_path' 选项似乎都没有生效
Francesc Pineda Segarra
7 年前
对我来说,更好的方法似乎是

$options = array('add_path' => DIRECTORY_SEPARATOR, 'remove_all_path' => TRUE);

在 Windows 上使用 \,在其他系统上使用 /
sunbinzzzzz at gmail dot com
7 年前
是的!!'remove_all_path' 或 'remove_path' 都不起作用,如果你想要正确的结果,你应该像这样,$option = array( 'add_path' => '/', 'remove_all_path' => 'your path' ); 'add_path' 只要给一个 '/',然后你就会 (; 。
hkn06tr at gmail dot com
6 个月前
以下所有内容都有效
---------
Ex-1
几乎所有 5 级递归的文件都被压缩
$zip->addGlob("*.*");
$zip->addGlob("*/*.*");
$zip->addGlob("*/*/*.*");
$zip->addGlob("*/*/*/*.*");
$zip->addGlob("*/*/*/*/*.*");
$zip->addGlob("*/*/*/*/*/*.*"); // 第 5 级
---------
Ex-2
$zip->addGlob("library/*.*");
library 下的所有文件
---------
Ex-3
$zip->addGlob("*/*.[cpj]*");
表示所有以 cpj 开头的文件
因此它们都被包含在内
css
php
js
---------
Ex-4
$zip->addGlob("*/*.[cpj][sh]*");
保证
css
php
js
---------
Ex-5 附加
更复杂
$zip->addGlob("[ab]*/c*/*.[cpjth][shxt]*");
所有以 a 或 b 开头的文件夹,然后在子文件夹中必须以 c 开头,但只有那些文件
css php txt js html
zckernel at gmail dot com
9 年前
不适用于以下选项
$options = array('remove_all_path' => TRUE);
$zipArchive->addGlob($path."/*", GLOB_BRACE, $options);

文件路径被完整地添加到存档中。

如果以下内容则有效
$options = array('add_path' => './','remove_all_path' => TRUE);
sumariva at gmail dot com
9 年前
如其他人所说,要删除所有路径,请使用空格作为基路径。
使用内置工具在 Windows XP 和 WinRAR 上打开 Zip。

$options = array('add_path' => ' ','remove_all_path' => TRUE);

感谢所有贡献者。
To Top