0

いくつかの foreach ループがあり、使用するすべてのループの最後に

set_time_limit(30)

これにより、カウンターがゼロに戻ります。

現在、スクリプトはより長い時間実行されます (API を使用して 5000-10000 の記事を取得し、DB に保存します) が、しばらくすると (既に大量のデータを処理している場合)、「30 秒の最大実行時間を超えました」というメッセージが表示されます。

メモリ不足のせいでしょうか?どうすればこの問題に取り組むことができますか?

スクリプトは API を使用して記事を取得しており、foreach ループは基本的にこのように使用されます

foreach($articles as $article)
{
//do stuff with single article using $article

set_time_limit(30);
}

1 つの記事を取得して処理するのに 30 秒以上かかるとは思いませんが、スクリプトをしばらく実行すると、その制限に達したようです。私は何を間違っていますか?set_time_limit(9000) またはそのようなものを使用して、スクリプトが最大 30 秒よりも長い 5 秒のジョブを実行できるようにしたくありません。これにより、おそらくジョブが完了しますが、これは良い方法ではないと思います問題を解決するには?

4

3 に答える 3

1

なんらかの理由で時間制限を課す必要があると感じた場合は、次のことを考慮してください。

set_time_limit(0);
$n = 0; $inc = 1;
foreach($article as $v){
  // do stuff with $v - Less characters is faster
  $n+=$inc;
}
set_time_limit($n);

$incニーズに合わせて変更してください。

于 2013-10-25T01:51:12.960 に答える
0

これを試して:

PHP has a function set_time_limit which sets the time limit of execution.
It has one argument set in seconds.
If you use like this,
set_time_limit(0)
then it will set unlimited time of execution.

Write this code in top.

ここから詳細を参照できます: http://php.net/manual/en/function.set-time-limit.php

  • ありがとう
于 2013-10-25T04:24:47.167 に答える