【问题标题】:Libraries other than ZipArchive for creating pkzip archives in PHP?ZipArchive 以外的库用于在 PHP 中创建 pkzip 档案?
【发布时间】:2011-01-10 21:33:53
【问题描述】:

我正在使用 php5 编写一些 epub 创建功能。目前我正在尝试使用 ZipArchive,但遇到了一些烦恼。首先,没有设置压缩级别的功能。其次,ZipArchive::addFile() 似乎在我使用它时默默地失败并创建一个损坏的存档。我一直在使用file_get_contents() + ZipArchive::addFromString(),但更愿意只使用文档化的函数来添加文件。

除非有人真的想帮助我调试这个问题,否则我不会发布代码示例,但是我想知道是否有任何其他库可以推荐用于在 PHP 中创建 zip (pkzip) 档案。到目前为止,我看到了PclZip,他的网站似乎没有加载,但其他的不多。我也考虑过使用exec() + zip(unix 命令)。这段代码只能在这个特定的 linux 机器上运行,因此可移植性不是问题。

提前感谢您的任何建议!

【问题讨论】:

  • 取决于您在哪台机器上运行它,您可以使用 Linux 命令行 zip。对于小型工作,我更喜欢这个。

标签: php zip epub


【解决方案1】:

PCLZip 是一个不错的选择,如果您可以访问该站点,zlib 作为它的唯一依赖项。这可能是暂时的,在圣诞节和新年之间肯定可以访问。

即使与 ZipArchive 相比,它也非常高效

编辑

您说您在使用 ZipArchive 的 addFile() 方法时遇到了问题。这是在 Windows 环境中,还是在您的 Linux 服务器上?我知道 Win32 上的 php_zip 库的一些错误版本可能会出现此问题,尽管最新版本似乎还可以,而且我在其他平台(甚至 WIN64 版本)上也没有遇到同样的问题。

【讨论】:

  • 我在 linux 开发服务器上遇到了问题。实际的 addFile 调用返回 true,但正在添加大小为 0 的文件,导致存档不可读。 php.net (php.net/manual/en/function.ziparchive-addfile.php#84529) 上有一条评论说要使用服务器上文件的相对路径,否则会导致错误。我正在使用绝对路径,所以我将其视为最后的手段。
  • 你看过这个问题的回答了吗? stackoverflow.com/questions/4651276/…
  • 啊,我明白了,我认为这是我使用 addFile 的问题。感谢您的链接。如果 addFile 在尝试添加时确实抛出了正确的错误,那就太好了,但是你能做什么。但是,我的 epub 文件仍然存在问题,因为存档中的一个文件必须具有 0 压缩,并且我无法使用 ZipArchive 对其进行设置。如果没有正确存档此文件,epub 将无法在阅读器中正确打开,因此据我所知,我将不得不使用 ZipArchive 以外的其他工具来完成此操作。
  • PCLZip 站点似乎仍然不可用;但是该库确实允许使用 PCLZIP_OPT_NO_COMPRESSION 选项将文件添加到存档中...我自己没有使用过该选项,尽管我对该库总体上相当满意。我对它的唯一真正抱怨是没有内置方法可以从数据字符串而不是实际文件名将文件添加到存档中,相当于 ZipArchive 的 addFromString(),但我可能会结束向上扩展/修改类以提供该选项。
  • 是的,这就是我用来创建 epub (addFromString) 的方法,但我解决了它。我从镜像中获取了 PCLZip 源并将其插入,一切正常,我现在正在制作一个有效的 epub。感谢您的建议:)
【解决方案2】:

我会使用 exec() 和 Unix 命令。一种解决问题的系统原生方法——unix utils 总是比 PEAR 同行领先一两步。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2018-12-06
    • 2021-04-08
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    相关资源
    最近更新 更多