【问题标题】:php mysql server execution time - want to reset after every time a function is called. is it possible?php mysql 服务器执行时间 - 每次调用函数后都希望重置。是否可以?
【发布时间】:2012-01-14 23:02:15
【问题描述】:

我正在使用递归函数为每个用户进行一些计算,并在特定条件下奖励他们。一切正常,但现在我的用户数已增加到 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 社区版。

请帮忙

【问题讨论】:

  • 出于好奇,你为什么要使用递归?
  • 附带说明, PHP 的递归限制是多少?我似乎记得我前段时间遇到了一些编码错误。 Gianluca 是对的:你应该只遍历用户,而不是像这样递归。
  • 感谢 Gianluca 和 Wrikken。你说得对,我应该使用循环而不是递归函数。但是话又说回来,我应该只为所有用户循环该功能吗?或者我应该创建一个循环而不是一个函数?当我用循环运行函数时,它会产生同样的老问题......
  • 另外,这种执行的最佳方法是什么?在此先感谢:)

标签: php mysql function execution-time


【解决方案1】:

我不知道在哪里可以找到递归限制,但据我所知,这不是一个可以使用它的地方。在这里进行快速测试:

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

结果:

...
20916
Segmentation fault

段错误导致服务器需要重新启动,并且数字匹配,我并不感到惊讶。

在这里告诉我们更多关于你想要做什么的信息,因为在这里通过所有用户递归似乎很疯狂......

【讨论】:

  • 我正在尝试做的事情:我有一个拥有超过 20000 个用户的系统。他们有一定的左右推荐值。我需要比较那些有条件的人,并据此给予他们激励。就像一个用户左边有 40 个人,右边有 40 个人,我需要给他 2 美元等值的激励。
  • 在不知道您的数据是什么样子的情况下很难判断。发布相关的 CREATE TABLE 语句,并详细说明必须执行的操作。
猜你喜欢
  • 2022-11-30
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2019-02-27
相关资源
最近更新 更多