0

在 PHP 中,如果我通过设置内存 100Mini_set然后我设置set_time_limit(0);这是否意味着我的 PHP 内存分配永远是 100M(直到我重新启动我的 Apache)?

4

1 回答 1

1

在脚本执行结束时不会将其重置为原始状态。

从手册:

字符串 ini_set ( 字符串 $varname , 字符串 $newvalue )

设置给定配置选项的值。配置选项将在脚本执行期间保留此新值,并将在脚本结束时恢复。

并被set_time_limit(0);同等对待。

例子:

// 1. Script starts
echo ini_get('memory_limit');//128M

// 2. We set a new limit the script will now have 100M
ini_set('memory_limit','100M');
echo ini_get('memory_limit'); //100M

die;
// 3. Script ends now its set back to 128M

set_time_limit(0);只是告诉脚本不要超时,但说你要set_time_limit(0);在循环中使用,然后在每次迭代中,它的内部计数器一遍又一遍地设置为 0。

因此,如果您要set_time_limit(1);在循环中使用,只要循环的每次迭代持续时间不超过 1 秒,那么它仍然不会超时,因为set_time_limit(n);每次迭代都会将内部超时计数器重置为 0。

1秒后不超时的示例:

for($i=0;$i<=10;$i++){
    set_time_limit(1);
    usleep(999998); //2micro seconds from a second
    echo $i;
}
于 2012-09-16T23:52:24.740 回答