4

DOMPDF を使用して、1 つのスクリプトから約 500 件のレポートを生成しています。約 10 ~ 15 個の PDF が生成された後、メモリが不足しています。

デバッグでは、フォントの読み込みに入るたびに 8M を読み込んでいるように見えますが、これはフォント キャッシュ コードで処理する必要があるようです。

ここで何がうまくいかないのか、何か考えはありますか? 簡単なコード スニペットを投稿したいのですが、ほとんどが複数のレイヤーに抽象化されているため、単純なコピー アンド ペーストではありません。

4

3 に答える 3

2

dompdf 0.6 ベータ版を使用している場合、メモリ エラーは、dompdf がテーブルをレンダリングするときに入る無限ループの結果です。これは、私が解決できていない既知の問題です。

関連 URL:

http://code.google.com/p/dompdf/issues/detail?id=34

http://code.google.com/p/dompdf/issues/detail?id=91

(表示されるエラーは pdf PHP Fatal error: Allowed memory size of 268435456 bytes尽くされています)

于 2010-07-12T14:07:37.427 に答える
1

まず、これがリモートで商業的なものである場合は、Prince XMLを入手してください。これは、他の HTML から PDF への変換ソリューションよりも大幅に優れており、高速です (私はそれらすべてを調べました)。コストは、節約された開発者の時間ですぐに回収されます。

第 2 に、メモリ リークの問題を解決するために、各レポートを個別のプロセスで印刷するのがおそらく最も速い解決策です。これがコマンド ラインから実行されている場合は、外側のループを、各レポートのプロセスを開始するシェル スクリプトのようなものにします。それが可能な OS を使用している場合、Web フォークから各スクリプトのプロセスを実行する場合。

Convert HTML + CSS to PDF with PHP? をご覧ください。.

于 2010-02-24T01:46:45.557 に答える
1

cletus が示しているように、DOMPDF を使用する場合の最も迅速な解決策は、おそらく各レポートを個別のプロセスでレンダリングすることです。実際のレンダリングを実行する子スクリプトを (exec を使用して) 呼び出すマスター スクリプトを作成できます。DOMPDF サポート グループに関するこのディスカッションでわかるように、パフォーマンスが少し向上する可能性があるようです。

問題を示す何らかの例がなければ、メモリ使用量に関して他の方法で何が起こっているのかを言うのは困難です。1 つのスクリプトで複数のインスタンスを処理するために、DOMPDF とその下にある CPDF レンダリング エンジンが最適化されているとは思えません。そのため、静的変数を使用してそのデータをキャッシュできたとしても、フォントはおそらく毎回メモリにロードされます。

于 2010-02-24T02:50:16.157 に答える