Алгоритм генерации заголовка Etag на PHP аналогичный заголовку Apache 2
В Apache 2(с какой именно версии пока что не отвечу) был изменён формат заголовка Etag используемого для управления кешированием. Ранее этот заголовок состоял из 3-х частей, с некоторого времени формат быз изменён - теперь заголовок состоит из 2-х частей разделённых знаком тире. Методом проб и ошибок, а так же аналитикой результатов генерации заголовка Apache удалось установить, что в первой части заголовка содержится размер файла для которого вычисляется заголовок(кстати эта часть присутствовала и в предыдущей версии заголовка из 3-х частей и располагалась она в второй позиции, то есть после первого тире), а вторая часть дата модификации файла в формате unixtime, причём после секунд идут 6 знаков микросекунд, которые не отделяются от секунд каким либо знаком(в том числе точкой), то есть микросекунды идут сразу за секундами. Поскольку в PHP предположительно нет стандартной функции, которая бы возвращался время изменения файла с милисекундами, для получения этой информации используется обращение к /usr/bin/stat. В листинге ниже приведена функция для генерации значения значения заголовка Etag по адресу файла на сервере, аналогичного применяемому в Apache 2.