2010-01-02 5 views
0

У меня есть сценарий, который работает в ', а'. Мне нужно определить, как долго работает скрипт, и если он превышает 10 секунд, прекратите его. Код, который я написал, возвращает странные десятичные значения (на одну секунду это может быть «5.342 ...», а другое может быть «903.322 ...»). Может ли кто-нибудь сказать мне, как я могу это достичь?Узнайте, как долго работает скрипт в секундах?

$timer = microtime(false); 
while(/*...*/) 
{ 
    $currTime = microtime(false); 
    $timeDiff = $currTime - $timer; 
    $timeDiff *= 1000; 

    if ($timeDiff > 10) 
    { 
     //... 
    } 
} 

ответ

2

Вы отслеживаете микросекунды. Если вы хотите увидеть только секунды, округлите его
, используя round() или ceil().

Вы также можете рассмотреть set_time_limit(), который определяет продолжительность выполнения сценария.

set_time_limit(10); // allow ten seconds for this script to finish 

Вы можете использовать register_shutdown_function() для обработки любой очистки, которая необходима, если сценарий не закончил вовремя.

+0

Не умножая его 1000 это? –

+0

Нет, умножение на 1000 не обязательно гарантирует результат без дробления: '3.29381 * 1000 = 3293.81' – Sampson

+0

Все дело в том, что я не должен допускать, чтобы эта вещь вызывала ошибку. Поэтому я должен убедиться, что сценарий заканчивается, если он достигает 10 секунд. –

1
$timeDiff /= 1000; 

1000 микросекунд является второй, а не наоборот

1

Я считаю, что аргумент должен быть истинным, см http://php.net/manual/en/function.microtime.php

Try:

$timer = microtime(true); 
while(true) 
{ 
    $currTime = microtime(true); 
    $timeDiff = $currTime - $timer; 

    if ($timeDiff > 10) 
    { 
     die(); 
    } 
} 
+0

Это будет неточно до миллисекунды, хотя - только +/- секунду. – asgerhallas