PHP 8.2 기준.

 

PHP 스크립트가 커맨드라인에서 실행될 경우 max_execution_time 값은 기본적으로 0이 되고,

ini_set('max_execution_time') 이나 set_time_limit()로 해봐도 실행시간 제한이 되지 않았음.

 

그러다가 찾은 방법이 pcntl_alarm()을 이용하는 방법.

<?php
 
// pcntl 필요
if (!extension_loaded('pcntl')) {
    exit('[ERROR] pcntl 필요\n');
}
 
// 실행시간제한
function setTimeLimit(int $timeLimit)
{
    pcntl_async_signals(true);
    pcntl_signal(SIGALRM, function() use ($timeLimit){
        trigger_error(sprint("Maximum execution time of %d seconds exceeded", $timeLimit), E_USER_ERROR);
    });
 
    pcntl_alarm($timeLimit);
}
 
// 실행시간 5초 제한
setTimeLimit(5);
 
for ($i=0; $i<10; $i++) {
    sleep(1);
}

 

 

 

 

 

 

 

 

Posted by bloodguy
,