欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php中关于microtime输出重复问题

程序员文章站 2022-05-06 08:36:55
...

在我的方法中不同地方输出 microtime() 结果显示时间一样 php中关于microtime输出重复问题

服务器信息php中关于microtime输出重复问题

回复内容:

在我的方法中不同地方输出 microtime() 结果显示时间一样 php中关于microtime输出重复问题

服务器信息php中关于microtime输出重复问题

microtime又不是unique,谁规定它不能输出一样的时间了?

注:PHP的microtime直接采用了系统中gettimeofday函数的结果进行输出,没有进过任何缓存处理,如果结果一样,这锅PHP也不背。

PHP 5.3.28 中 microtime 的实现

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);
    }
}

微秒本来就是这样,记得老师讲过关于php算法精确的问题,它还是有误差的,具体的还是请楼下大神解答吧

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

相关标签: php