網頁

2015年4月17日

[php] 使用microtime()計算執行時間變成負數的原因

首先了解一下microtime()及microtime(true)的差別。


當有下true參數時:
echo microtime(true);

//輸出結果:
1429260694.1102


而沒有下參數時:
echo microtime();

//輸出結果:
0.95640100 1429260781


兩個的差別在於有加true參數時,會直接輸出浮點數,另外一個則是輸出「微秒 秒」兩組數字,需注意的是,microtime(bool get_as_float)參數,是在PHP 5.0以後的版本才填加,所以PHP 5.0之前的版本,不管有沒有加參數,都是以沒有下參數的「微秒 秒」格式輸出。

所以輸出的格式若是「微秒 秒」時,拿來計算執行時間,時間就會變成負數,所以官方有提供計算時間的範例,個人也建議使用此方式,好處在於不用注意PHP版本問題。
 
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);

 或

    return array_sum(explode(" ", microtime()));
}

$time_start = microtime_float();

// Sleep for a while
usleep(100);

$time_end = microtime_float();
$time = $time_end - $time_start;

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