将内存设置为高,然后将set_time_limit设置为0

时间:2012-09-16 23:50:02

标签: memory memory-leaks php

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

1 个答案:

答案 0 :(得分:1)

在脚本执行结束时没有将其重置回原始文件。

From the manual:

  

string ini_set(string $ varname,string $ 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;
}