簡體   English   中英

流式傳輸 ZIP 文件不會在 OSX 中打開

[英]Streaming ZIP file won't open in OSX

我正在創建一個 class 到 stream 一個 ZIP 文件,來自 Z2FEC392304A5C23AC738DA2284ZBCF9。

output 在 WinRAR、Windows 壓縮文件夾、BetterZip 等中打開時絕對沒問題,但在 OSX Unarchiver 中打開時,我得到的只是 a.cpgz 文件,僅此而已。

我一遍又一遍地閱讀了 ZIP 規范並交叉檢查了我的標題,一切看起來都很好。 我確實在這里找到了另一個問題,它似乎有同樣的問題,但解決方案是將我所做的“需要提取的版本”字段更改為 0x0014,並且在嘗試解壓縮時出現“不允許操作”錯誤。

我已經上傳了一個示例 zip 文件,其中包含一個文件夾和一個小圖像到這里:

http://www.freefilehosting.net/test_97

以下是代碼的工作原理:

// File entry header
echo pack('V', 0x04034b50);
echo pack('v', 0x0014); // Version needed to extract
echo pack('v', $dir ? 0 : 0x0808); // General purpose bit flag for unknown CRC
echo pack('v', 0x00); // Compression method (store)
echo pack('V', $dts); // DOS timestamp
echo pack('V', 0x00); // CRC - empty
echo pack('V', 0x00); // Compressed data length
echo pack('V', 0x00); // Decompressed data length
echo pack('v', strlen($filename)); // Length of filename
echo pack('v', 0x00); // Length of additional data

<snip>Output raw file data</snip>

// File entry trailer
echo pack('V', 0x08074b50); // Magic
echo pack('V', $crc); // CRC generated using crc32b algo
echo pack('V', $data_size); // Compressed size
echo pack('V', $total_size); // Uncompressed size

// CDR record
echo pack('V', 0x02014b50); // Magic
echo pack('v', 0x0014); // Version created by
echo pack('v', 0x0014); // Version req'd to open
echo pack('v', 0x00); // General purpose bit
echo pack('v', 0x00); // Compression method (store)
echo pack('V', $dts); // DOS timestamp
echo pack('V', $crc); // CRC of data
echo pack('V', $data_size); // Compressed size
echo pack('V', $total_size); // Uncompressed size
echo pack('v', strlen($filename)); // Filename length
echo pack('v', 0x00); // Extra data length
echo pack('v', 0x00); // Comment length
echo pack('v', 0x00); // Start disk no.
echo pack('v', 0x00); // Internal file attributes
echo pack('V', $dir ? 16 : 32); // External file attributes
echo pack('V', $offset); // Relative offset

// End of file record
echo pack('V', 0x06054b50); // Magic
echo pack('v', 0x00); // Current disk number
echo pack('v', 0x00); // Disk containing CDR
echo pack('v', $count); // Number of entries in this CDR
echo pack('v', $count); // Total number of CDR entries
echo pack('V', $cdr_len); // Length of CDR
echo pack('V', $cdr_offset); // Offset of CDR
echo pack('v', 0x00); // Zip file comment length

要回答我自己的問題,問題是 OSX 不喜歡兩件事。 1) 將額外的元數據(大小、CRC 等)附加到目錄記錄的末尾,因為這不是絕對必要的(但在規范內)。 2)它不支持存儲方法0x00(存儲),文件必須至少DEFLATED才能被OSX unarchiver打開。

有趣的是,這不是服務器/代碼問題。

https://discussions.apple.com/thread/1446784?start=0&tstart=0

http://www.google.co.uk/#sclient=psy&hl=en&safe=off&biw=1436&bih=784&source=hp&q=cpgz&aq=f&aqi=g3g-s1g1&aql=&oq=&pbx=1&bav=pw_on.2,or.r_gc。 .&fp=c131ccfc5fe21e40

很多人都有這個問題。

OSX 不會為我解壓縮,引用錯誤:不允許操作。 我不得不讓它使用終端手動解壓縮。

當你使用終端解壓時,你能告訴我們output嗎?

unzip test.zip -d test

Shamil-Nunhucks-MacBook-Air:下載 shamil$ unzip test.zip -d test 存檔:test.zip 創建:測試/測試/創建:測試/測試/新文件夾/提取:測試/測試/onebit_42.png

//線程不應該在這里 - 移動到超級用戶?

==============================

你需要使用:

ob_start('ob_gzhandler')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM