PHP:撤消set_time_limit?

时间:2011-11-25 01:01:10

标签: php

我有一个我知道需要很长时间才能执行的功能。因此,我想在函数的开头做这个:

set_time_limit(0);

当我完成该功能时,是否会将时间限制恢复到原来的状态?或者我应该将它恢复到原来的状态?如果是这样,我如何获得原始的最大执行时间?

2 个答案:

答案 0 :(得分:0)

离开功能时,该值不会重置。您可以使用ini_get阅读原文,但要获得正确的行为并非易事,请注意http://php.net/set_time_limit中的以下内容:

  

调用时,set_time_limit()从零重新启动超时计数器。换句话说,如果超时是默认的30秒,并且脚本执行了25秒,则会调用set_time_limit(20),脚本将在超时之前运行总共45秒。

答案 1 :(得分:0)

您可以使用http://www.php.net/manual/en/function.get-cfg-var.php或类似这样的课程:

class TempIniValues {

    private $original_settings = array();

    public function __construct($var_name, $value) {
        $this->set($var_name, $value);
    }

    public function set($var_name, $value) {
        $this->original_settings[$var_name] = ini_get($var_name);
        ini_set($var_name, $value);
    }

    public function get($var_name, $if_orig=false) {
        return $if_orig?$this->get_orig($var_name):ini_get($var_name);
    }

    public function get_orig($var_name) {
        return isset($this->original_settings[$var_name])?$this->original_settings[$var_name]:NULL;
    }

    public function __destruct() {
        foreach($this->original_settings AS $setting_name => $setting_value) {
            ini_set($setting_name,$setting_value);
        }
    }

}


function test() {
    var_dump(ini_get('max_execution_time'));
    $temp_ini=new TempIniValues('max_execution_time',42);
    var_dump(ini_get('max_execution_time'));
}

var_dump(ini_get('max_execution_time'));
test();
var_dump(ini_get('max_execution_time'));