На компьютере под 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, но всё таки, может кто-то с таким сталкивался.