Install or Upgrade to PHP 7.2

1. Add PPA ondrej/php

We use Ondřej Surý’s awesome PHP PPA. It already has PHP 7.2, so we’ll add the PPA and update the package information.

Ubuntu

sudo add-apt-repository ppa:ondrej/php
sudo apt update

Debian

sudo apt install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update

2. Note down current PHP packages

This only applies if you are upgrading from a previous version. Note down the current PHP packages you have, so we can reinstall them for PHP 7.2.

dpkg -l | grep php | tee php-packages.txt

This will save your current packages to php-packages.txt file in your working directory.

3. Install PHP 7.2

sudo apt install php7.2 php7.2-common php7.2-cli php7.2-fpm

This will install the bare basic packages you’d need to get started with PHP 7.2. Note that php7.2-fpm package is used for your web server integration. If you are using Apache with prefork MPM (type apachectl -V to see the MPM used), you’d need to install libapache2-mod-php7.2 instead of php7.2-fpm.

4. Install additional modules

Take a look at the php-packages.txt file we created at step #2, and install the additional PHP packages. Your php-packages.txt file will show packages such as php5.6-mbstring, and you need to install their PHP 7.2 counterpart (php7.2-mbstring for example).

5. Web server configuration

Apache with php-fpm

Before we remove the old PHP packages, make sure that your web server correctly uses the PHP 7.2 sockets/modules. If you installed php7.2-fpm above, and using Apache, a2enconf php7.2 will make Apache use PHP 7.2 FPM. Type a2disconf php5.6-fpm to disable existing FPM configurations.

The steps would be similar for Nginx. Refer to the relevant documentation to change socket paths or IP:Port information.

Apache with mod_php

You can disable the current PHP integration with a2dismod php5.6 (or your current version) and enable new PHP 7.2 module with a2enmod php7.2.

6. Remove old versions

If everything is working well (check your phpinfo() and php --info), you can remove the old packages:

sudo apt purge php5*

Of course, change php5 with all old versions you no longer need.

Enjoy your shiny new PHP 7.2!