Article ID: 128685, created on Apr 17, 2016, last review on Jul 26, 2016

  • Applies to:
  • Plesk Automation 11.5

Question

Some applications like Magento require PHP 5.5 (or higher) handler version with mcrypt and intl PHP extensions. I have compiled PHP 5.6.3 according to How to enable multiple PHP versions in Plesk Automation, but didn't enable some extensions. How can I install it for registered PHP handler without recompilation?

Answer

In order to add extension to already compiled PHP handler 2 options are possible:

A. Install extension using PECL

This method allows to enable intl support. The installation includes the following main steps:

  1. Install required dependencies:

    [root@pa115apachemysql2 ~]# yum -y install icu libicu libicu-devel
    
  2. Locate PHP563 handler utility:

    [root@pa115apachemysql2 ~]# updatedb
    [root@pa115apachemysql2 ~]# locate pecl | grep "php563-cgi/bin"
    /usr/local/php563-cgi/bin/pecl
    
  3. Install required PHP extension (Do not change default settings):

    [root@pa115apachemysql2 ~]# /usr/local/php563-cgi/bin/pecl install intl
    downloading intl-3.0.0.tgz ...
    Starting to download intl-3.0.0.tgz (248,200 bytes)
    ....................................................done: 248,200 bytes
    150 source files, building
    running: phpize
    Configuring for:
    PHP Api Version:         20131106
    Zend Module Api No:      20131226
    Zend Extension Api No:   220131226
    Specify where ICU libraries and headers can be found [DEFAULT] :
    ...
    

    Output result:

    Build process completed successfully
    Installing '/usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/intl.so'
    install ok: channel://pecl.php.net/intl-3.0.0
    configuration option "php_ini" is not set to php.ini location
    You should add "extension=intl.so" to php.ini
    
  4. Now we need to enable intl support on server wide level:

    4.1. Get config-file-scan-dir option:

    [root@pa115apachemysql2 ~]# /usr/local/php563-cgi/bin/php-cgi phpinfo | grep -ir "with-config-file-scan-dir"
    ...'--with-config-file-scan-dir=/usr/local/php563-cgi/php.d'...
    

    4.2. Create this directory if it does not exist:

    [root@pa115apachemysql2 ~]# mkdir -p /usr/local/php563-cgi/php.d
    

    4.3. Create configuration file for intl module:

    [root@pa115apachemysql2 ~]# touch /usr/local/php563-cgi/php.d/intl.ini
    [root@pa115apachemysql2 ~]# vim /usr/local/php563-cgi/php.d/intl.ini
    [root@pa115apachemysql2 ~]# cat /usr/local/php563-cgi/php.d/intl.ini
    ; Enable intl extension module
    extension=intl.so
    

    4.4. Make sure that compiled intl.so exists in /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/intl.so (from step 3)

    [root@pa115apachemysql2 ~]# ls -laht /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/intl.so
    -rw-r--r-- 1 root root 2.3M Feb 13 17:49 /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/intl.so
    
  5. Restart Apache on the node in order to apply changes:

    [root@pa115apachemysql2 ~]# /etc/init.d/httpd restart
    Stopping httpd:                                            [  OK  ]
    Starting httpd:                                            [  OK  ]
    
  6. Make sure that intl extension is loaded:

    [root@pa115apachemysql2 ~]# /usr/local/php563-cgi/bin/php-cgi -c /usr/local/php563-cgi/php.ini -m | grep intl
    intl
    

B. Compiling shared PECL extensions with phpize

mcrypt extension can not be installed using PECL utility, because it's package is missing in repo's.:

[root@pa115apachemysql2 ~]# /usr/local/php563-cgi/bin/pecl install mcrypt
No releases available for package "pecl.php.net/mcrypt"
install failed

So we need to compile mcrypt.so manually. It could be done by following steps:

From KB https://kb.odin.com/en/123679:

    # cd /usr/local/src
    # wget http://php.net/distributions/php-5.6.3.tar.bz2
    # tar xjvf php-5.6.3.tar.bz2
    # mv php-5.6.3 php563

Installation files are located at /usr/local/src/php563/ext/mcrypt.

  1. Change directory to mcrypt where is source files are located:

    [root@pa115apachemysql2 ~]# cd /usr/local/src/php563/ext/mcrypt
    [root@pa115apachemysql2 mcrypt]# pwd
    /usr/local/src/php563/ext/mcrypt
    
  2. We need to install libmcrypt package, but it's not available in default CentOS repos, :

    [root@pa115apachemysql2 mcrypt]# yum install libmcrypt libmcrypt-devel
    Loaded plugins: fastestmirror
    Setting up Install Process
    Loading mirror speeds from cached hostfile
     * base: mirror.satellite-service.ru
     * extras: mirror.digitalhusky.com
     * updates: mirror.digitalhusky.com
    No package libmcrypt-devel available.
    Nothing to do
    

    2.1. SEnable epel repository:

    [root@pa115apachemysql2 mcrypt]# yum -y install epel-release
    

    2.2. Make sure that mail epel repository is enabled:

    [root@pa115apachemysql2 mcrypt]# grep -i "enabled" /etc/yum.repos.d/epel.repo
    enabled=1
    enabled=0
    enabled=0
    

    2.3. Install required packages:

    [root@pa115apachemysql2 mcrypt]# yum install libmcrypt libmcrypt-devel
    
  3. Now we can prepare mcrypt.so from source files:

    3.1. Check current directory once again (it's important):

    [root@pa115apachemysql2 mcrypt]# pwd
    /usr/local/src/php563/ext/mcrypt
    

    3.2. Locate phpize utility for corresponding PHP handler:

    [root@pa115apachemysql2 mcrypt]# locate phpize
    /usr/local/php563-cgi/bin/phpize
    ...
    

    3.3. Run it:

    [root@pa115apachemysql2 mcrypt]# /usr/local/php563-cgi/bin/phpize
    Configuring for:
    PHP Api Version:         20131106
    Zend Module Api No:      20131226
    Zend Extension Api No:   220131226
    

    3.4. Run following commands (/usr/local/php563-cgi/bin/php-config is usually located at the same path with compiled PHP binaries):

    [root@pa115apachemysql2 mcrypt]# locate php-config
    /usr/local/php563-cgi/bin/php-config
    ...
    [root@pa115apachemysql2 mcrypt]# ./configure --with-php-config=/usr/local/php563-cgi/bin/php-config
    
    [root@pa115apachemysql2 mcrypt]# make
    [root@pa115apachemysql2 mcrypt]# make install
    Installing shared extensions:     /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/
    
  4. Create configuration file for mcrypt:

    [root@pa115apachemysql2 mcrypt]# touch /usr/local/php563-cgi/php.d/mcrypt.ini
    [root@pa115apachemysql2 mcrypt]# vim /usr/local/php563-cgi/php.d/mcrypt.ini
    [root@pa115apachemysql2 mcrypt]# cat /usr/local/php563-cgi/php.d/mcrypt.ini
    ; Enable mcrypt extension module
     extension=mcrypt.so
    
  5. Make sure that compiled mcrypt.so exists in /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/mcrypt.so (from step 3.4)

    [root@pa115apachemysql2 mcrypt]# ls -laht /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/mcrypt.so
    -rwxr-xr-x 1 root root 147K Feb 13 18:24 /usr/local/php563-cgi/lib/php/extensions/no-debug-non-zts-20131226/mcrypt.so
    
  6. Restart Apache on the node in order to apply changes.

Search Words

install PHP extension

PHP Handlers

Magento PHP requirements

add php extension

install intl

magento PHP extension

mcrypt

zlib

33a70544d00d562bbc5b17762c4ed2b3 caea8340e2d186a540518d08602aa065 e0aff7830fa22f92062ee4db78133079

Email subscription for changes to this article
Save as PDF