我正在查看tutorial来创建ePub文件。它声明包含ePub书的zip必须包含一个名为mimetype的文本文件,“必须首先在zip文件中,未压缩”。他给出的示例使用命令行工具,我想知道如何在PHP中做同样的事情。
我认为它首先在zip文件中,只要它是我在代码中添加的第一件事,但是如何将它添加到未压缩的zip中。或者我误读了这个?
提前致谢。
答案 0 :(得分:5)
上面的base64编码文件似乎是一个小错误(ZipArchive拒绝打开它),但以下工作:
// make the archive first
file_put_contents($fileName, base64_decode("UEsDBAoAAAAAAOmRAT1vYassFAAAABQAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi9lcHViK3ppcFBLAQIUAAoAAAAAAOmRAT1vYassFAAAABQAAAAIAAAAAAAAAAAAIAAAAAAAAABtaW1ldHlwZVBLBQYAAAAAAQABADYAAAA6AAAAAAA="));
// open archive
if (($err = $zipfile->open($fileName)) !== TRUE) {
trigger_error("Could not open archive: " . $fileName, E_USER_ERROR);
}
$zipfile->add(...)
我使用自己的epub生成代码测试了它,它工作正常。 Epubcheck 1.05验证它。顺便说一下,如果你正在使用“OPL的EPUB库”,请注意它是非常错误的。我很可能会在解决这个问题后立即发布修复程序,但要注意这一点。
答案 1 :(得分:2)
我目前正在使用PHP进行epub导出工具,我使用PCLZip获得了很好的体验。它有一个名为PCLZIP_OPT_NO_COMPRESSION的选项,我在添加文件时使用add()调用。我在添加mimetype文件时使用它,它就像魅力一样。
答案 2 :(得分:1)
使用本机PHP ZipArchive类无法做到这一点。但是PEAR :: Archive_Zip可以 - 如果在添加该特定文件时使用ARCHIVE_ZIP_PARAM_NO_COMPRESSION参数。
更简单的解决方案是使用模板。使用未压缩的“mimetype”条目(zip -0)创建一个存根zip文件,然后将其用作临时zip,之后只需添加新条目:
file_put_contents("epub.zip", base64_decode("UEsDBAoAAAAAAOmRAT1vYassFAAAABQAAAAIABwAbWltZXR5cGVVVAkAA5adVUyQVx5PdXgLAAEE6AMAAAToAwAAYXBwbGljYXRpb24vZXB1Yit6aXBQSwECHgMKAAAAAADpkQE9b2GrLBQAAAAUAAAACAAYAAAAAAAAAAAApIEAAAAAbWltZXR5cGVVVAUAA5adVUx1eAsAAQToAwAABOgDAABQSwUGAAAAAAEAAQBOAAAAVgAAAAAA"));
$zip = new ZipArchive();
$zip->open("epub.zip");
$zip->addFiles(...);
(未经测试)