set_time_limit ()와 ini_set ( 'max_execution_time',…)의 차이점
이 두 줄의 코드 사이에 실제 차이가 있습니까?
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_set()
호출을 둘러싼 편의 래퍼 입니다. 광고 된 타이머 재설정을 수행하지 않는 것 같습니다. (그러나 "타이머"는 실제로 별도의 엔티티가 아니라고 생각하지만 ini 값 자체는 그대로 사용됩니다.)
고려해야 할 작은 차이점은 실패시 작동하는 방식입니다.
set_time_limit()
아무것도 반환하지 않으므로 성공 여부를 감지하는 데 사용할 수 없습니다. 또한 다음과 같은 경고가 발생합니다.경고 : set_time_limit () : 안전 모드에서 시간 제한을 설정할 수 없습니다.
ini_set()
FALSE
실패시 반환 되며 경고를 트리거하지 않습니다.
실제로 는 안전 모드 가 실패를 일으킬 수있는 유일한 상황이며 기능이 이미 사용되지 않기 때문에 큰 문제 는 아닙니다.
그 외에 함수는 속성 변경에 대한 래퍼 일뿐입니다.
아니에요.
echo ini_get('max_execution_time'); // 30
set_time_limit(100);
echo ini_get('max_execution_time'); // 100
타이머 재설정과 관련하여 두 경우 모두 재설정됩니다.
ini_set('max_execution_time', 10);
for ($i=0; $i<50000000; $i++) {
}
ini_set('max_execution_time', 10); // timer is reset, just as it would be with set_time_limit
for ($i=0; $i<50000000; $i++) {
}
echo 'done';
PHP 매뉴얼에 따르면 set_time_limit ()는 호출시 실행 타이머를 재설정합니다. 나는 ini_set ()이 동일한 부작용을 가지고 있다고 믿지 않습니다.
자세한 내용은 http://php.net/manual/en/function.set-time-limit.php 를 참조하십시오.
업데이트 : PHP 소스 코드의 다양한 부분 (mario의 대답에서 참조하는 것을 포함)을 조사했기 때문에 ini_set ()과 set_time_limit ()가 정확히 동일하다는 결론입니다.
ini_set ()은 실제로 타이머를 재설정합니다 (두 함수가 재설정을 수행하는 방법에 대해서는 여전히 손실이 있지만 타이머가 종료되면 스크립트를 종료하는 함수를 찾아야합니다).
두 모드 "set_time_limit (5)"및 "ini_set ( 'max_execution_time', '5')"재설정 시간, 실용적이고 명확한 예 :
//-----------------------------------------------------------
//test "max_execution_time":
ini_set('max_execution_time', 5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
ini_set('max_execution_time', 5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
echo '<br/>';
echo 'done with max_execution_time';
//-----------------------------------------------------------
//test "set_time_limit":
set_time_limit(5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
set_time_limit(5);
for ($i=0; $i<3; $i++) {
sleep(1);
}
echo '<br/>';
echo 'done with set_time_limit';
모든 "for"가 성공적으로 완료되었습니다. 이는 모든 경우에 시간이 재설정되었음을 나타냅니다. 인사말
이 코드는 Windows에서만 적용됩니다. PHP Linux의 절전 시간은 예를 들어 Linux에서 실행 시간을 소비하지 않습니다.
<?php
set_time_limit(2);
for($i=0; $i<10; $i++)
{
echo ("$i \n");
sleep(1);
}
`표시됩니다
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
그러나 기본 구성을 사용하는 Windows의 동일한 코드는
1 | 2
'IT이야기' 카테고리의 다른 글
Observable.FromEvent 대신 Observable.FromEventPattern을 사용 (0) | 2021.04.30 |
---|---|
Os.Rename에서 강제 덮어 쓰기 (0) | 2021.04.30 |
Rust에서 HTTP 요청 (0) | 2021.04.29 |
[Microsoft] [ODBC 드라이버 관리자] 데이터 원본 이름이없고 기본 드라이버가 지정되지 않았습니다. (0) | 2021.04.29 |
Visual Studio가 빌드 중에 계속 중단되었을때 (0) | 2021.04.29 |