PHP의 특정 섹션을 X 초로 제한하고 싶습니다. 현재 실행중인 코드 (전체 스크립트가 아닌 섹션 만)를 죽이십시오. 대체 코드를 실행하십시오.PHP - 너무 오래 걸리는 코드를 멈추고 잡으십시오.
의사 코드 예제 (예제는 여기에 케이스를 사용 때로는 빠르고 불안정 API 및 다른 배를 블랙홀이다) :
$completed = 1;
$seconds = 60;
while ($completed != -1 && $completed < 5) {
limit ($seconds) {
$api = new SomeAPI('user','secret','key');
$data = $api->getStuff('user="bob"');
$completed = -1;
} catch() {
$completed++;
sleep(10);
}
}
if ($completed === 5) echo "Error: API black-hole'd 5 times.\n";
else {
//Notice: data processing is OUTSIDE of the time limit
foreach ($data as $row) {
echo $row['name'].': '.$row['message']."\n";
}
}
그러나,이 아무것도을 위해 일해야한다는. API/HTTP 요청 뿐만이 아닙니다. 예 : 집중적 인 데이터베이스 절차 경우
당신은 너무 빨리 읽는 : 나는 어떻게 그에 틀렸다하지 않는 한 그들이합니다 (전체 스크립트에 대한 시간 제한보다는 섹션에 영향을 미치지으로set_time_limit
및 max_execution_time
이 하지 답이다 물론,).
API가 cURL을 사용하는 경우 [timeout 매개 변수] (http://stackoverflow.com/questions/2582057/setting-curls-timeout-in-php)를 참조하십시오. – moonwave99
'max_execution_time'이 이미 ∞로 설정되어 있다고 가정합니다. –
어쩌면 시도 할 무언가 (컬을 사용하지 않는 경우)는 gearman과 같은 비동기 처리 시스템을 사용하게됩니다. 따라서 처리 중에도 중단 될 수 있습니다. http://stackoverflow.com/questions/2270323/멈추는 기어 맨 - 정중하게 – ChrisK