2012-06-04 155 views
2

可能重複:
Dynamically created zip files by ZipStream in PHP won't open in OSXPHP ZipArchive zip文件將無法在Mac OS中打開

我使用PHP ZipArchive允許網站用戶的幾個文件合併成一個zip文件,然後下載它們。它在我運行它的Fedora Linux計算機上工作完美。但是,如果我使用我的Mac筆記本電腦下載文件,則文件不會解壓縮,雙擊會創建一個cpgz文件。雙擊cpgz文件創建另一個cpgz等。

通過谷歌搜索來看,zip-cpgz循環看起來像是一個很常見的問題,但幾乎所有的解決方案都表明原始文件格式不正確;一個不存在的初始文件的zip文件,一個由不同文件結尾的Windows機器生成的zip文件,類似的東西。我不認爲這是我的情況,因爲它可以在我的Linux機器上正常工作。

使用解壓縮作品打開zip文件中的終端,雖然給出了警告

警告[filename.zip]:在開始或zip文件中3個額外的字節(在嘗試反正處理)

我寧願不告訴用戶使用終端,但如果我能避免它。

下面是其中一個文件的鏈接,我無法提供指向正在運行的網站的鏈接,尚未啓動並正在運行。該文件應該包含8個ascii文件(它們是火星表面上一個站點的表面溫度)。

http://eddybarratt.co.uk/wp-content/uploads/2012/06/files_run0000008.zip

+0

另一個問題是Zip Stream,它暗示了ZipArchive無法正常工作的原因,但有建議如何解決它。 – EddyTheB

+0

這是一個老問題,已關閉,但我有可能的答案。下載動態zip時遇到同樣的問題。問題是在'echo $ zip'之前打印了調試文本,創建了格式錯誤的文件,WinRAR忽略了,但是Archive Utility沒有。在這種情況下,三個字節可能是來自utf8源文件的BOM。如果有人遇到這個問題,用編輯器檢查.zip文件,它必須以PK開頭,之前沒有別的。 – Einacio

回答

0

使用PHP的ZipArchive類的替代,它可以提供更好的結果,是PCL Zip library。當PHP的ZipArchive在用戶的主機帳戶上不可用時,我們在定製的CMS中使用它作爲回退。下面是我們如何使用它的一個例子:

if (class_exists('ZipArchive')) { 
    ... zip up the files with the PHP ZipArchive class... 
} else { 
    require_once('pclzip.lib.php'); 
    $pclZip = new PclZip($destination); 
    $pclZip->create($files, PCLZIP_OPT_REMOVE_ALL_PATH); 
    return file_exists($destination); 
} 

我知道這並不回答,爲什麼由ZipArchive創建的zip文件越來越亂了的問題,但希望它提供了另一種方式來把事情的工作爲你。

0

你用過哪些瀏覽器?我有經驗,在通過某個瀏覽器(本例中爲Chrome)下載壓縮文件時,壓縮文件無法正確解壓縮。我試圖在Safari中下載文件,它工作得很好。雖然我不確定這是爲什麼,但嘗試使用不同的瀏覽器並查看它是否有效。

+0

我試過Safari,它仍然不能解壓縮。但是,這確實讓我懷疑服務器是否可能發送了錯誤的MIME類型。 – JWWalker

+0

是的,我也試過Safari,和同樣的問題。我想我有正確的MIME類型,我有:header('Content-Type:application/zip')。 – EddyTheB

相關問題