Сборка intl под PHP 7 (Dotdeb) с актуальным ICU

· By NeoFusion

Изначально пакет php7.0-intl собран с ICU 52.1. Для использования c ICU 57.1 нам необходимо пересобрать его из исходников, чем мы сейчас и займемся.

Текущая конфигурация:

  • Debian 8.6 (jessie);
  • PHP 7 из репозитория Dotdeb.

Для сборки нам необходимы следующие установленные пакеты:

build-essential checkinstall git php7.0-dev

Сначала скачиваем и устанавливаем актуальный ICU:

wget http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.tgz
tar xf icu4c-57_1-src.tgz
cd icu/source/
./configure
make install

Обязательно учитываем установленную версию из репозитория и указываем ее при checkout. В нашем случае это 7.0.12.

Выкачиваем исходники PHP 7 от Dotdeb и собираем php7.0-intl как deb-пакет:

cd ~
git clone https://github.com/gplessis/dotdeb-php.git
cd dotdeb-php/
git checkout upstream/7.0.12
cd ext/intl/
phpize7.0
./configure --prefix=/usr --with-icu-dir=/usr/local
checkinstall make install

Отвечаем на вопросы checkinstall:

n
intl from source
3
7.0.12-by-root
12
php7.0-intl

В итоге получаются такие параметры:

0 -  Maintainer: [ root@debian ]
1 -  Summary: [ intl from source ]
2 -  Name:    [ intl ]
3 -  Version: [ 7.0.12-by-root ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ intl ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ intl ]
12 - Conflicts: [ php7.0-intl ]
13 - Replaces: [  ]

Созданный пакет будет установлен автоматически, если не возникло конфликтов. Иначе необходимо будет удалить конфликтующие пакеты и выполнить установку командой:

dpkg -i intl_7.0.12-by-root-1_amd64.deb

В папке /etc/php/7.0/mods-available создадим файл intl.ini со следующим содержимым:

; configuration for php intl module
; priority=20
extension=intl.so

Активируем новый модуль:

phpenmod intl
systemctl restart apache2.service

В выводе phpinfo() теперь отображается новая версия:

ICU version 57.1