2011-07-14 32 views
7

不是真的,但我遇到了一個問題,即在運行此腳本時,一旦發生藍色月亮,我的時間會產生負數。這裏是腳本的一部分在那裏發生的事情:PHP腳本回溯到時間?

public function execute() 
{ 
    $time1 = microtime(); 
    foreach($this->tables as $table) 
    { 
     if($this->buildQuery($table)) 
     { 
      if($this->submitQuery($table)) 
      { 
       $time2 = microtime() - $time1; 
       echo "Sync Successful({$time2}s).. $table <br /> \n"; 
       //log 
      } 
     } 
     else echo "No data to sync in $table"; 
    }  
} 

正如你會懷疑..應該有什麼不對從第一減去第二次獲得的過程花了多長時間的粗略估算值。然而..如果我運行它足夠的時間,有時結果會打印出以下:

Sync Successful(0.062936s).. users 
Sync Successful(-0.86901s).. profile 
Sync Successful(-0.798774s).. groups 
Sync Successful(-0.718851s).. phonebook 
Sync Successful(-0.711768s).. products 
No data to sync in locations 

這是非常罕見的,但是這是我的最後結果的準確輸出。所以我的問題是:

這怎麼可能?導致'負',當這應該顯然不應該發生..

我該怎麼做才能避免這種情況?有沒有更好的方法來解決這個問題? microtime()不可靠嗎?

有人可以借我1981年德羅寧DMC-12能夠88 mp/h嗎?

+3

[用microtime中PHP分析()的可能重複:負面時間?](http://stackoverflow.com/questions/2607150/php-profiling-with-microtime-negative-time) – lonesomeday

+0

哇,這是沉重的文檔。 –

回答

14

你假設錯誤的數據類型。該manual page of microtime寫着:

默認情況下,microtime()返回其形式爲「msec sec」的字符串[...]

所以你實際上是之前的實際減去只有毫秒值都strings are converted to numbers減法發生。

使用microtime(true)獲得浮點值:

如果get_as_float設置爲TRUE,則microtime()返回float [...]

+12

PHP中那些精彩的設計決策之一,確實使語言如此令人愉快地使用。 –