Install ZendPHP on Debian and Ubuntu (DEB)

The preferred installation procedure for all Linux distributions and for IBM i is the zendphpctl tool. This article describes the alternative manual procedure for installing ZendPHP on Ubuntu or Debian using Debian software package files (DEB).

Throughout this document, the string {VERSION} refers to a PHP minor version, such as 7.4, 8.0, 8.3, and so on. When providing this value, ensure the major version, dot, and minor version are all present.

Set up repository on Debian/Ubuntu

Before installing ZendPHP for the first time, set up your repository:

  1. Add the repos.zend.com GPG key to your apt keychain:

    Copy
    curl -s https://repos.zend.com/zend.key | gpg --dearmor > /usr/share/keyrings/zend.gpg
  2. Add the repos.zend.com repository to your apt sources lists:

    Copy
    sudo echo "deb [signed-by=/usr/share/keyrings/zend.gpg] https://repos.zend.com/zendphp/deb_{os}{os_version}/ zendphp non-free" > /etc/apt/sources.list.d/zendphp.list

    where {os} is one of "debian" or "ubuntu", and {os_version} is the operating system version, minus any "." separators (For example, for Ubuntu 20.04, it would be "2004", and the string would be "deb_ubuntu2004").

    If you were provided credentials, provide the package manager with them, as shown in the following code snippet. This step can be omitted if you are only using community-supported PHP versions and no LTS versions.

    Copy
    $ sudo \
    echo "machine repos.zend.com login {LOGIN_OR_ORDER_ID} password {PASSWORD}" \
    > /etc/apt/auth.conf.d/zendphp.conf
  3. Update your package sources:

    Copy
    sudo apt-get update

Install ZendPHP on Debian/Ubuntu

After setting up your repository and updating the packages, you can now install ZendPHP.

  1. Install the PHP packages:

    sudo apt-get install php{VERSION}-zend

    This installs the common modules and the CLI binary for the specified version. If you would like to explore the additional packages that are available, use sudo apt-cache search php{VERSION}-zend to search our package library.

    Consider installing the following packages in addition to the base package:

  2. Switching PHP versions. You can switch between different PHP CLI binaries using the update-alternatives command:

    Copy
    sudo update-alternatives --set php /usr/bin/php-zend
  3. [Optional] On Apache2, install the PHP package (representing mod_php) for your ZendPHP version:

    sudo apt-get install libapache2-mod-php{VERSION}-zend

    This enables mod_php and configures it for use in handling PHP files.

  4. [Optional] To install FastCGI on Apache2, you need to install the php-fpm package for your PHP version:

    sudo apt-get install php{VERSION}-zend-fpm

    Enable the FastCGI module and then configure the php-fpm bindings for it:

    sudo a2enmod proxy_fcgi setenvif
    sudo a2enconf php{VERSION}-zend-fpm

    Start the php-fpm pool and Apache2:

    sudo systemctl start php{VERSION}-zend-fpm
    sudo systemctl restart apache2

    Configuration for the pool is in /etc/php/{VERSION}-zend/fpm/php-fpm.conf.

  5. [Optional] To install FastCGI on nginx, you need to install the php-fpm package for your PHP version and nginx:

    sudo apt-get install php{VERSION}-zend-fpm nginx

    From here, you need to create a virtual host configuration for nginx that proxies PHP requests to FastCGI as handled by your PHP version. For example, on PHP 7.4, you need to edit the /etc/nginx/sites-available/default file to read:

    server {
    	listen 80;
    	root /var/www/html;
    	server_name _;
    	index index.html index.html index.php;
    	location / {
    		try_files $uri $uri/ /index.php$is_args$args;
    	}
    	location ~ \.php$ {
    		include snippets/fastcgi-php.conf;
    		fastcgi_pass unix:/run/php/php7.4-zend-fpm.pid;
    	}
    }

    Now start the php-fpm pool and restart nginx:

    sudo systemctl start php{VERSION}-zend-fpm
    sudo systemctl restart nginx

Install and use PECL on Debian/Ubuntu

The PECL binary, used to compile and install extensions shipped via https://pecl.php.net, is available via the php{VERSION}-zend-dev package and requires the php{VERSION}-zend-xml extension. You can install everything at once as follows:

sudo apt install -y php{VERSION}-zend-dev php{VERSION}-zend-xml

Install an extension

Installing an extension via the PECL binary follows the generic instructions for all platforms:

sudo pecl install {extension_name}

Enable an extension

Once compiled, you need to enable the extension. Generally, PECL provides information like the following on successful completion:

install ok: channel://pecl.php.net/extension-name-and-version 
configuration option "php_ini" is not set to php.ini location 
You should add "extension=extension-name.so" to php.ini

The important piece is the section contained in quotes in the last line. Copy that information and create a file named extensionname.ini in /etc/php/{VERSION}-zend/mods-available/ as follows:

sudo echo "; configuration for php common module 
; priority=20
extension=extension-name.so" > /etc/php/{VERSION}-zend/mods-available/extension-name.ini

Once done run php -m (if using the CLI SAPI), or use phpinfo(), to verify that your extension is enabled.