[英]PHP microtime() accuracy (zeroes at the end)
我有兩個關於“精確時間”的“相似”問題。
1)正如PHP在線文檔中所建議的那樣,為了獲得以毫秒為單位的時間,我正在使用帶有microtime()函數的以下代碼(循環):
<?php
for ($i = 0; $i < 10; $i++) {
list($usec, $sec) = explode(' ', microtime()); //split the microtime on space
$usec = str_replace('0.', ' ', $usec); // remove the leading '0.' from usec
echo date('YmdHis', $sec) .' '. $usec ."<br>";
}
?>
我得到以下結果:
20140526135144 72254300
20140526135144 72255900
20140526135144 72256500
20140526135144 72257100
20140526135144 72257600
20140526135144 72258100
20140526135144 72258600
20140526135144 72259100
20140526135144 72259600
20140526135144 72260100
就我而言,Micro表示1/100000。 那么為什么微時間為“微”部分返回8個整數,而最后兩個始終為零? 或者我應該玩彩票,因為我很高興:)?
2)例如,微時間有時用於生成單數。 但是當我跑步時:
for ($i = 0; $i < 10; $i++) {
echo microtime()."<br>";
}
我越來越:
0.21820300 1401105400
0.21821000 1401105400
0.21821100 1401105400
0.21821200 1401105400
0.21821300 1401105400
0.21821300 1401105400 // - the same as precursor
0.21821400 1401105400
0.21821500 1401105400
0.21821500 1401105400 // - the same as precursor
0.21821600 1401105400
那怎么可能? 我的電腦不如較新的電腦快。 這很危險嗎? 順便說一句,我正在使用其他“ br”輸出,這會使代碼運行得更慢:P。
更新根據評論,這是microdate(true)。
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
1401106486.9772
援引希臘人佐爾巴的話:完全癱瘓!
這里有兩個問題:腳本執行速度非常快,而“ echo”僅輸出前幾個小數點。 該腳本給出了更合理的結果:
for ($i = 0; $i < 10; $i++) {
echo number_format(microtime(true), 10, '.', '') . "\n";
usleep(1000);
}
它輸出:
1401108499.0024349689
1401108499.0038080215
1401108499.0050148964
1401108499.0061480999
1401108499.0073280334
1401108499.0085520744
1401108499.0096609592
1401108499.0108559132
1401108499.0119121075
1401108499.0130879879
我認為您應該參考這個問題的答案microtime(true)的DECIMAL長度? 。
基本上,微時間會進行系統調用,因此與系統相關,其精度受硬件限制。
至於安全性問題,您不應使用microtime作為唯一ID。 看一下http://www.php.net/manual/en/function.uniqid.php,並嘗試將其與more_entropy標志一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.