为什么PHP不会创建此zip文件(权限问题)

时间:2010-02-01 06:09:15

标签: php file-permissions phing ziparchive

  • 我在Windows上

  • 我正在使用PHING压缩一些文件

  • 我有很多东西正在压缩

  • 压缩工作,但在压缩文件中包含特定phing文件集的工作除外

  • 当我调试时,我可以在phing的ZIP任务中看到ZipArchive :: close返回false。错误字符串显示“权限被拒绝”。在手册中,它指出close()是实际写入文件的内容。

  • 这不是时间耦合,换句话说,它发生在第一个,最后一个或其他什么。所有其他的工作。这个似乎没什么不同。

这是我的构建文件:http://pastebin.org/84786(适用于一个月)

问题出在第251行。在它之前和之后的zip任务都可以正常工作。在调试器中,我可以看到大约150个文件被添加到zip中。我已经验证了调试器中所有正确的路径。

构建似乎在linux上运行良好。

当我右键单击zip文件所在的文件夹时,只读复选框为“蓝色”,未选中或未选中。我保持选中或取消选中并按下确定并返回文件夹的属性,复选框再次为“蓝色”。显然这是设计的(http://support.microsoft.com/kb/326549),这似乎不是问题,因为它只发生在那个文件中。

另一个奇怪的事情是,如果我转到第252行并将文件集更改为指向例如来自其上方“importer”模块的文件,则会创建zip。然而,第236行的.tar.gz相同的文件集证明每次都能正常工作。所以它只发生在zip任务的特定文件集中。该文件集适用于tar任务。实际上,在它下面的“package”注释下的所有任务也引用了那些文件,但tar.gz文件却没有。

是什么给出了?

另外:新的观察...在两台Windows机器上看起来如果我快速刷新文件视图我可以看到myzipfile.zip.tmp正在构建,但myzipfile.zip永远不会被创建。

在linux上,我只是仔细检查了一切是否完美无缺。去图。

3 个答案:

答案 0 :(得分:1)

在您的新观察之后,听起来问题与将TMP文件重命名为真实的ZIP文件有关。要么存在文件名问题,要么存在某种延迟写入问题,其中文件在重命名时尚未完全完成。

答案 1 :(得分:0)

我没有看到有问题的代码,但我遇到了类似的问题。它是由于代码使用正斜杠而不是反斜杠而发生的。我改变了斜线,不得不逃避它们(\\)。不知道这是否有所帮助,但有时它会导致最大的问题。

答案 2 :(得分:0)

根据你对Linux / Unix工作的看法,我猜你会受到文件系统/锁定语义差异的影响。在Unix文件中只有自动锁定(其他程序在没有“锁定意识”时仍然可以读取它们)。在Windows中,操作系统强制执行锁定,这意味着如果所有文件都被其他程序使用,则无法读取所有文件,当然也不能删除它们(您必须拥有该文件的错误消息)。如果我不得不猜测,您正在尝试压缩由活动进程锁定的文件,但它会失败。 (因为你的其他zip操作工作我认为写入不是问题,你有足够的磁盘空间/配额(并且不会在FAT文件系统上写入大于2GB的文件))