首頁 >後端開發 >php教程 >php中關於microtime輸出重複問題

php中關於microtime輸出重複問題

WBOY
WBOY原創
2016-10-22 00:14:231056瀏覽

在我的方法中不同地方輸出 microtime() 結果顯示時間一樣 php中關於microtime輸出重複問題

伺服器資訊php中關於microtime輸出重複問題

回覆內容:

在我的方法中不同地方輸出 microtime() 結果顯示時間一樣 php中關於microtime輸出重複問題

伺服器資訊php中關於microtime輸出重複問題

microtime又不是unique,誰規定它不能輸出一樣的時間了?

註:PHP的microtime直接採用了系統中gettimeofday函數的結果進行輸出,沒有進過任何快取處理,如果結果一樣,這鍋PHP也不背。

PHP 5.3.28 中 microtime 的實作

<code>static void _php_gettimeofday(INTERNAL_FUNCTION_PARAMETERS, int mode)
{
    zend_bool get_as_float = 0;
    struct timeval tp = {0};

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &get_as_float) == FAILURE) {
        return;
    }

    if (gettimeofday(&tp, NULL)) {
        RETURN_FALSE;
    }

    if (get_as_float) {
        RETURN_DOUBLE((double)(tp.tv_sec + tp.tv_usec / MICRO_IN_SEC));
    }

    if (mode) {
        timelib_time_offset *offset;

        offset = timelib_get_time_zone_info(tp.tv_sec, get_timezone_info(TSRMLS_C));
                
        array_init(return_value);
        add_assoc_long(return_value, "sec", tp.tv_sec);
        add_assoc_long(return_value, "usec", tp.tv_usec);

        add_assoc_long(return_value, "minuteswest", -offset->offset / SEC_IN_MIN);
        add_assoc_long(return_value, "dsttime", offset->is_dst);

        timelib_time_offset_dtor(offset);
    } else {
        char ret[100];

        snprintf(ret, 100, "%.8F %ld", tp.tv_usec / MICRO_IN_SEC, tp.tv_sec);
        RETURN_STRING(ret, 1);
    }
}</code>

微秒本來就是這樣,記得老師講過關於php演算法精確的問題,它還是有誤差的,具體的還是請樓下大神解答吧

echo microtime();
sleep(1);
echo microtime();
?>

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn