php - 将文件添加到 zip 中会添加包含文件的文件夹
问题描述
所以我有一个目录,它的根目录包含一个files
文件夹,里面有一个test
包含 txt 文件的文件夹,然后我有这个 php 代码:
function displayZip($name)
$zip = new ZipArchive();
$filename = "files/$name.zip";
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$dir = "files/$name/";
createZip($zip, $dir);
$zip->close();
rmdir("files/$name");
}
function createZip($zip,$dir, $name){
if (is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false){
// If file
if (is_file($dir.$file)) {
if($file != '' && $file != '.' && $file != '..'){
$zip->addFile($dir.$file);
}
}
}
closedir($dh);
}
}
它为变量下的 zip 取一个名称,$name
然后指定下面的完整路径,$filename
然后创建 zip 存档,然后调用 createZip 函数,该函数打开与 zip 同名的目录,然后将该目录下的文件添加到 zip 中,但是当我调用displayZip(’test’)
然后打开创建的 zip 时,我看到它在其中添加了files/test/
文件夹。所以我的问题是:
- 它在代码中的什么位置添加这些文件夹,是否
addFile
与$dir.$file
部分一致? - 我该怎么做才能只获取 zip 中的文件?
提前致谢
解决方案
默认情况下,ZipArchive
将文件夹添加到存档中。您可以通过将“本地名称”指定为addFile()
. 该“本地名称”将是 zip 存档中的结构。有关详细信息,请参阅https://www.php.net/manual/en/ziparchive.addfile.php。
rmdir 可能无法正常工作,因为该目录不为空。
推荐阅读
- javascript - 具有平面混合项目列表的两列网格
- asp.net-mvc - 如何缓存服务器端变量并使其在 MVC 中过期
- c# - 当 Argument 的内部无效时抛出异常
- javascript - d3折线图-对象挖掘
- asp.net - ASP 核心。多个身份的最佳实践
- typescript - 打字稿允许类属性具有多种类型
- php - PHP:希伯来字母比较
- javascript - 如何正确地对我的 API 客户端文件下载功能进行单元测试?
- python - tweepy twitter api 流状态对象与 api 搜索状态对象 - timestamp_ms / created_at 区别?
- javascript - JavaScript 中的时间戳间隔