2013-06-28 3 views
2

Так я измеряю время выполнения, как это:PHP время выполнения измерения точности

$time = -microtime(true); 
... 
$time += microtime(true); 

PHP версия 5.3.26RC1 x86 работает на Win x64 машине Server 2008. «Точный» параметр ini равен 16. Однако каждый раз, когда время выполнения меньше 0,001, оно просто возвращает ноль (очевидно, скрипт не может быть выполнен мгновенно!). Что еще более странно, мой тестовый компьютер (стандартный php.ini-development) возвращает ненулевые значения, даже если между этими двумя утверждениями нет кода ... Что может быть неправильным?

Upd: Простой тест:

<?php 
ini_set('precision',16); 
echo php_uname() . PHP_EOL; 
echo phpversion() . PHP_EOL; 
echo ini_get('precision').PHP_EOL; 

$time = -microtime(true); 
$time += microtime(true); 
echo number_format($time, 10) .PHP_EOL; 
?> 

выход испытания машины:

Windows NT XXX 6.1 build 7601 (Windows 7 Ultimate Edition Service Pack 1) i586 
5.4.12 
16 
0.0000028610 

Объем производства машина:

Windows NT XXX 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 
5.3.26RC1 
16 
0.0000000000 
+5

Вы просите слишком много (особенно на Windows) ... Вы действительно не должны ожидать, точность ниже 0,001 секунд, особенно на языке сценариев. – rid

+1

Можете ли вы показать код, отображающий время? Когда я пытаюсь «microtime (true)» с кодом так же, как у вас, он показывает 13 десятичных знаков (настройки PHP по умолчанию, в Windows). Вы уверены, что не форматируете свой результат? – newfurniturey

+0

Как вы печатаете значение? – sectus

ответ

5

Ваша платформа, Windows не может различать такие небольшие времена , со стандартными вызовами времени.

Комментарий от источника PHP кода:

«на окнах, time_sleep_until имеет миллисекунды точности при микропоры() с точностью до 10 секунды»

ext/standard/tests/misc/time_sleep_until_basic.phpt.)