0

だからここにローダウンがあります:

私が開発しているクライアントはHostGator上にあり、max_execution_timeが30秒に制限されており、オーバーライドできません(サポートとwikiを介してできないことを確認しました)

私がコードを実行しているのは、アップロードされたファイルを取得して...

  1. xmlをループします
  2. ファイル内のすべてのフィードダウンロードリンクを取得する
  3. 各xmlファイルをダウンロードします
  4. 各ファイルの各xml配列を個別にループし、各アイテムの情報をデータベースに挿入します(ファイル名など)。

どういうわけかこれをキューに入れたり、ワークロードを複数のファイルに分割したりする方法はありますか?コードが問題なく機能し、挿入する前に各アイテムが存在するかどうかを確認することはわかっていますが、execution_limitを回避するのに行き詰まっています。

ご提案をいただければ幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。

4

3 に答える 3

2

The timelimit is in effect only when executing PHP scripts through a webserver, if you execute the script from CLI or as a background process, it should work fine.

Note that executing an external script is somewhat dangerous if you are not careful enough, but it's a valid option.

Check the following resources:

Process Control Extensions

And specifically:

pcntl-exec

pcntl-fork

于 2012-05-10T04:21:14.337 に答える
2

max_execution_timeシャットダウンハンドラーを登録することで、をだますことができることをご存知ですか?そのコード内でさらに30秒間実行できます;-)

さて、もっと便利なものを探しましょう。

データベースに小さなキューテーブルを追加して、スクリプトが途中で停止した場合に備えて、現在の場所を追跡できます。

  • すべてのダウンロードリンクを取得したら、それらをテーブルに追加します
  • 次に、1つのファイルをダウンロードして処理します。完了したら、キューからそれらをチェックオフ(削除)します
  • 実行するたびに、キューにまだ作業が残っているかどうかを確認します

これを機能させるには、そのURLを数回リクエストする必要があります。おそらくJavaScriptを使用して、作業が完了するまでリロードを続けますか?

于 2012-05-10T04:16:37.707 に答える
0

私はそのような状況にあります。私のアプローチはジャックのアプローチに似ています

  • 実行時間制限が単にそこにあることを受け入れる
  • 突然の終了に対処するようにアプリケーションを設計する(調べるregister_shutdown_function
  • プロセスの時間のかかる部分をすべて特定する
  • プロセスの進行状況を継続的に保存する
  • コンポーネントを変更して、任意のポイントから開始できるようにします。たとえば、XMLファイル内の位置、またはフェッチするXMLリンクのリストのダウンロードを続行できます。

私が2つのモジュールを作成したタスクでは、実際の処理のためにインポートします。これらのタスクを処理するためのTaskManagement。
TaskManagerを呼び出すために、私はCRONを使用します。これは、十分な場合、Webホスティングが提供するものによって異なります。WebCronもあります。

JackのJavaScriptメソッドの利点は、必要な場合にのみリクエストを追加することです。実行するタスクがない場合、スクリプトの実行時間は非常に短く、おそらく誇張されます*が、それでもなおです。欠点は、タブ/ブラウザ、JSサポートなどを閉じないように、ユーザーがずっと待つ必要があることです。*)このような瞬間に1人のユーザーを1回クリックするよりもはるかに要求が少ない可能性があります。

次に、もちろん、パフォーマンスの向上、キャッシュ、不要なものや変更されていないもののスキップなどを調べます。

于 2013-12-01T10:23:44.040 に答える