Как обновить timezonedb в PHP (обновление информации о часовых поясах)?
phpinfo() показывает, что наша система использует базу данных часовых поясов Олсона, версия 2010.3. Я думаю, что это уже устарело, но не могу найти авторитетное место, которое может это подтвердить.
(а) Могу ли я обновить информацию о часовых поясах для PHP в целом? (б) Если да, то как мне это обновить? Я видел инструкции по адресу http://www.electrictoolbox.com/correct-php-timezone/ где говорится, что после установки соответствующего модуля необходимо:
You should add "extension=timezonedb.so" to php.ini
Нужно ли это делать? Разве PHP не должен автоматически использовать правильный файл?
4 ответа
Насколько я знаю, БД Timezone (TDB) распространяется внутри самого PHP. Из-за этого через некоторое время БД часового пояса устареет, и вам следует либо обновить PHP, либо TDB, чтобы отразить изменения в TDB.
Существует расширение PECL, которое выпускает новые пакеты TDB, которые вы можете загрузить, установить и использовать в своих старых установках PHP.
Я не знаю, есть ли способ обновить TDB напрямую в PHP. Расширение PECL было создано для решения этой проблемы.
Расширение PECL - это буквально DB часовых поясов. Каждый раз, когда отсюда выходит новая версия БД, расширение перекомпилируется с обновленной БД часового пояса.
Таким образом, вы фактически перезапишите старое расширение заново перекомпилированной версией и перезапустите свой веб-сервер; предполагая, что PHP используется в качестве модуля.
Лучше просто обновить версию PHP (особенно, если вы хотите обновить ее на компьютере с Windows, в противном случае вам нужно скомпилировать расширение самостоятельно), потому что, насколько я помню, расширение не только для Windows-Ready unix/ Linux - так что если вы хотите сделать это в Windows, вам придется скомпилировать его самостоятельно, используя компилятор VC6 или VC9).
Итак, если вы можете обновить свою версию PHP, которая будет самым быстрым решением (это было по крайней мере для меня), конечно, PHP может не иметь последней информации о базе данных о часовом поясе, но мне пришлось решить проблему с базой данных о часовом поясе, и это было исправлено в более поздняя версия PHP, которая у меня была. Если вы делаете это для Unix / Linux, вы также можете попробовать расширение PECL, я думаю, что тогда вам будет проще и быстрее.
Чтобы выполнить полное обновление часового пояса (у нас были проблемы с неверным часовым поясом Россия / Москва):
#for OS - CentOS and MySQL
yum update tzdata
mysql_tzinfo_to_sql /usr/share/zoneinfo
#for PHP
pecl upgrade timezonedb
pecl upgrade intl
#dependencies you may need for the above:
yum install gcc
yum install gcc-c++
yum install libicu-devel