簡體   English   中英

PHP microtime()精度(結尾為零)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM