web-dev-qa-db-ja.com

PHPで無限の最大実行時間を取得するにはどうすればよいですか?

2000ページのサイトがあり、file_get_html()関数と正規表現を使用して、各ページを繰り返し処理してサイトマップを生成したいと思います。

明らかに、これは最大実行時間のために時間がなくなるため、1回のサーバー側実行で完了することはできません。小さなアクションを実行し、進行状況をデータベースに保存してから、次のタスクをキューに入れる必要があると思います。助言がありますか?

11
Paul Mason

コマンドラインで実行すると、最大実行時間はありません。

プロバイダーが操作を許可している場合は、これにset_time_limit(0);を使用することもできます。

IPアドレスが禁止されるかどうかはわかりません。これは、リクエストの送信先のサーバーのセキュリティによって異なるためです。


その他の解決策

1つ(またはいくつか)のページをフェッチして、ソースコード全体で新しいURLを検索できます。次に、これらをデータベースのキューに入れることができます。次に、次の実行で、キューを処理します。

21

ジョブキューとワーカー実装の使用を検討する必要があります。 Gearman または zeromq をお勧めします。これらは両方ともネイティブのphpバインディングを持っています。

3
Shoan

set_time_limit(0)を使用します。詳細な説明については、PHPマニュアルを参照してください。

秒単位の最大実行時間。ゼロに設定すると、時間制限は課されません。

編集:2番目の質問については、そうは思われませんが、ホスティングサービスの利用規約をチェックして、許可されているかどうかを確認する必要があります。

3
Madara's Ghost

Php.iniでmax_execution_timeを0に設定します。サーバーで実行するすべてのスクリプトに影響しますが、サーバーレベルの修正を探している場合は、これで問題が解決します。

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

max_execution_time = 0
1
Kirrus

あなたにとって最良の方法は、remotapiを使用することです。たとえば、import.ioを使用して、json形式で各ページからparamを取得できます。これは、file_get_contentまたはflie_get_htmlの呼び出しごとにライトページを取得する方法です。

しかし、この問題のカールはfile_get_htmlよりも優れています

0
AliHossinzadeh