'remove_all_path' 或 'remove_path' 选项似乎都没有生效
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL zip >= 1.9.0)
ZipArchive::addGlob — 通过 glob 模式添加目录中的文件
添加与 glob pattern
匹配的目录中的文件。
注意: 为了最大程度的移植性,建议始终使用正斜杠 (
/
) 作为 ZIP 文件名中的目录分隔符。
pattern
将与之匹配文件的 glob() 模式。
flags
glob()
标志的位掩码。
options
一个关联数组选项。可用的选项是
"add_path"
在转换为存档中文件的本地路径时要预先添加的前缀。这将在 "remove_path"
或 "remove_all_path"
选项定义的任何移除操作之后应用。
"remove_path"
在添加到存档之前,从匹配的文件路径中删除的前缀。
"remove_all_path"
true
用于仅使用文件名并添加到存档的根目录。
"flags"
位掩码,由 ZipArchive::FL_OVERWRITE
、ZipArchive::FL_ENC_GUESS
、ZipArchive::FL_ENC_UTF_8
、ZipArchive::FL_ENC_CP437
、ZipArchive::FL_OPEN_FILE_NOW
组成。这些常量的行为在 ZIP 常量 页面上进行了描述。
"comp_method"
压缩方法,一个 ZipArchive::CM_*
常量,参见 ZIP 常量 页面。
"comp_flags"
压缩级别。
"enc_method"
加密方法,一个 ZipArchive::EM_*
常量,参见 ZIP 常量 页面。
"enc_password"
用于加密的密码。
版本 | 说明 |
---|---|
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();
}
?>
对我来说,更好的方法似乎是
$options = array('add_path' => DIRECTORY_SEPARATOR, 'remove_all_path' => TRUE);
在 Windows 上使用 \,在其他系统上使用 /
是的!!'remove_all_path' 或 'remove_path' 都不起作用,如果你想要正确的结果,你应该像这样,$option = array( 'add_path' => '/', 'remove_all_path' => 'your path' ); 'add_path' 只要给一个 '/',然后你就会 (; 。
以下所有内容都有效
---------
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
不适用于以下选项
$options = array('remove_all_path' => TRUE);
$zipArchive->addGlob($path."/*", GLOB_BRACE, $options);
文件路径被完整地添加到存档中。
如果以下内容则有效
$options = array('add_path' => './','remove_all_path' => TRUE);
如其他人所说,要删除所有路径,请使用空格作为基路径。
使用内置工具在 Windows XP 和 WinRAR 上打开 Zip。
$options = array('add_path' => ' ','remove_all_path' => TRUE);
感谢所有贡献者。