2013-07-25 2 views
3

질문은 간단합니다. 사이트 방문자에게 맞춤화 된 콘텐츠를 제공하기 위해 데이터베이스를 점검하고 장애 조치를 수행하고이 함수가 800ms 이상 실행될 경우 일반 페이지를 제공하고 싶습니다. (서버 응답의 목표 시간은 1000ms입니다.)php set_time_limit 1 초 미만

나는 set_time_limit 함수를 보았지만 인수로 초 단위의 정수를 사용합니다.

내 질문 : 1 초 미만의 값으로 사용할 수있는 유사한 기능이 있습니까? 존재하지 않는

void set_time_limit_ms (int $milliseconds) 

set_time_limit_ms (800) 
+0

문제가 오래 실행되는 데이터베이스 쿼리입니까? http://stackoverflow.com/questions/4794747/mysql-can-i-limit-the-maximum-time-allowed-for-a-query-to-run – bitWorking

+0

가능성 있음, 나도 살펴볼 것입니다. 일부 처리 시간을 차지하거나 R과 같은 다른 언어로 스크립트를 호출하는 PHP의 수학적 비교를 수행합니다. 기본적으로 함수가 시작될 때 시계를 시작하고 800ms에서 종료합니다. 함수에서 (처음에는 속도를 최적화하기 위해 많은 실험을하고 싶습니다.) 쿼리를 죽이고 800ms에 일반 페이지를 제공한다는 것을 알고 있습니다. 관심을 가져 주셔서 감사합니다. –

답변

3

:

내가 좋아하는 뭔가를 찾고 있어요. 당신은 방금 진드기 함수로 그것을 에뮬레이션 할 수 있습니다 :

declare(ticks=1); // or more if 1 takes too much time 
$start = microtime(1); 
register_tick_function(function() use ($start) { 
    (microtime(1) - $start < 0.8) or die(); 
}); 
+0

하지만 장기 실행 쿼리에 대한 해결책이 아닙니다!? – bitWorking

+0

또한 set_time_limit()로 장기 실행 쿼리를 인터럽트 할 수 없습니다. 장기 실행 쿼리에서 시간 제한을 초과하면 쿼리 실행 후 프로그램이 중단됩니다. 장기 실행 쿼리에 대해서는 PHP 측에서 아무 것도 할 수 없습니다. (그리고 내가 틀렸어도, mysql 쪽에서) – bwoebi

+0

안녕 bwoebi, 입력 주셔서 감사합니다. 코드를 작성하여 주말에 테스트 해 보겠습니다. 결과를 게시 할 것입니다. –

0

예, 나는 종종 마이크로 시간을 사용합니다. 당신은 더 이상 당신이 예상보다 실행하는 쿼리를 방지하기 위해이 기능을 사용할 수 없습니다

http://php.net/manual/en/function.microtime.php

<?php 
$time_start = microtime(true); 

// Sleep for a while 
usleep(100); 

$time_end = microtime(true); 
$time = $time_end - $time_start; 

echo "Did nothing in $time seconds\n"; 
?> 
+1

이 질문은 실제로 대답하지 못했습니다 :''프로그램이 몇 밀리 초 후에 멈출 수 있습니까? '''내 프로그램에서 몇 밀리 초가 걸렸습니까?' – bwoebi

1

참조하십시오. 이것은 실제 스크립트 실행 시간 만 측정합니다. 다음은 설명서의 내용입니다.

set_time_limit() 함수와 설정 지시어 max_execution_time이라는에만 스크립트 자신의 실행 시간에 영향을줍니다. 스크립트가 실행 중일 때 최대 시간을 결정할 때 system(), 스트림 작업, 데이터베이스 쿼리 등을 사용하는 시스템 호출과 같은 스크립트의 실행 실행 외부에서 발생하는 모든 시간은 포함되지 않습니다. 측정 된 시간이 실제 인 Windows 에서는 그렇지 않습니다.

+0

안녕 DevZer0, 구체적으로 질문에 대답해라, 내가 생각하지 않고 고려해야 할 정말로 환영받는 포인터. 고마워요 !! –

관련 문제