2013-06-16 4 views
2

Итак, я создал файл microtime.php и протестировал его на своем Windows Server 2008 R2 64x Enterprises запуске nginx выделенного сервера.Microtime всегда возвращает одни и те же значения несколько?

<?php 
for ($i = 0; $i <= 5; $i++) { 
echo time() . '<br />'; 
echo microtime() . '<br />'; 
echo '<br />'; 
} 
?> 

и я получаю это:

1371343916 
0.52320400 1371343916 

1371343916 
0.52320400 1371343916 

1371343916 
0.52320400 1371343916 

1371343916 
0.52320400 1371343916 

1371343916 
0.52320400 1371343916 

1371343916 
0.52320400 1371343916 

Почему результаты совпадают и как исправить это?

Вместо этого я должен получить что-то вроде этого:

1371345446 
0.61877300 1371345446 

1371345446 
0.61878200 1371345446 

1371345446 
0.61878500 1371345446 

1371345446 
0.61878700 1371345446 

1371345446 
0.61878900 1371345446 

1371345446 
0.61879100 1371345446 

С наилучшими пожеланиями.

+0

вы получите то же самое ... bt, что вы хотите сделать точно? –

+0

Почему я должен получить то же самое? Проверьте главный пост. Я отредактировал его. Как вы можете видеть, 0.618xxxx должны отличаться. Но на моей системе все равно. –

+0

Что вы получаете за 'microtime (true)'? –

ответ

0

На Mac OSX Lion, Когда я запускаю свой код, я получаю:

1371583001 
0.01606600 1371583001 

1371583001 
0.01609400 1371583001 

1371583001 
0.01610400 1371583001 

1371583001 
0.01611200 1371583001 

1371583001 
0.01612100 1371583001 

1371583001 
0.01612900 1371583001 

Так это выглядит, как вам нужно работать больше итераций, чтобы получить результаты, чтобы изменить в Windows.

+0

Я получаю те же результаты на Debian 6 и windows 7 running wamp – exussum

1

Короткий ответ: повторение значения в микротрейле имеет отношение к частоте обновления микросети. Вы запрашиваете значение много раз между каждым обновлением. Связанные вопросы были заданы раньше. How precise is the internal clock of a modern PC? было полезно для меня понять, почему это так. Кроме того, найдите «HPET» и «таймеры точности».

Лучшая точность: вы можете получить более точную информацию, взорвав микросферу в микросекундах и секундах и умножив каждый на 10^8 (скажем), а затем добавив их снова. Преобразуя это в строку и эхо, вы увидите больше цифр справа от десятичной секунды. Кроме того: я называю это правильным к восьмисекундам, потому что интересно, для этого нет ни одного английского слова.

Вот код, чтобы доказать точку:

echo 'MICROTIME: '.microtime()." "; 
    list($microseconds,$seconds) = explode(' ',microtime()); 
    $precisedatetimestamp = number_format((($seconds * 100000000) + ($microseconds * 100000000)),"0","",""); 
    settype($precisedatetimestamp,'string'); 
    echo ' ..RETURNED : '.number_format($precisedatetimestamp,0,"","").'<br />'; 

Loop через что несколько тысяч раз и увидеть результат. Даже с такой степенью точности вы не собираетесь предотвращать повторение, это будет означать меньше дубликатов. Процессоры работают быстро (и становятся быстрее) и могут выполнять очень много инструкций в секунду. Это зависит от вашего требуемого уровня точности для вашей цели. Он может быть только таким же правильным, как частота обновления внутренних часов.