Обновление ICU на CentOS/Red Hat/Fedora

yii2 formatter icu

Столкнулся с проблемой, при выводе времени, yii\i18n\Formatter формирует для зоны 'Europe/Moscow' время, соответствующее GMT+4:

выводил :

В конфиге приложения временная зона указана явно: 'timeZone' => 'Asia/Omsk'.

Выяснилось, что все дело в устаревшей, двухлетней давности библиотеке ICU версии 52.1. Версия PHP актуальная, на данный момент: 5.6.13.

Узнать установленные версии PHP и ICU можно при помощи простого скрипта:

За отсутствием в репозиториях свежей версии ICU, знающей обо всех последних манипуляциях с часовыми поясами и летним/зимним временем, пришлось собрать из исходников ICU 55.1 и установить свежее pecl расширение intl.

Плацдарм: Fedora 21 x64 Server.

Подготовка

Первым делом удалим php-intl и установим нужные инструменты

Скачиваем и распаковываем исходники ICU

Сборка и установка

Собираем и устанавливаем ICU в указанный путь

Устанавливаем расширение intl

На запрос Specify where ICU libraries and headers can be found [DEFAULT] :, укажем путь к новому ICU: /opt/icu5c.

После успешного завершения установки, обращаем внимание на рекомендацию подключения нового расширения:

You should add "extension=intl.so" to php.ini

Добавляем строку extension=intl.so  в файл /etc/php.ini  и перезапускаем веб-сервер: systemctl restart httpd.

Проверяем результат

Проверяем установленные версии PHP и ICU

Проверяем формирование даты компонентом yii2 formatter

В итоге мы получили свежую версию библиотеки ICU и адекватную работу крутого php-фреймворка Yii 2.0.

3 thoughts on “Обновление ICU на CentOS/Red Hat/Fedora

    1. nix Автор записи

      Примерно так же и будет. Нет убунты под рукой для проверки.
      cd source &&
      ./configure --prefix=/usr &&
      make &&
      make install

      или что-то не собирается?

  1. Djack

    Подскажите, на CentOS 7, после команды
    pecl install intl
    получаю ошибку:

    running: make
    /bin/sh /var/tmp/pear-build-rootc2tZHu/intl-3.0.0/libtool —mode=compile cc -I/opt/icu5c/include -Wno-write-strings -I. -I/var/tmp/intl -DPHP_ATOM_INC -I/var/tmp/pear-build-rootc2tZHu/intl-3.0.0/include -I/var/tmp/pear-build-rootc2tZHu/intl-3.0.0/main -I/var/tmp/intl -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/opt/icu5c/include -DHAVE_CONFIG_H -g -O2 -c /var/tmp/intl/php_intl.c -o php_intl.lo
    libtool: compile: cc -I/opt/icu5c/include -Wno-write-strings -I. -I/var/tmp/intl -DPHP_ATOM_INC -I/var/tmp/pear-build-rootc2tZHu/intl-3.0.0/include -I/var/tmp/pear-build-rootc2tZHu/intl-3.0.0/main -I/var/tmp/intl -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/opt/icu5c/include -DHAVE_CONFIG_H -g -O2 -c /var/tmp/intl/php_intl.c -fPIC -DPIC -o .libs/php_intl.o
    In file included from /var/tmp/intl/php_intl.h:34:0,
    from /var/tmp/intl/php_intl.c:25:
    /var/tmp/intl/intl_error.h:24:40: fatal error: ext/standard/php_smart_str.h: No such file or directory
    #include
    ^
    compilation terminated.
    make: *** [php_intl.lo] Error 1
    ERROR: `make’ failed

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *