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

标签 php windows linux encoding zip

我制作了一个应用程序,该应用程序从 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/

相关文章:

php - WAMP 服务器崩溃时如何获取堆栈跟踪?

php给出一个空白页,没有错误

windows - 如何在 XP 上设置 wirble 着色

python - PyWin32 和 Python 3.8.0

linux - x86 NASM Linux 程序集中的 ATOI 问题

php - 如何从我的 mysql 数据库中回显变量

php - 覆盖自定义函数值

c - 通过Windows阅读Linux【C程序】

.net - 写入远程 MSMQ

python - Docker 和 fcntl OSError Errno 22 参数无效