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);
}