Ubuntu 18.04 ships with PHP 7.2 by default but there are various reasons why you may wish to upgrade to newer versions. For example, active support for it ends later this year – far sooner than the 2023 support window for the OS.
In addition, applications will be released that will require newer versions in that 2018 – 2023 window. For IXP Manager, we are releasing v5 this month and mandating PHP 7.3 support. We do this to stay current and to prevent developer apathy – insisting on legacy frameworks and packages that have been EOL’d provides a major stumbling block for bringing on new developers and contributors. There’s also a real opportunity cost – I have a couple free hours, will I work on project A or project B? If project A uses an old stale toolchain where everything is that much more awkward that project B then which would you choose?
So, from a typical LAMP stack install of Ubuntu 18.04, you’ll find something like the following packages for PHP:
root@ubuntu:/var/www/html# dpkg -l | grep php | cut - -b 1-65 ii libapache2-mod-php 1:7.2+60ubuntu1 ii libapache2-mod-php7.2 7.2.17-0ubuntu0.18.04.1 ii php-common 1:60ubuntu1 ii php-mysql 1:7.2+60ubuntu1 ii php7.2-cli 7.2.17-0ubuntu0.18.04.1 ii php7.2-common 7.2.17-0ubuntu0.18.04.1 ii php7.2-json 7.2.17-0ubuntu0.18.04.1 ii php7.2-mysql 7.2.17-0ubuntu0.18.04.1 ii php7.2-opcache 7.2.17-0ubuntu0.18.04.1 ii php7.2-readline 7.2.17-0ubuntu0.18.04.1
Obviously your exact list will vary depending on what you installed. I find the easiest way to upgrade is to start by removing all installed PHP packages. Based on the above:
dpkg -r libapache2-mod-php libapache2-mod-php7.2 php-common \ php-mysql php7.2-cli php7.2-common php7.2-json php7.2-mysql \ php7.2-opcache php7.2-readline
The goto place for current versions of PHP on Ubuntu is Ondřej Surý’s PPA (Personal Package Archive). Ondřej maintains this in his own time so don’t be afraid to tip him here.
It’s easy to add this to 18.04 as follows:
add-apt-repository ppa:ondrej/php apt-get update
Then install the PHP 7.3 packages you want / need. For example we can just take the package removal line above and install the 7.3 equivalents with:
apt install libapache2-mod-php libapache2-mod-php7.3 php-common \ php-mysql php7.3-cli php7.3-common php7.3-json php7.3-mysql \ php7.3-opcache php7.3-readline
php -v PHP 7.3.5-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: May 3 2019 10:00:24) ( NTS )
One post-installation check is to replicate and custom php.ini changes you may have made (max upload size, max post size, max memory usage, etc.).