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 миль в час?
1 answers
Вы предполагаете неправильный тип данных. Страница руководства microtime
читает:
По умолчанию
microtime()
возвращает строку в виде "msec sec
" [...]
Таким образом, вы фактически вычитаете только значения мсек, поскольку обе строки преобразуются в числа до того, как произойдет фактическое вычитание.
Используйте microtime(true)
для получения значений с плавающей точкой:
Если get_as_float имеет значение TRUE, то
microtime()
возвращает значение с плавающей точкой [...]