PHP-скрипт... возвращается в прошлое?


На самом деле нет, но я сталкиваюсь с проблемой, когда один раз в голубую луну во время выполнения этого сценария мое время приводит к отрицательному числу. вот часть сценария, в которой это происходит:

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() ненадежным?

Может ли кто-нибудь одолжить мне DeLorean DMC-12 1981 года со скоростью 88 миль в час?

Author: grep, 2011-07-14

1 answers

Вы предполагаете неправильный тип данных. Страница руководства microtime читает:

По умолчанию microtime() возвращает строку в виде "msec sec" [...]

Таким образом, вы фактически вычитаете только значения мсек, поскольку обе строки преобразуются в числа до того, как произойдет фактическое вычитание.

Используйте microtime(true) для получения значений с плавающей точкой:

Если get_as_float имеет значение TRUE, то microtime() возвращает значение с плавающей точкой [...]

 14
Author: Gumbo, 2011-07-14 17:25:49