【发布时间】: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