6

私はTWIGテンプレートエンジンを備えたSymfonyフレームワークを持っています。私は1000ページのpdfを作成しています

<dynamic-page>...content in for-loop...</dynamic-page>`

ただし、でディスクに書き込んでいるとps_facade、メモリ不足の致命的なエラーが発生します。このpdfを1チャンク5ページずつ作成する方法はありますか?

調査の結果、5 ページ分のデータを含むテンプレートを使用し、それをファイルに書き込むとうまくいくことがわかりました。ただし、ページ番号は 1 ~ 1000 にする必要があるため、ページ番号を追加することはできません。私のフッターコードは次のようになります。

<placeholders>
    <footer>
        <div height="30px" width="100%">
        <hr/>
        <div float="left">Blah Blah</div>
        <div float="left" margin-left="350px"><page-info format="Page %s of %s"></div>
        </div>
    </footer>
</placeholders>
4

1 に答える 1

2

このような長いプロセスには、メッセージングシステムを使用する必要があります。RabbitMQがその仕事をすることができます。

  1. ユーザーがPDFをリクエストします
  2. あなたは彼の要求が考慮されていること、そして仕事が終わったときに彼が電子メールを受け取ること、または彼が後で戻ってくることができることを即座に彼に伝えます
  3. コンシューマーはジョブを確認し、pdf生成を開始します(phpである必要はありません)。

長所:プロセスはphpのWebバージョンでは実行されないため、memory_limitとmax_executionの時間制限はありません。ジョブがすでに実行されている場合は、同じpdfに対して別の世代を起動する代わりに、そのようにユーザーに通知できます。また、人々は焦ったときにページを更新することが多いため、これはサーバーにとって非常に大きなProになる可能性があります(CPU使用率が低くなります)。

短所:メッセージングサーバーをセットアップし、いくつかのことを学ぶ必要があります。しかし、これは本当に短所ですか?

于 2012-10-13T10:44:25.890 に答える