将文件添加到使用 PHP 未压缩的 zip 中
我正在查看教程创建 ePub 文件。它规定包含 ePub 书籍的 zip 必须包含一个名为 mimetype 的文本文件,该文件“必须位于 zip 文件的第一个,未压缩”。他给出的示例使用命令行工具,我想知道如何在 PHP 中做同样的事情。
我假设它会是 zip 文件中的第一个,只要它是我在代码中添加的第一件事,但如何将它添加到未压缩的 zip 中。或者我误读了这个?
提前致谢。
I'm looking at a tutorial for creating an ePub file. It states that the zip that contains the ePub book must contain a textfile called mimetype that "must be first in the zip file, uncompressed". The example he gives uses a commandline tool, I was wondering how I could do the same thing in PHP.
I assume it would be first in the zip file as long as its the first thing I add in the code, but how to add it to the zip uncompressed. Or am I misreading this?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您无法使用本机 PHP ZipArchive 类来做到这一点。但是 PEAR::Archive_Zip 可以 - 如果您在添加该特定文件时使用 ARCHIVE_ZIP_PARAM_NO_COMPRESSION 参数。
更简单的解决方案是使用模板。使用未压缩的“mimetype”条目 (zip -0) 创建一个存根 zip 文件,然后将其用作临时 zip,然后只需向其中添加新条目:(
尽管未经测试)
You cannot do that with the native PHP ZipArchive class. But PEAR::Archive_Zip can - if you use the ARCHIVE_ZIP_PARAM_NO_COMPRESSION parameter when adding that specifc file.
A simpler solution would be to use a template. Create a stub zip file with your uncompressed "mimetype" entry (zip -0), then use that as temporary zip and afterwards just add new entries to it:
(untested though)
我目前正在使用 PHP 开发 epub 导出工具,并且使用 PCLZip 获得了良好的体验。它有一个名为 PCLZIP_OPT_NO_COMPRESSION 的选项,我在添加文件时在 add() 调用中使用该选项。我在添加 mimetype 文件时使用它,它的作用就像一个魅力。
I am currently working on an epub export tool using PHP and I've had a good experience using PCLZip. It has an option called PCLZIP_OPT_NO_COMPRESSION which I use on the add() call when adding a file. I use this when adding the mimetype file and it works like a charm.
上面的 base64 编码文件似乎有点问题(ZipArchive 拒绝打开它),但以下方法有效:
我用自己的 epub 生成代码对此进行了测试,并且工作正常。 Epubcheck 1.05 对其进行了验证。顺便说一句,如果您使用“OPL 的 EPUB 库”,请注意它有很多错误。我可能很快就会用这个解决方案发布修复程序,但在那之前要小心。
It seems the base64-encoded file above is a little buggy (ZipArchive refused to open it), but the following works:
I tested this with my own epub-generating code and it worked fine. Epubcheck 1.05 validates it. By the way, if you're using "OPL's EPUB library", beware that it's quite buggy. I will probably post a fix to it soon with this solution baked in, but beware till then.