2014-10-07 258 views
1

當我用波紋管代碼創建一個.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

回答

2

很可能通過運行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(); 
0

addEmptyDir不會將路徑的最後一個「文件夾」部分創建爲文件夾,而是將其創建爲文件而不是擴展名。