0

私は再帰関数を使用して、すべてのユーザーに対して何らかの計算を行い、特定の条件に対して報酬を与えています。すべてが正常に機能していましたが、ユーザー番号が20000以上に増えたため、スクリプトを完了できません...私のコードは次のようになります

function give_award($mid) {

    $qry = mysql_query("SELECT * FROM users WHERE uid='$mid'");
    while($row=mysql_fetch_array_result)
     {
      $refer = $row["refer"];
     }
    //some conditions applied
    //query for user award
    //if succeed

    $mid = $mid+1;
    give_award($mid)


}

give_award($mid);

きっと Give_award(); 一度の呼び出しでタイムアウトをしていません。関数が再帰的に (再) 呼び出される前に、毎回制限時間をリセットする方法はありますか?

私が試した方法: set_time_limit(0);

.htaccess でタイムアウト制限を変更する php.ini で apache タイムアウト制限を変更する

注意:致命的なエラーは表示されませんでした...しかし、これをローカルサーバーで実行しようとするたびにApacheを再起動する必要があります... Win7 32ビットでZend Server Communityエディションを使用しています。

助けてください

4

1 に答える 1

0

再帰制限をどこで見つけるかはわかりませんが、とにかく私が知る限り、これを使用する場所ではありません。ここでの簡単なテスト:

<?php
function KillingRecurse($r){
        echo $r.PHP_EOL;
        KillingRecurse(++$r);
}
KillingRecurse(0);

結果:

...
20916
Segmentation fault

セグメンテーションフォールトによってサーバーを再起動する必要があり、数値が一致しているのは驚きではありません。

ここで何をしようとしているのか、詳しく教えてください。すべてのユーザーを繰り返し使用するのは、ここでは気が狂うようです...

于 2012-01-15T00:01:19.780 に答える