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

任何想法有什么不对?

+0

在添加文件时没有首先创建空目录就已经有了明显的成功(也就是说,只有在需要创建没有内容的文件夹时才需要'addEmptyDir'函数)。您可以尝试注释'$ zip- > addEmptyDir'行并尝试再次运行脚本以查看会发生什么? – sjagr 2014-10-07 15:43:38

+0

现在没事了。谢谢! – user2828677 2014-10-07 15:53:02

+0

好吧,我会添加一个答案,以便您可以接受它:) – sjagr 2014-10-07 15:53:47

很可能通过运行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不会将路径的最后一个“文件夹”部分创建为文件夹,而是将其创建为文件而不是扩展名。