Задача
Необходимо измерять время с более чем секундной точностью, например для того, чтобы сгенерировать уникальный идентификатор.
Решение
Это можно сделать при помощи функции microtime():
list($microseconds,$seconds) = explode(' ',microtime());
Обсуждение
Функция microtime() возвращает строку, содержащую дробную часть времени, прошедшего с начала эпохи, с точностью до микросекунды. Например, возвращенное значение 0.41644100 1026683258 означает, что с начала эпохи прошло 1026683258,41644100 секунд. Вместо числа с двойной точностью возвращается строка, поскольку число с двойной точностью не настолько велико, чтобы хранить полное значение с микросекундной точностью. Значение времени, содержащее миросекунды, удобно для генерирования = уникальных идентификаторов. Объединение его с идентификатором текущего процесса гарантирует получение уникального значения, поскольку процесс не может генерировать более одного идентификатора за одну микросекунду:
list($microseconds,$seconds) = explode(' ',microtime());
$id = $seconds.$microseconds.getmypid();
Однако этот метод не так надежен в многопотоковых системах, где существует небольшая (но отличная от нуля) вероятность, что два потока одного процесса одновременно вызовут функцию microtime().