Install Latest PHP (7.4), PHP-FPM on CentOS 8 / RHEL 8

In this article, I’ll show you how to install the latest version of PHP with PHP-FPM on CentOS 8 / RHEL 8. Let’s start:

Table of Contents

  1. Install Repositories
  2. Install dnf-utils Package
  3. Install PHP with PHP-FPM
  4. Configure PHP-FPM
  5. More Info

Step 1 : Install Repositories

To install the latest PHP, we have to add two repositories on our server. The first one is the EPEL repository:

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

The second one is the Remi repository. Mainly we need this one. Remi repo requires EPEL repo.

sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Step 2 : Install dnf-utils Package

Run this command to install dnf-utils:

sudo dnf install dnf-utils

Step 3 : Install PHP with PHP-FPM

See all available PHP version:

sudo dnf module list php

You’ll find PHP 7.2, 7.3, and 7.4 versions. Let’s install PHP 7.4 :

sudo dnf module install php:remi-7.4

Now install all necessary PHP modules including PHP-FPM:

sudo dnf install -y php-fpm php-cli php-common php-zip php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-pdo

To check the installed version of PHP, run this:

php -v

Step 4 : Configure PHP-FPM

Open php.ini file:

sudo nano /etc/php.ini

and add this line to the configuration file:

cgi.fix_pathinfo=0

Save and close the file. Next, open www.conf file:

sudo nano /etc/php-fpm.d/www.conf

Now find user and group and change their values to your username. I’m going to setup for nginx.

user = nginx
group = nginx

Now find listen.owner and listen.group and change their values to your username too.

listen.owner = nginx
listen.group = nginx

Save & close the file and start the PHP processor by typing:

sudo systemctl start php-fpm

Enable php-fpm to start on boot:

sudo systemctl enable php-fpm

Now restart web-server:

# nginx
sudo systemctl restart nginx

# apache
sudo systemctl restart httpd

Step 5 : More Info

The Nginx virtual host directive for PHP-FPM:

server {

    # more config

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

These are some useful PHP-FPM commands:

sudo systemctl stop php-fpm
sudo systemctl restart php-fpm
sudo systemctl status php-fpm