7

不是真的,但我遇到了一个问题,在运行这个脚本时,我的时间是一个负数。这是脚本中发生的部分:

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 年的 DeLorean DMC-12,时速为 88 英里/小时吗?

4

1 回答 1

14

您假设错误的数据类型。手册页microtime内容如下:

默认情况下,返回格式为 " " [...]microtime()的字符串msec sec

所以你实际上只减去毫秒值,因为在实际减法发生之前,两个字符串都转换为数字。

用于microtime(true)获取浮点值:

如果get_as_float设置为 TRUE,则microtime()返回一个浮点数 […]

于 2011-07-14T17:19:26.347 回答