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 社区版。

请帮忙

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 回答