我正在开发一个下载ePub文件的PHP应用程序。作为代码的一部分,我添加了一个唯一的标识符,可用于跟踪数据库中的原始下载信息以打击盗版。
我正在使用PHP ZipArchive函数向文件添加存档注释,但是如果存在注释,Adobe Digital版本似乎无法打开ePub文件。当评论被删除时,它打开正常,所以我只是想看看是否有其他人之前有这个问题,如果有办法添加评论到ePub文件,这将允许Adobe Digital Editions打开它。以下是我正在使用的代码:
public function secureEpub($file, $download_id, $filepath){
//GENERATE RANDOM FILE NAME
$newFile = uniqid().".epub";
//COPY EPUB AND WORK FROM THAT VERSION
copy($file, $filepath.$newFile);
//TREAT EPUB FILE AS ORDINARY ZIP ARCHIVE
//OPEN AND EXTRACT EPUB
$zip = new ZipArchive;
$res = $zip->open($filepath.$newFile);
if($res === TRUE){
//ZIP ARCHIVE HAS OPENED SUCCESSFULLY - SET ARCHIVE COMMENT TO DOWNLOAD ID
$zip->setArchiveComment($download_id);
$zip->close();
} else {
error_log('Unable to open ePub (' . $filepath.$newFile . ') as Directory');
return false;
exit;
}
//ONCE CHANGE HAS BEEN MADE CLOSE THE ARCHIVE AND RETURN TEMP FILE
return $filepath.$newFile;
}
如您所见,它会复制原件,创建存档注释然后返回文件(稍后会删除)。有没有办法在不破坏ePub(ADE)的情况下实现这一目标?
如果我没有任何意义,请告诉我:D
P.S:为了澄清,下载工作正常,评论正确应用。只是ADE无法打开它,而其他ePub阅读器管理得很好。我是以错误的方式解决这个问题吗?
答案 0 :(得分:0)
好的,我找不到解决方法,所以我想出了一个解决方案。您可以在ZIP文件中添加一个包含详细信息的新文件或目录。
所以,你可以使用类似的东西:
$zip->addFromString('test.txt', $download_id);
或创建一个以下载后命名的目录,如:
$zip->addEmptyDir($download_id);
如果你像我一样陷入困境,可能会建议使用命名更加模糊:)
由于