3

登録リストがあり、リストの各人に PDF を送信する必要があります。各電子メールには PDF が含まれている必要があります。この PDF はサーバー上に基本バージョンがありますが、各個人は名前/会社などでパーソナライズする必要があります。これは各人に電子メールで送信する必要があり、現時点では合計で 2,500 になりますが、将来的にはさらに多くなる可能性があります。

このプロジェクトに取り組み始めたばかりですが、先週から継続的に遭遇した問題は、サーバーがこれを処理できないように見えるということです。現在、スクリプトは Zend を使用しているため、Zend_Pdf と Zend_Mail を使用して PDF を作成し、電子メールで送信できます。Zend_mail は smtp.com から smtp サーバーに接続して、実際の電子メール送信を行います。

サーバー上でかなりの数のサイトを実行しているため、サーバーがダウンするわけにはいきません。バッチで実行すると、ダウンし始める可能性があります。これまでの最善の解決策は、ローカル マシンからスクリプトに対して curl を実行することです。その後、curl スクリプトはそれをバッチで何度も繰り返し呼び出します。これでも問題が発生する場合があり、完了した後でもメモリを大量に消費するようです(方法はよくわかりません)。

だから私が探しているのは、ライブラリ、コード、サーバーのセットアップに関する情報など、これを実行するための情報です。私はアイデアを使い果たしました。これは、これまで (特に一括レベルで) 実際に行う必要がなかったことです。

ありがとうございました。

編集:

また、PDF にバーコードを作成するために zend_barcode::factory を使用していることを忘れていました。

4

4 に答える 4

1

私が提案する最初のステップは、可能であれば問題がどこにあるのかを突き止めることです. PDF世代ですか?メール便ですか?「サーバーはこれを処理できないようです」は、「サーバーがダウンする」のように実際に何が失敗しているのかを示していません-メモリ/ディスク容量/時間またはその他のものが不足しているかどうかを判断する必要があります. それは、あなたの世代に微調整や新しいアプローチが必要かどうかを判断するのに役立ちます. 単一の手動呼び出しでも失敗する可能性があると述べたので、問題を正確に絞り込んで失敗の原因を特定できるはずです。

リソース制限近くで実行している場合 (複数のサイトを実行している場合など)、おそらくこの機能を別のマシンにオフロードする必要があります。オプションは次のとおりです。

  1. 新しいホストで同じセットアップを実行し、新しいシステムを使用するようにアプリケーションを調整します
  2. 新しいホストで新しいセットアップを実行する
  3. 外部システムを使用する (前述の PDFCrowd やDocmosisなど)

問題の詳細から始めます。それが役立つことを願っています。私は Docmosis を作成した会社で働いていることに注意してください。

于 2012-10-03T00:28:38.173 に答える
0

HTTP 経由でスクリプトを呼び出そうとすると、スクリプトは php.ini で指定された max_execution_time に基づいてタイムアウトします。

コマンドラインから実行できるphpスクリプトを作成し、cronジョブを介してスケジュールする必要があります。スクリプトは、一度に 1 人のユーザーを読み取り、そのユーザーの PDF ファイルをまとめて、そのユーザーに電子メールで送信できます。その後、サーバーがプロセスを処理できるかどうかを確認するために、いくつかのパフォーマンス チェックを実行する必要がある場合があります。

于 2012-10-03T02:57:37.133 に答える
0

私の経験から - 2 つのオプション:

1 つ以上の PDF ライブラリを使用して動的に PDF を生成します (非常に遅くなる可能性があります)。

また

webkit レンダリング エンジンを使用して html を pdf に変換する単純なシェル ユーティリティであるwkhtmltopdfのようなものと、qt を使用します。

基本的に、純粋に動的な PDF 生成のオーバーヘッドなしで、n 個の HTML ページをループして PDF を生成できます。

これを使用して、HTML ページを PDF にすばやく変換できるため、毎日何千ものパーソナライズされた PDF を配布しています。依存関係がありますが、機能し、PDF を個別に「作成」するよりも (計算的に) 負荷がかかりません。

お役に立てれば。

于 2012-10-02T23:24:30.297 に答える
0

Here's some ideas:

  1. Is there a particular reason this has to run on a web server? Why not run the framework from a different machine, but with the same settings? You might have to create a different controller to handle the command-line version of the request, but there's no fundamental reason it can't work.
  2. If creating PDFs programatically is giving you a headache, you can instead use a service.
    In the past, I've used PDFCrowd with good results, and they provided a useful PHP library. You can give them a blob of HTML, using full URLs for any stylesheets and images, and they'll create a PDF for you.

    The cost per document varies from 0.5-4.5 cents per document depending on your rate plan.

    There are other services which do the same thing.

  3. If this kind of batch job is a big deal for your company, you might consider an asynchronous job queue like beanstalk. You could queue up thousands of these, and a worker script could handle the requests at whatever pace you deem reasonable.
于 2012-10-02T23:24:49.640 に答える