我制作了一个应用程序,该应用程序从 hg 存储库中获取项目的标记版本,并创建该标记修订版的可下载 ZIP 文件。
这些文件是使用 CodeIgniter 的 ZIP 编码库在运行 Linux 的 MediaTemple 服务器上创建的。一切正常...在 Mac 上。但是,当我在 Windows 计算机上下载文件时,存档被阻止提取。
压缩包包含.html
、.css
、.gif
、.png
和。 js
文件,我很确定 .js
文件是安全罪魁祸首,但我想知道为什么我可以下载 Jcrop jQuery plugin (或任何其他示例)作为 ZIP 文件并在 Windows 不干涉的情况下将其解压缩,即使它显然包含 .js
文件,但关于我的 ZIP 文件的某些内容存在安全风险。
通常我会为我的特定情况找到一个快速的软件解决方法,但由于计划是出售对这些文件的访问权限,因此快速软件修复或常见问题解答似乎对用户来说不是很友好。
如有任何反馈,我们将不胜感激!如果您需要更多信息,请告诉我。
您可以下载示例文件 here .
编辑:
- 我运行的是 Windows XP
- 我没有运行杀毒软件
- 警告是:Windows 已阻止访问这些文件以帮助保护您的计算机
- 我已经取消阻止该文件,但没有任何作用
- 文件在我的桌面上
编辑 2:
- 我在底部添加了一个示例文件。或者可以看看here
- 我只在 XP 和 Windows 7 上使用默认提取工具。
- ZIP 在 Windows 上似乎是空的,我无法查看或打开任何文件。
编辑 3:
- 从评论和答案来看,文件名似乎是由于在过程中某处添加了额外的
/
造成的。我上传了一个 new example download由我的应用生成,文件名为 fix,您可以下载 here .如果这能解决问题,请告诉我。
最佳答案
事实上,前导的“/”是导致不允许提取 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
函数。这允许您为每个文件使用任意路径结构,因此您可以编写相对路径。
关于php - 帮助创建 ZIP 文件 Windows 不会阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232412/