time limiter
1.0.0
스크립트 실행 시간을 제한하는 데 도움이 되는 작은 유틸리티 클래스입니다.
클래스는 일반적으로 시간 소모가 많은 루프 내에서 사용됩니다.
// maximum time to execute one request
$ REQUEST_TIMEOUT_SEC = 5 ;
$ curlClient = new SomeCurlClient (); // just an example.
// shared hosting often has a limit. E.g. 30 seconds
$ maxExecutionTime = ini_get ( ' max_execution_time ' );
$ timeLimiter = new timelimiter TimeLimiter ( $ maxExecutionTime , $ REQUEST_TIMEOUT_SEC );
// check if there is time left to prevent 504 timeout
// recommended
foreach ( $ timeLimiter => $ timeLeft ){
$ result = $ curlClient -> doSomeHeavyJob ([
' timeout ' => $ REQUEST_TIMEOUT_SEC
]);
// handle the result
// ...
}
// or alternatively while loop might be used with respective Iterator calls.
while ( $ timeLimiter -> valid ()){
$ result = $ curlClient -> doSomeHeavyJob ([
' timeout ' => $ REQUEST_TIMEOUT_SEC
]);
$ timeLimiter -> next (); // must be called to adapt to long iterations
}
Composer를 사용하는 프로덕션 종속성:
composer require morjodrom/time-limiter
개발 전용 사례에 대한 개발 종속성:
composer require --dev morjodrom/time-limiter
int $limitSeconds
- 처리하는 데 걸리는 시간(초)입니다. 0은 제한이 없음을 의미합니다. ini_get('max_execution_time')
의 값이 원하는 옵션일 수 있습니다.
[int $preliminaryTimeout] = DEFAULT_TIME_UP_SECONDS = 3
초가 소요됩니다. $preliminaryTimeout
루프에서 수행하는 가장 긴 이론적 작업보다 약간 커야 합니다. 따라서 실행 시간을 초과할 수 있는 마지막 위험한 작업은 생략됩니다. 클래스는 $preliminaryTimeout을 가장 긴 작업과 동일하게 업데이트하기 위해 각 반복에 소요된 시간을 추적합니다.
[int|null $startTimestamp = $_SERVER['REQUEST_TIME']
기본적으로 사용됩니다. Unix Epoch(1970년 1월 1일 00:00:00 GMT) 이후의 타임스탬프여야 합니다(예: time()
호출). foreach
구성을 사용하는 것이 좋습니다. 올바른 Iterator 호출을 통해 while
반복도 가능합니다.
current(): int
- 시간 초과까지 남은 시간(초)을 반환합니다. valid(): bool
- 스크립트를 안전하게 수행할 시간이 남은 경우 반환합니다. next(): void
- 예상치 못한 긴 반복에 적응하기 위해 완료된 반복 후에 호출해야 합니다.
자유롭게 문제를 열어주세요: https://github.com/Morjodrom/time-limiter/issues