PHP is a popular scripting language for web development originally created by Rasmus Lerdorf, a Danish-Canadian programmer in 1994. PHP scripts created can be executed on Linux, macOS, Windows and many other Unix systems provided PHP has been installed.
In this article we will explain the installation of PHP 8.0 on Ubuntu 22.04|20.04|18.04 Linux system. In our previous guide we captured the installation of PHP 8.0 on CentOS 8/7. There are many other guides available in our website on how to install and use other versions of PHP on Ubuntu Linux machine.
The official release of PHP 8 will be on November 26, 2020. It is a new major version with many new features and performance improvements. You should also expect new breaking changes which means some modifications in your code may be needed to get it running on PHP 8. Some of the nice set of new features coming with PHP 8 are the JIT compiler, named arguments, union types, attributes, and many more.
Step 1: Update Ubuntu System
Update all system packages to the latest by running the commands below.
sudo apt update
sudo apt -y upgrade
A reboot is important after any upgrade.
sudo systemctl reboot
Step 2: Add Ondřej Surý PPA repository (Only Ubuntu 20.04/18.04)
Ubuntu 22.04 ships with PHP 8 packages and many other extensions required for PHP 8 integrations. For Ubuntu 20.04/18.04, the latest PHP packages are available in the Ondřej Surý PPA repository. Run the commands shared below to add this repository to your Ubuntu system.
Ubuntu 20.04|18.04 (Not needed on Ubuntu 22.04)
sudo apt update
sudo apt install lsb-release ca-certificates apt-transport-https software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
Hit enter key when prompted to add the repository:
Debian oldstable and stable packages are provided as well: https://deb.sury.org/#debian-dpa
You can get more information about the packages at https://deb.sury.org
IMPORTANT: The <foo>-backports is now required on older Ubuntu releases.
BUGS&FEATURES: This PPA now has a issue tracker:
https://deb.sury.org/#bug-reporting
CAVEATS:
1. If you are using php-gearman, you need to add ppa:ondrej/pkg-gearman
2. If you are using apache2, you are advised to add ppa:ondrej/apache2
3. If you are using nginx, you are advised to add ppa:ondrej/nginx-mainline
or ppa:ondrej/nginx
PLEASE READ: If you like my work and want to give me a little motivation, please consider donating regularly: https://donate.sury.org/
WARNING: add-apt-repository is broken with non-UTF-8 locales, see
https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:
# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Press [ENTER] to continue or Ctrl-c to cancel adding it.
From the update output you should see the repositories added:
Hit:1 http://mirror.hetzner.de/ubuntu/packages focal InRelease
Hit:2 http://mirror.hetzner.de/ubuntu/packages focal-updates InRelease
Hit:3 http://mirror.hetzner.de/ubuntu/packages focal-backports InRelease
Hit:4 http://mirror.hetzner.de/ubuntu/packages focal-security InRelease
Get:5 http://ppa.launchpad.net/ondrej/php/ubuntu focal InRelease [23.9 kB]
Hit:6 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:7 http://archive.ubuntu.com/ubuntu focal InRelease
Hit:8 http://archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:9 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Get:10 http://ppa.launchpad.net/ondrej/php/ubuntu focal/main amd64 Packages [74.8 kB]
Get:11 http://ppa.launchpad.net/ondrej/php/ubuntu focal/main i386 Packages [20.2 kB]
Get:12 http://ppa.launchpad.net/ondrej/php/ubuntu focal/main Translation-en [28.2 kB]
Fetched 147 kB in 1s (158 kB/s)
Reading package lists... Done
Step 3: Install PHP 8 on Ubuntu 22.04|20.04|18.04
Update APT index just to ensure it is okay for package installation:
sudo apt update
Then install PHP 8.0 on Ubuntu 22.04|20.04|18.04 Linux machine:
sudo apt install php8.0
Hit the y key to start installation:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
apache2-bin libapache2-mod-php8.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libgdbm-compat4 libjansson4 liblua5.2-0 libmagic-mgc libmagic1
libperl5.30 perl perl-modules-5.30 php-common php8.0-cli php8.0-common php8.0-opcache php8.0-readline
Suggested packages:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser php-pear file perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make
libb-debug-perl liblocale-codes-perl
Recommended packages:
apache2
The following NEW packages will be installed:
apache2-bin libapache2-mod-php8.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libgdbm-compat4 libjansson4 liblua5.2-0 libmagic-mgc libmagic1
libperl5.30 perl perl-modules-5.30 php-common php8.0 php8.0-cli php8.0-common php8.0-opcache php8.0-readline
0 upgraded, 20 newly installed, 0 to remove and 7 not upgraded.
Need to get 13.0 MB of archives.
After this operation, 78.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Confirm the default PHP version on the server:
$ php -v
PHP 8.0.11 (cli) (built: Sep 23 2021 21:26:24) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.11, Copyright (c) Zend Technologies
with Zend OPcache v8.0.11, Copyright (c), by Zend Technologies
Step 4: Install PHP 8 Extensions on Ubuntu22.04|20.04|18.04
To install PHP 8 extensions on Ubuntu22.04|20.04|18.04 use the command syntax:
sudo apt install php8.0-<extension>
Some available extensions are as shown below:
$ sudo apt install php8.0-
php8.0-amqp php8.0-common php8.0-gd php8.0-ldap php8.0-odbc php8.0-readline php8.0-sqlite3 php8.0-xsl
php8.0-apcu php8.0-curl php8.0-gmp php8.0-mailparse php8.0-opcache php8.0-redis php8.0-sybase php8.0-yac
php8.0-ast php8.0-dba php8.0-igbinary php8.0-mbstring php8.0-pgsql php8.0-rrd php8.0-tidy php8.0-yaml
php8.0-bcmath php8.0-dev php8.0-imagick php8.0-memcached php8.0-phpdbg php8.0-smbclient php8.0-uuid php8.0-zip
php8.0-bz2 php8.0-ds php8.0-imap php8.0-msgpack php8.0-pspell php8.0-snmp php8.0-xdebug php8.0-zmq
php8.0-cgi php8.0-enchant php8.0-interbase php8.0-mysql php8.0-psr php8.0-soap php8.0-xhprof
php8.0-cli php8.0-fpm php8.0-intl php8.0-oauth php8.0-raphf php8.0-solr php8.0-xml
Example:
sudo apt install php8.0-cli php8.0-common php8.0-imap php8.0-redis php8.0-snmp php8.0-xml php8.0-zip php8.0-mbstring
If you want to list all PHP 8.0 loaded modules use the command:
$ php -m
If using PHP with Nginx web browser ensure php-fpm service is started and running:
$ systemctl status php*-fpm.service
● php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-11-11 11:42:07 EAT; 35s ago
Docs: man:php-fpm8.0(8)
Process: 192780 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.0/fpm/pool.d/www.conf 80 (code=exited, status=0/SUCCESS)
Main PID: 192777 (php-fpm8.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 9482)
Memory: 10.3M
CPU: 79ms
CGroup: /system.slice/php8.0-fpm.service
├─192777 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
├─192778 php-fpm: pool www
└─192779 php-fpm: pool www
Nov 11 11:42:07 ubuntu22 systemd[1]: Starting The PHP 8.0 FastCGI Process Manager...
Nov 11 11:42:07 ubuntu22 php-fpm8.0[192777]: [11-Nov-2021 11:42:07] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'redis.so' (tried: /usr/lib/php/20200930/redis.so>
Nov 11 11:42:07 ubuntu22 php-fpm8.0[192777]: Created directory: /var/lib/snmp/cert_indexes
Nov 11 11:42:07 ubuntu22 systemd[1]: Started The PHP 8.0 FastCGI Process Manager.
Same format is used to install other extensions.
Reference:
Recommended books to read:
- Best Books to learn Web Development – PHP, HTML, CSS, JavaScript and jQuery
- Best Books To Master Web Design
- Best Books To Learn CSS & CSS3
- Best Books To Learn HTML & HTML5
- Best Apache and Nginx reference Books