2011-10-15 5 views
-1

일부 특정 초 동안 PHP 코드를 실행 구함과는 ... 내가 코드의 다른 부분을 실행하는 데 필요한를, 지정된 시간 내에 실행이 완료되지 않은 경우내가 5 초 동안 코드의 무리를 실행하고 싶었다

여부 있을 수있다?

예에 .. 은 A가에 통과해야 컨트롤을 실행하는 데 30 초 이상 걸리는 경우

기능 A를하는 동안

+1

PHP에서, 불가능합니다. 타이머 및 시스템 신호에 액세스 할 수있는 외부 제어 프로그램을 사용하여 실행할 수 있습니다. –

+0

아래 답변은 다른 가능한 방법으로 생각하게 만들었습니다. – Shan

답변

0

http://php.net/manual/en/features.connection-handling.php

설정 a를 시간 제한 및 상태가 2 (시간 초과)인지 확인하는 경우 종료 기능을 제공합니다. 한 가지주의해야 할 점은이 시간 제한은 실제 PHP 처리 시간 만 계산한다는 것입니다. 다른 프로세스 나 데이터베이스 또는 http 연결 등을 기다리는 PHP에 소요 된 시간은 계산되지 않으며 시간 제한에 도달하지 않을 것입니다.

실제로 경과 한 시간을 계산해야하는 경우 PHP 처리 시간이 아니더라도 위의 제안 된 답변을 따라 가야합니다. 수동으로 시간 체크를하는 것이 가장 좋습니다. 즉, 알고있는 내부 루프가 너무 오래 실행될 수도 있습니다. 모든 반복마다 실행되는 것이 아니라 N 회 반복마다 실행되는 경우도 있습니다.보다 일반적인 방법은 register_tick_function ()하지만, 틱 수가 낮을 때 눈에 띄는 성능 저하가 발생할 수 있으므로 등록을 취소하거나 적절한 플래그를 사용해야합니다. 따라서 제한 시간이 경과하면 타임 아웃 처리 코드가 계속해서 더 많이 호출되기 시작합니다. 그것이 일어났다.

다른 접근법도 가능합니다. pcntl_signal()을 사용하여 일부 신호에 대한 처리기를 등록하고 외부 프로그램에 의해 시간 제한에 도달하면 프로세스에 전송할 수 있습니다 (Linux의 경우 'man timeout'). 상자에서) 또는 자신의 PHP 스크립트 등 fork() - ed 인스턴스에 의해.

1

을 B로 A와 B 두 가지 기능이 있습니다 주기적 얼마나 스크립트를 확인할 수 있습니다 실행되고 있으며,이 x 초 동안 실행 B가는 경우 :

function checkTime($start) { 
    $current = time(); 
    $secondsToExecute = 5; 
    if (($start+$secondsToExecute) <= $current) { 
     func_b(); 
    } 

} 
function func_a($start) { 
    // do some code 
    checkTime($start); 
    // do some code 
    checkTime($start); 
    // do some code 
} 
function func_b() { 
    // do something else 
    exit(); 
} 

func_a(time()); 
+0

좋은 아이디어 :) 확실히 사용합니다. – Shan

관련 문제