帮助创建ZIP文件Windows不会阻止

时间:2010-07-12 21:28:53

标签: php windows linux encoding zip

我已经创建了一个应用程序,它从hg存储库中获取项目的标记版本,并创建一个可下载的ZIP文件,该文件包含已标记的版本。

使用CodeIgniter的ZIP编码库在运行Linux的MediaTemple服务器上创建文件。一切正常......在Mac上。但是,当我在Windows计算机上下载文件时,将阻止存档被解压缩。

ZIP包含.html.css.gif.png.js个文件,我很确定.js个文件是安全的罪魁祸首,但我想知道为什么我可以将Jcrop jQuery plugin(或任何其他示例)作为ZIP文件下载并在没有Windows干扰的情况下提取它,即使它显然包含.js个文件,但是关于我的ZIP文件存在安全风险。

通常情况下,我会为我的特定情况找到一个快速的软件解决方法,但由于计划是出售对这些文件的访问权限,因此快速软件修复或常见问题解答似乎不是非常用户友好。

任何反馈都将不胜感激!如果您需要更多信息,请告诉我。

您可以下载示例文件here

修改

  • 我正在运行Windows XP
  • 我没有运行防病毒
  • 警告是: Windows阻止访问这些文件以帮助保护您的计算机
  • 我已取消阻止该文件但无效
  • 该文件在我的桌面上

编辑2:

  • 我在底部添加了一个示例文件。或者你可以看到它here
  • 我在XP和Windows 7上只使用了默认提取工具。
  • Windows上的ZIP似乎为空,我看不到或打开任何文件。

编辑3:

  • 从评论和答案中可以看出,由于在流程中的某处添加了额外的/,文件名出现了问题。我上传了我的应用生成的new example download文件名修复程序,您可以下载here。如果能解决问题,请告诉我。

3 个答案:

答案 0 :(得分:4)

实际上,领先的'/'是导致不允许提取zip的原因。我已经通过编写Python脚本来创建zip文件的修改版本而没有绝对文件路径来证明这一点:

from zipfile import *

orig = ZipFile('download.zip', 'r')
fixed = ZipFile('fixed.zip', 'w')
for fileinfo in orig.infolist():
    fixed.writestr(fileinfo.filename[1:], orig.read(fileinfo.filename)) 
fixed.close()

(这不会重新压缩文件,但它证明它是导致问题的文件名)

如果您正在使用CodeIgniter zip库的函数read_dir,那么这必须是使用绝对文件路径的罪魁祸首。尝试使用PHP递归遍历目录结构,而是使用add_data函数。这允许您为每个文件使用任意路径结构,因此您可以编写相对路径。

答案 1 :(得分:3)

使用完整目录路径而不是相对路径压缩文件时会发生这种情况。你可以在这里找到这个问题的一个例子:

http://community.sharpdevelop.net/forums/p/1416/4532.aspx#4532

您可能需要使用其他zip工具或自己编写。

答案 2 :(得分:0)

可能有助于提及您正在使用的Windows版本以及您获得的确切错误。它是Windows 7,你试图在受保护的文件夹中打开文件,或者你只是想在桌面上打开它?

我认为这与zip文件的制作方式无关,但我可能错了。