set_time_limit() 和 ini_set('max_execution_time', ...)
2022-08-30 08:47:47
这两行代码之间有什么实际区别吗?
ini_set('max_execution_time', 20*60);
set_time_limit(20*60);
这两行代码之间有什么实际区别吗?
ini_set('max_execution_time', 20*60);
set_time_limit(20*60);
查看当前源:
/* {{{ proto bool set_time_limit(int seconds)
Sets the maximum time a script can run */
PHP_FUNCTION(set_time_limit)
{
zend_long new_timeout;
char *new_timeout_str;
int new_timeout_strlen;
zend_string *key;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_timeout) == FAILURE) {
return;
}
new_timeout_strlen = zend_spprintf(&new_timeout_str, 0, ZEND_LONG_FMT, new_timeout);
key = zend_string_init("max_execution_time", sizeof("max_execution_time")-1, 0);
if (zend_alter_ini_entry_chars_ex(key, new_timeout_str, new_timeout_strlen, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == SUCCESS) {
RETVAL_TRUE;
} else {
RETVAL_FALSE;
}
zend_string_release(key);
efree(new_timeout_str);
}
/* }}} */
set_time_limit()
确实只是围绕相应调用的便利包装。它甚至没有执行广告的计时器重置。(但我猜“计时器”实际上不是一个单独的实体,但ini值本身就是这样使用的。ini_set()
需要考虑的一个微小区别是它们在失败时的行为方式:
set_time_limit()
不返回任何内容,因此您无法使用它来检测它是否成功。此外,它还会引发警告:
警告:set_time_limit():无法在安全模式下设置时间限制
ini_set()
失败时返回,并且不触发警告。FALSE
在实践中,这应该不是很多,因为据称安全模式是唯一可能导致故障的情况,并且该功能已被弃用。
除此之外,该函数只是属性更改的包装器。