试图获得导入/导出功能。
对于单个文件,代码工作正常。通过使用ZipArchive压缩文件,我可以使用WinRAR手动解压缩,然后使用WinRAR重新压缩,然后ZipArchive可以成功地解压缩该文件。问题是,ZipArchive不会提取它直接压缩的存档。我还可以在Notepad++中看到,ZipArchive压缩与WinRAR压缩不同,文件大小也不同。我可以在php中成功地将winrar作为系统命令调用,以获得所需的功能,但这似乎是个坏主意。ZipArchive创建无法解压缩的压缩文件有什么原因吗?
错误消息: ZipArchive::extractTo():在$zip->extractTo(“testfolder2”)行中的文件中的无效参数;
发布于 2014-09-10 12:41:52
RecursiveIteratorIterator返回伪文件“。这很重要,"..“-父目录。当您使用addEmptyDir添加父目录时,ZipArchive将添加它(以某种方式)!您甚至可以尝试“$zip->addEmptyDir(”./某某“)”,它不会抱怨。
现在,通常来说,zip文件并不是这样的。解压缩它们时,您希望所有内容都在您解压缩的文件夹中,而不是在父文件夹中。这就是为什么普通的ZIP提取程序没有显示出来。
然而,PHP甚至会提取这些文件夹。然后,将以某种方式出现此错误,因为您试图包含“”。或者“.”目录。
在foreach循环开始时添加此内容以解决此问题:
if (basename($file) === ".") { continue;}
if (basename($file) === "..") { continue; }测试用例:
<?php
$archive = new ZipArchive();
$archive->open('c.zip',ZipArchive::CREATE);
$archive->addFile('a.txt');
$archive->addFile('b.txt');
$archive->addEmptyDir("../../down");
$archive->close();
$archive2 = new ZipArchive();
$archive2->open('c.zip');
$archive2->extractTo('here');
$archive2->close();我只在Windows上测试过这个。
https://stackoverflow.com/questions/22020437
复制相似问题