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

ご想像のとおり..最初から2回目を差し引いて、プロセスにかかった時間を大まかに見積もっても問題はないはずです..しかし..十分な回数実行すると、結果が次のように出力されることがあります。

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()信頼できないですか?

88 mp/h が可能な 1981 年のデロリアン DMC-12 を誰か貸してくれませんか?

4

1 に答える 1

14

間違ったデータ型を想定しています。読み取りのマニュアルページ:microtime

デフォルトでは、" "[…]microtime()の形式で文字列を返しますmsec sec

したがって、実際の減算が行われる前に両方の文字列が数値に変換されるため、実際にはmsec値のみを減算しています。

microtime(true)float値を取得するために使用します。

get_as_floatがTRUEに設定されている場合、floatを返しmicrotime()ます[…]

于 2011-07-14T17:19:26.347 に答える