Обновление базы данных Olson tz, изначально реализованной на PHP - PullRequest
4 голосов
/ 07 января 2012

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

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

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

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

1 Ответ

3 голосов
/ 07 января 2012

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

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

Я преобразовал это в сообщество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 указывают, что Дерик Ретанс может быть хорошим человеком для связи - он обновил базу данных до Олсона2010c (2010.3).Вы можете найти его адрес электронной почты на PHP в файле run-tests.php на верхнем уровне исходного каталога;Вы можете найти альтернативный адрес электронной почты в источнике в каталоге ext/date/lib.

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

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

По состоянию на 2016-12-09, ссылка выше 404, и WayBack Machine в Интернет-архиве можетне помогло, потому что поиск по файлу robots.txt не был разрешен.

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

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

...