Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 帮助创建ZIP文件Windows赢得';t型块_Php_Windows_Linux_Encoding_Zip - Fatal编程技术网

Php 帮助创建ZIP文件Windows赢得';t型块

Php 帮助创建ZIP文件Windows赢得';t型块,php,windows,linux,encoding,zip,Php,Windows,Linux,Encoding,Zip,我制作了一个应用程序,它从hg存储库中获取项目的标记版本,并创建该标记版本的可下载ZIP文件 这些文件是在运行Linux的MediaTemple服务器上使用CodeIgniter的ZIP编码库创建的。一切正常。。。在Mac电脑上。但是,当我在Windows计算机上下载文件时,归档文件被阻止提取 ZIP包含.html,.css,.gif,.png和.js文件,我很确定.js文件是安全的罪魁祸首,但我想知道为什么我可以下载(或任何其他示例)作为ZIP文件并在没有Windows干扰的情况下提取它,尽管

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

这些文件是在运行Linux的MediaTemple服务器上使用CodeIgniter的ZIP编码库创建的。一切正常。。。在Mac电脑上。但是,当我在Windows计算机上下载文件时,归档文件被阻止提取

ZIP包含
.html
.css
.gif
.png
.js
文件,我很确定
.js
文件是安全的罪魁祸首,但我想知道为什么我可以下载(或任何其他示例)作为ZIP文件并在没有Windows干扰的情况下提取它,尽管它显然包含
.js
文件,但我的ZIP文件中的某些内容存在安全风险

通常情况下,我只会针对我的特殊情况找到一个快速的软件解决方案,但由于计划是出售对这些文件的访问权,快速软件修复或常见问题解答似乎并不十分方便用户

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

您可以下载一个示例文件

编辑:

  • 我正在运行Windows XP
  • 我没有运行反病毒程序
  • 警告是:Windows已阻止对这些文件的访问,以帮助保护您的计算机
  • 我已取消阻止该文件,但这没有任何作用
  • 文件在我的桌面上
编辑2:

  • 我在底部添加了一个示例文件。或者你可以看到它
  • 我只在XP和Windows7上使用过默认提取工具
  • Windows上的ZIP文件似乎是空的,我无法查看或打开任何文件
编辑3:

  • 从注释和答案来看,文件名似乎是问题所在,因为在过程中的某个地方添加了额外的
    /
    。我上传了一个由我的应用程序生成的文件名为fix的,你可以下载。请让我知道这是否解决了问题

提及您正在使用的windows版本以及您遇到的确切错误可能会有所帮助。您是在windows 7中偶然打开受保护文件夹中的文件,还是仅在桌面上打开


我不认为这和zip文件的制作方式有任何关系,但我可能是错的。

当使用完整目录路径而不是相对路径压缩文件时,可能会发生这种情况。您可以在此处找到此问题的示例:


您可能需要使用另一个zip实用程序或编写自己的zip实用程序。

确实,前导“/”是导致不允许提取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
函数。这允许您为每个文件使用任意路径结构,因此您可以写入相对路径。

您可能需要右键单击Zip文件转到属性并选择“取消阻止”。根据计算机上的下载/安全设置,一些下载的文件默认为“阻止”。您可以上载示例Zip文件吗?或者告诉我们他们以什么方式被阻止(像Avast这样的反病毒软件?)我已经做了“解除阻止”的事情,但这并不重要。Windows一直告诉我它被封锁了。也。。。我没有运行任何不随Windows XP附带的防病毒软件。即使使用应用程序(Windows除外)提取文件,也会发生这种情况吗?(例如:7-zip、WinRar等)你能不能根本不打开这个文件,或者不能用脚本打开它?我想可能是这样的。这实际上是第一次工作时的事情之一,但是项目失控了,所以我放弃了很多代码。当我回头看的时候,我注意到我第一次引用文件的方式是不同的。我必须在周一拿到一台电脑后进行测试。我添加了一个固定的下载示例。。。如果这样可以解决问题,请告诉我。它应该很容易被老用户提取。我会的,但我周末没有个人电脑:)