4

ePubファイルを作成するためのチュートリアルを見ています。ePubブックを含むzipには、「圧縮されていない、zipファイルの最初にある必要がある」mimetypeというテキストファイルが含まれている必要があると記載されています。彼の例ではコマンドラインツールを使用していますが、PHPで同じことをどのように実行できるのか疑問に思いました。

コードで最初に追加する限り、zipファイルの最初にあると思いますが、圧縮せずにzipに追加する方法を説明します。それとも私はこれを読み間違えていますか?

前もって感謝します。

4

3 に答える 3

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生成コードでテストしましたが、正常に機能しました。Epubcheck1.05はそれを検証します。ちなみに、「OPLのEPUBライブラリ」を使用している場合は、かなりバグがあることに注意してください。このソリューションを焼き付けてすぐに修正を投稿する予定ですが、それまでは注意してください。

于 2010-08-01T22:36:34.530 に答える
2

私は現在、PHPを使用してepubエクスポートツールに取り組んでおり、PCLZipを使用して良い経験をしました。PCLZIP_OPT_NO_COMPRESSIONというオプションがあり、ファイルを追加するときにadd()呼び出しで使用します。mimetypeファイルを追加するときにこれを使用します。これは魅力のように機能します。

于 2011-01-12T01:05:48.013 に答える
1

ネイティブのPHPZipArchiveクラスではそれを行うことはできません。ただし、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(...);

(しかし、テストされていません)

于 2010-06-29T17:08:36.957 に答える