Показать сообщение отдельно
Старый 21.07.2011, 07:00   #1
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Странное поведение microtime

На компьютере под Windows XP установлен PHP 5.2.17.17
Замечаю странное поведение функции microtime(). Ставил в коде метки для быстрого тестирования скорости выполнения MySQL запросов:
$time=microtime(true); 
// тут код запроса, но это по сути не важно, проблема в другом 
echo round(microtime(true)-$time,5);
К моему удивлению этот код считает время как ему вздумается и часто выдаёт даже отрицательные результаты. Всегда пользовался данным методом, проблем никогда не было ни на одном сервере, ни на денвере на ноутбуке (там стоит более старая версия php). Решил разобраться в чём дело, запустил многократно в консоли такой код:
      $a=time(); 
      // $a вычитается для того, чтобы убрать целую часть и видеть больше чисел после запятой 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n"; 
      usleep(10); 
      echo (microtime(true)-$a)."\r\n";
По какой-то, неведомой мне причине, числа часто идут не в порядке возрастания, а как попало. Например число в середине списка может оказаться меньше предыдущего, а последующие опять в порядке возрастания. Или может выдать подряд штук по 5 одинаковых чисел, вплоть до миллионных долей.

Гугл в решении проблемы не помогает, так как в основном находит проблему, когда горе программисты используют функцию microtime без параметра.

Вместе с PHP тут установлен ZEND оптимизатор, не знаю имеет ли это значение, раньше никогда с ним не связывался.

Откуда PHP берёт значение microtime? У операционной системы ведь? Может XP глючит? Какие есть теории? может кто-то сталкивался с подобной проблемой.

UPD:
Всё сильнее кошу на проказы операционной системы. Запустил скрипт в консоли через интерпретатор Денвера (того, что стоит на ноутбуке и работает без нареканий), но на данном компьютере. Проблема имеет место быть. Видимо, это вопрос уже не по PHP, но всё таки, может кто-то с таким сталкивался.
(Offline)
 
Ответить с цитированием