Обновление базы данных Olson tz изначально реализовано в PHP

Я работаю над сайтом, который сильно использует часовые пояса, которые должны быть на краю абсолютной последней доступной информации tz (которую я уже получил через список рассылки tz ). Я не знаю, как заставить установки PHP, установленные на моей машине разработки, и мой веб-хост использовать более современные данные tz вместо старых данных, уже находящихся на них. Это не так просто, как просто обновление PHP, поскольку даже новейшие версии PHP не обязательно будут иметь абсолютные последние данные tz в любой момент времени.

Было указано, что пакет timezonedb в pecl доставит меня к последнему официальному выпуску пакета, но что, если мне нужно пойти немного дальше, чтобы добраться до этого «кровоточащего края» обновлений, которые, возможно, еще не были официально выпущены ? Я уверен, что новые tz-данные должны быть скомпилированы с помощью zic (распределены в tzcode) и результирующими двоичными данными, заданными для pecl . Я действительно не знаю всего, что это влечет за собой, так что понимание / ссылки для отдельных шагов будет оценено по достоинству.

Как можно обновить эту базу данных Олсона, которая изначально используется экземплярами PHP на (1) машине разработки XAMPP и / или (2) типичной услуге общего хостинга … при переходе через как можно меньше обручей и административных препятствий? Есть ли какие-либо сведения, которые могут быть более сложными, чем обмениваться хостинговой средой? Возможно ли иметь несколько копий представленных данных, чтобы изменения можно было легко отменить, если они каким-то образом их завинчивают?

Поскольку изменения иногда официально не выпускаются вовремя, чтобы они вступили в силу, я ищу конкретный способ сделать эти изменения произвольно самостоятельно. Я также заинтересован в изучении потенциальных компромиссов по целому ряду возможных решений от «быстрого / легкого» до «строгого / лучшего».

Окончательный ответ

Приведенные выше комментарии дают гораздо лучший ответ, чем это – посмотрите на пакет PECL timezonedb .

Я преобразовал это в Community Wiki.


Расследование

Распределенный источник из пакета, такого как php-5.3.8.tar.bz2 содержит перевод базы данных Olson в каталог ext/date/lib и файлы timezonedb.h , timezonemap.h , fallbackmap.h . Это означает, что в системе разработки PHP есть код, который генерирует эту информацию из выпуска базы данных Olson, но по умолчанию она не распространяется. Кроме того, он не является само собой разумеющимся распределенным как часть SVN; Я извлек источник PHP 5.3 из версии 321876, а каталог ext/date ничего не помог (только сгенерированные файлы).

Таким образом, может быть уместно спросить разработчиков PHP, как это сделать; это, безусловно, должно быть возможным, и оно должно быть автоматизировано (было бы глупо, если бы они не были автоматизированы). Но мне непонятно, что те, кто находится за пределами поддерживающих PHP, могут сказать, как это сделать.

Комментарии в файле NEWS указывают, что Derick Rethans может быть хорошим человеком, с которым можно связаться – он обновил базу данных до Olson 2010c (2010.3). Вы можете найти свой адрес электронной почты на PHP в файле run-tests.php на верхнем уровне исходного каталога; вы можете найти альтернативный адрес электронной почты в источнике в каталоге ext/date/lib .

Derick Rethans предоставил набор инструментов для преобразования, используемый для создания файла timezonedb.h из базы данных Olson:

http://svn.xdebug.org/cgi-bin/viewvc.cgi/timelib/trunk/zones/?root=php

По состоянию на 2016-12-09, ссылка выше 404, и WayBack Machine в Internet Archive не может помочь, потому что не удалось выполнить поиск в файле robots.txt .

Тем не менее, поиск Google для «php timelib» находит:

что почти наверняка является заменой.