首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在OSX中打开流式ZIP文件

无法在OSX中打开流式ZIP文件
EN

Stack Overflow用户
提问于 2011-06-28 22:21:59
回答 2查看 933关注 0票数 0

我正在创建一个类来流式传输来自PHP的ZIP文件。

当在WinRAR,Windows压缩文件夹,BetterZip等中打开时,输出是绝对正常的,但当在OSX解压程序中打开时,我得到的只是一个.cpgz文件,而不是其他文件。

我一遍又一遍地阅读了ZIP规范,并对照我的标题进行了交叉检查,一切看起来都很好。我确实在这里发现了另一个问题,似乎也有同样的问题,但解决方案是将我所做的“需要提取的版本”字段更改为0x0014,当我尝试解压缩时,我得到了一个“不允许操作”的错误。

我已经上传了一个示例zip文件,里面有一个文件夹和一个小图像,放在这里:

http://www.freefilehosting.net/test_97

下面是代码的工作原理:

代码语言:javascript
复制
// 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-29 03:04:01

回答我自己的问题,问题是OSX不喜欢两件事。1)将附加元数据(大小、CRC等)附加到目录记录的末尾,因为这不是严格必要的(但在规范范围内)。和2)它不支持存储方法0x00 (存储),文件必须至少放空才能由OSX解压程序打开。

票数 1
EN

Stack Overflow用户

发布于 2011-06-28 22:30:44

有趣的是,这不是服务器/代码问题。

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=on.2,or.r_gc.r_pw.&fp=c131ccfc5fe21e40

很多人都有这个问题。

OSX不会为我解压缩,理由是错误:不允许操作。我必须让它手动解压使用终端。

当你使用终端解压的时候,你能给我们看一下输出吗?

unzip test.zip -d test

下载shamil$ unzip test.zip -d测试档案: test.zip创建:测试/测试/创建:测试/新文件夹/提取:测试/测试/ONIT位_42.png

//线程不应该在这里-移动到超级用户?

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

您需要使用:

代码语言:javascript
复制
ob_start('ob_gzhandler')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6507984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档