После обновления PHP-версии с 7.0 до 7.2, mcrypt-раcширение отсутствует в пакетах и может
быть установлено через pecl
PECL (англ. PHP Extension Community Library) — это репозиторий модулей для PHP, написанных на C, доступных через систему пакетов PEAR. PECL был создан, когда возникла проблема удаления некоторых модулей из стандартной поставки PHP.
1. Установка зависимостей для корректной работы pecl
1 |
# apt-get install gcc make autoconf libc-dev pkg-config php-pear libmcrypt-dev |
2.Обновление базы pecl
1 |
# pecl channel-update pecl.php.net |
1 2 |
Updating channel "pecl.php.net" Update of Channel "pecl.php.net" succeeded |
3.Установка пакета php7.2-dev
Обязательно установить пакет php7.2-dev, юлагодаря которому появляется бинарник
1 |
/usr/bin/php-config7.2 |
1 |
# apt-get install php7.2-dev |
1 |
# ls -al /usr/bin/php* | grep 7.2 |
1 2 |
-rwxr-xr-x 1 root root 4222 Jul 9 18:39 /usr/bin/php-config7.2 -rwxr-xr-x 1 root root 4674 Jul 9 18:39 /usr/bin/phpize7.2 |
Благодаря появлению файлов
1 2 |
/usr/bin/php-config7.2 /usr/bin/phpize7.2 |
Pecl при компиляции модуля mcrypt будет использовать корректную версию PHP Api
В нашем случае будет использоваться
1 |
PHP Api Version: 20170718 , которая поставляется с 7.2 |
вместо
1 |
PHP Api Version: 20151012, которая поставляется с 7.0 |
И мы не получим ошибку после сборки и установки модуля по типу этой, когда подключим модуль в php-cli и в php-fpm
1 2 3 4 5 |
PHP Warning: PHP Startup: trader: Unable to initialize module Module compiled with module API=20151012 PHP compiled with module API=20170718 These options need to match in Unknown on line 0 |
4.Установка модуля mcrypt через pecl
1 |
# pecl install mcrypt-1.0.1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
downloading mcrypt-1.0.1.tgz ... Starting to download mcrypt-1.0.3.tgz (33,590 bytes) .........done: 33,590 bytes 6 source files, building running: phpize Configuring for: PHP Api Version: 20170718 Zend Module Api No: 20170718 Zend Extension Api No: 320170718 libmcrypt prefix? [autodetect] : ...................... Build process completed successfully Installing '/usr/lib/php/20170718/mcrypt.so' install ok: channel://pecl.php.net/mcrypt-1.0.3 configuration option "php_ini" is not set to php.ini location You should add "extension=mcrypt.so" to php.ini |
Как видно из вывода выше, модуль установился по пути
1 |
/usr/lib/php/20170718/mcrypt.so |
5. Активация/подключения модуля mcrypt
Вручную добавляем модуль в список доступных модулей
1 |
# nano /etc/php/7.2/mods-available/mcrypt.ini |
1 2 3 |
; configuration for php mcrypt module ; priority=20 extension=mcrypt.so |
Активируем/Подключаем модуль mcrypt
1 |
# phpenmod mcrypt |
Проверяем наличие модуля в требуемых режимах работы php ( в данном случае, php-cli и php-fpm)
1 |
# ls -al /etc/php/7.2/{cli,fpm}/conf.d/ | grep mcrypt |
1 2 |
lrwxrwxrwx 1 root root 38 Jul 19 15:39 20-mcrypt.ini -> /etc/php/7.2/mods-available/mcrypt.ini lrwxrwxrwx 1 root root 38 Jul 19 15:39 20-mcrypt.ini -> /etc/php/7.2/mods-available/mcrypt.ini |
Перезапускаем php7.2-fpm для активации модуля
1 |
# systemctl restart php7.2-fpm |
Проверяем,что модуль успешно активирован/загружен
1 |
# php7.2 -m | grep mcrypt |
1 |
mcrypt |
1 |
# php-fpm7.2 -m | grep mcrypt |
1 |
mcrypt |
Также проверим,что остался ранее установленный модуль mcrypt для версии 7.0
1 |
# php-fpm7.0 -m | grep mcrypt |
1 |
mcrypt |
1 |
# php7.0 -m | grep mcrypt |
1 |
mcrypt |
Источник:
https://www.it-rem.ru/ustanovka-mcrypt-v-php-7-2.html
https://websiteforstudents.com/install-php-7-2-mcrypt-module-on-ubuntu-18-04-lts