将归档注释保存到ePub文件

时间:2014-02-06 12:51:02

标签: php adobe epub

我正在开发一个下载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阅读器管理得很好。我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好的,我找不到解决方法,所以我想出了一个解决方案。您可以在ZIP文件中添加一个包含详细信息的新文件或目录。

所以,你可以使用类似的东西:

$zip->addFromString('test.txt', $download_id);

或创建一个以下载后命名的目录,如:

$zip->addEmptyDir($download_id);

如果你像我一样陷入困境,可能会建议使用命名更加模糊:)

由于