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 миль/ч?


person grep    schedule 14.07.2011    source источник
comment
возможный дубликат профилирования PHP с помощью microtime(): отрицательное время?   -  person lonesomeday    schedule 14.07.2011


Ответы (1)


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

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

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

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

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

person Gumbo    schedule 14.07.2011
comment
Одно из тех замечательных дизайнерских решений в PHP, которые действительно делают язык таким приятным в использовании. - person Marc B; 14.07.2011