我正在尝试通过使用UNIX的ZIP命令和PHP的PassThru功能来整理邮递解决方案,但我已经遇到了一个障碍。

该脚本看起来像这样:

<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachement; filename=myfile.zip");
passthru("zip -r -0 - /stuff/to/zip/");
exit();
?>

zip命令工作正常,浏览器接收到输出,并保存为zip文件。然后可以在Windows和unix上罚款ZIP,但是在Mac OS X上,提取器中的构建(BomarchiveHelper)无法提取文件。不过,使用OS X上的其他应用程序正常工作。

BomarchiveHelper给出的错误与如果ZIP受到密码保护(未由应用程序处理)相同。我使用了某种Zip Analyzer程序,它表明ZIP存档中的某些文件被标记为密码保护。就像我说的那样,显然没有其他提取申请会注意这一点。

在检查ZIP时,我发现PHP文件生成的一个字节大于服务器上直接生成的字节。似乎带有Passhru的流过程添加了一些可能导致BomarchiveHelper问题的东西。

为了进行测试,我使用PassTrhu来流式传输我已经在服务器上创建的ZIP:Passhru(“ cat suff.zip”),该zip与BomarchiveHelper一起使用。

因此,问题似乎位于过程中的某个地方,即PassHru函数将ZIP命令即时生成的二进制数据传递给浏览器。

我试图消除可以生成额外字节的所有来源(将zip命令设置为安静,等等),但是添加的数据仍然存在。流式ZIP的二进制差异和一个预生成的邮政编码表明,额外的数据散布在整个zip上,而不仅仅是末端或开始。

任何人都有线索,或者以前见过这个问题,并决定无法解决吗?

NB:由于其他人已经遇到并且在我面前很好地描述了这个问题,但没有任何答案,所以我刚刚复制/粘贴了他的信息,并确保他的所有测试确实有效地失败了,并且我的任何一个都没有通过...

显然,让这种工作的唯一方法是要求人们使用untecip或suffitexpander ...

有帮助吗?

解决方案

如果您使用的是nginx,请查看 http://wiki.nginx.org/nginxngxzip

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top