PdfLib PHP 拡張機能を使用して PDF ファイルを生成しています。新しいファイルを開始し、そこに画像を読み込み、end_document を呼び出してファイルを終了します。
すべて正常に動作し、ファイルは正しく生成されますが、ファイルを生成した直後に (ファイルを生成する同じ関数で) Amazon S3 クラウドにファイルをアップロードしようとしています。ファイルはアップロードされましたが、完全ではありません。空の pdf がアップロードされたようです。
// get a PDFLib object
$p = new PDFlib();
// determine filename
$pageFileName = $page->getPageNr() . '_' . sha1(microtime()) . '.pdf';
// determine local file path and S3 file path
$filePath = $this->fs->getPath(
Dt_Util_FileStorage_Path::FILETYPE_SOURCEFILE,
$pageFileName,
$job
);
// start the document
if ($p->begin_document($filePath->getTmpPath(), "") == 0) {
throw new Dt_Exception_DtException($p->get_errmsg(), 3, null);
}
// begin a new page inside the new document
$p->begin_page_ext($widthScreenResPixels, $heightScreenResPixels, "");
// load an image resource
$image = $p->load_image("auto", $imgfile, "");
if ($image == -1){
throw new Exception("Error: " + $p->get_errmsg());
}
// load the image into the current page
$p->fit_image($image, 0, 0, "boxsize={" . $widthScreenResPixels . " " . $heightScreenResPixels . "} fitmethod=entire");
// end the page
$p->end_page_ext("");
// release the image
$p->close_image($image);
//write PDF file
$p->end_document("");
// sleep(5);
// upload the file to S3
$this->fs->putFile($filePath);
ファイルをローカルに保存する場所には、本来あるべきファイルが含まれています。画像がそこにロードされ、ファイルのサイズは約 600KB です。アップロードされたファイルは空のスケルトンのようなもので、PdfLib->begin_document を呼び出したときに生成されたファイルですが、実際に何かを配置する前に開くことができず、サイズは 104 バイトです。
end_document の後、アップロードの前に数秒間スリープしてみました。PdfLib が処理を完了するのに時間がかかるのではないかと考えたからです。しかし、これは効果がなく、結果はまったく同じです。
これを修正する方法、これを引き起こす原因、解決策を探す場所についてのアイデアはありますか?
UPDATE 問題は、私が使用しているS3 APIクラスのようです。私はこれを使用していました。公式の SDK を使用すると、アップロードは期待どおりに成功します。公式SDKを使い続けます。なぜ他の API クラスを使用して失敗したのかという元の疑問が残ります。