2012-05-10 3 views
0

だからここ内幕です:max_execution_timeに代替

私は30秒に彼らのmax_execution_timeには制限されており、それは私が試した(オーバーライドされ、それが経由することはできません確認することができませんHostgatorの、上にあるために開発していたクライアント彼らサポートおよびウィキ)私は何

は...

  1. ループXML
  2. しかしコードがアップロードされたファイルを取っていることと、持っているすべてのFEを取得ファイル内のダウンロードされたリンク
  3. 各xmlファイル
  4. をそれぞれダウンロードし、各ファイルの各xml配列を個別にループし、各項目の情報を、それらがどこにあるかに基づいてデータベースに挿入する。ファイル名)

私はこれを何とか待ち行列に入れたり、ワークロードを複数のファイルに分割する方法はありますか?私はコードが完璧に動作し、それを挿入する前に各項目が存在するかどうかを確認しますが、私はexecution_limitの周りを回っていません。

ご質問がありましたらお知らせください。

答えて

2

タイムラインは、WebサーバからPHPスクリプトを実行する場合にのみ有効です。CLIまたはバックグラウンドプロセスからスクリプトを実行すると、正常に動作するはずです。

外部スクリプトの実行は、十分注意していないとやや危険ですが、有効なオプションです。

次のリソースを確認してください:

Process Control Extensions

、具体的に:私はこのような状況にいる

pcntl-exec

pcntl-fork

+0

残念ながら、ホストは上記のすべてを無効にしています。 = \ – Braunson

2

シャットダウンハンドラを登録してmax_execution_timeをトリックできることは知っていましたか?そのコード内でさらに30秒間実行することができます;-)

これでもっと便利な機能が追加されました。

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

  • はすべてのダウンロードリンクを取得した後、あなたは
  • 次に使用すると、1つのファイルをダウンロードし、それを処理テーブルにそれらを追加します。完了したら、あなたはキューから(から削除)、それらをオフにチェック各たら
  • はあなたを実行キューに、あなたがそのURL aを要求する必要があり、これが機能するために

を残した仕事がまだありますかどうかを確認少しだけ;作業が完了するまで、JavaScriptを使用して再読み込みを続けるのでしょうか?

+0

各親フィードの大量のXMLファイルを処理して処理するには、まだ30秒以上かかります。 – Braunson

+0

しかし、少なくとも1つのXMLファイルを読み込んで、抽出したデータをデータベースに追加することはできますか? –

+0

いいえ、95%の時間、XMLファイルは膨大で、処理には最大30秒を超える処理が必要です。これを回避するにはスクリプトを実行しないでください。 – Braunson

0

を。私のアプローチは、その実行時間制限を受け入れるジャックの

  • に似ているだけで、プロセスのすべての時間要求の厳しい部分を識別
  • register_shutdown_functionに見て)突然の終了に対応するためのアプリケーションを設計するが
  • になります
  • プロセスの進行状況を継続的に保存する
  • コンポーネントを変更して、任意の時点から開始できるようにします。 XMLファイル内の位置、または取得するXMLリンクのリストをダウンロードし続ける

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

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

もちろん、改善、キャッシング、不要なものをスキップする/変更していないなど