ZipArchive :: addEmptyDir在.zip文件中创建一个空文件
问题描述:
当我用波纹管代码创建一个.zip压缩包时,我得到一个奇怪的空文件。当我添加一个文件而不创建目录时没关系。我可以打开存档,无误地解压缩它。我使用WinRar 5.10(在WinRar 5.0及更低版本,7zip,WinZip中没有问题)。ZipArchive :: addEmptyDir在.zip文件中创建一个空文件
$zip = new ZipArchive();
$filename = "test112.zip";
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$zip->addEmptyDir('test');
$zip->addFile("apache_pb2.png", 'test/test.png');
$zip->close();
PRINTSCREEN:CLICK
任何想法有什么不对?
答
很可能通过运行addEmptyDir
函数,然后将addFile
函数运行到同一目录中,实际上在一些Unzip程序的眼中创建了两个test
实例。一般来说,这不会是一个问题,但如果你想避免这种情况为你的WinRAR版本,你应该修改代码以如下:从我所看到的在旧版本和文档
$zip = new ZipArchive();
$filename = "test112.zip";
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
//$zip->addEmptyDir('test'); // Only necessary for directories that will REMAIN empty
$zip->addFile("apache_pb2.png", 'test/test.png');
$zip->close();
答
addEmptyDir不会将路径的最后一个“文件夹”部分创建为文件夹,而是将其创建为文件而不是扩展名。
在添加文件时没有首先创建空目录就已经有了明显的成功(也就是说,只有在需要创建没有内容的文件夹时才需要'addEmptyDir'函数)。您可以尝试注释'$ zip- > addEmptyDir'行并尝试再次运行脚本以查看会发生什么? – sjagr 2014-10-07 15:43:38
现在没事了。谢谢! – user2828677 2014-10-07 15:53:02
好吧,我会添加一个答案,以便您可以接受它:) – sjagr 2014-10-07 15:53:47