How to Install PHP 8.2 on AlmaLinux 9 | 8

ComputingPost
14 min readDec 31, 2022

PHP 8.2 has been officially released, along with the retirement of PHP 7.4. AlmaLinux does not support this version in either EL9 or EL8 but can be installed using the Remi PHP Repo. In the following tutorial, you will learn how to import the REMI PHP Module and install PHP 8.2 on AlmaLinux 9 or AlmaLinux 8, along with some tips about configuring Nginx with FPM using the command line terminal.

Recommended Steps Before Installation

First, update your system to ensure all existing packages are up to date. This will ensure no conflicts arise as best as possible during the installation.

sudo dnf upgrade --refresh

Import PHP Remi Repository

The first task is to install the (EPEL) repository, which stands for (Extra Packages for Enterprise Linux). For newer users of AlmaLinux and similar distributions based on RHEL, EPEL contains the most commonly used software packages for Enterprise Linux.

Import the PHP repository that matches your version of AlmaLinux.

Import REMI PHP Repo for AlmaLinux 9 (EL9)

Next, install EPEL using the following (dnf) terminal command.

sudo dnf install \

https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \

https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm

Now that you have added the EPEL repository enable the (Remi repository) with the following command.

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y

Import REMI PHP Repo for AlmaLinux 8 (EL8)

Similar to EPEL 9 method, install EPEL using the following (dnf) terminal command. This command changes the version numbers.

sudo dnf install \

https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm \

https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-8.noarch.rpm

Now that you have added the EPEL repository enable the (Remi repository) with the following command.

sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm -y

Next, verify the installation.

dnf repolist | grep remi

Example output:

remi-modular     Remi's Modular repository for Enterprise Linux 9 - x86_64

remi-safe Safe Remi's RPM repository for Enterprise Linux 9 - x86_64

Alternatively, you can list all modules on your system with the following command.

dnf module list

Example output:

As mentioned above, you have imported the Remi repository with PHP 8.2 available along with other modules such as Redis, Memcached, and PHP Composer if you wish to install an alternative newer version in most cases to that of what AlmaLinux contains.

Situational — Remove Existing PHP Installation

For users that have already installed PHP, you can import the Remi repository or change the branch within it, for example going from 8.1 to 8.2. Still, it may be beneficial to back up your existing configurations and remove PHP.

This is not required, you can directly upgrade, and it should work mostly. Just be aware the configurations will most likely change, so if you do not remove the existing PHP version, ensure you back up any custom configurations such as the “php.ini.”

Make sure to back up any configuration files.

sudo dnf remove php php-fpm -y

Then remove the rest of the package extensions.

sudo dnf remove php* -y

To reset the PHP module list is easy with the following command:

sudo dnf module list reset php -y

Now you can proceed to the next part of the tutorial.

Enable PHP 8.2 (Remi) Repository

A quick tip is to use the dnf module list command to see the options available and the default.

The following dnf module list command can do this:

dnf module list php

Example output:

You will be prompted to import the GPG key for Remi’s repository.

Type (Y) to proceed if you encounter it.

Next, enable PHP 8.2 with the following command.

sudo dnf module enable php:remi-8.2 -y

Example output:

======================================================================

Package Architecture Version Repository Size

======================================================================

Enabling module streams:

php remi-8.2



Transaction Summary

======================================================================

Install PHP 8.2 Apache or Nginx Support

Now that you have added the Remi PHP repository and enabled PHP 8.2 to be the default version on your system, you can install PHP with the following command.

Apache (httpd) Users:

sudo dnf install php -y

Nginx Users:

sudo dnf install php php-fpm -y

Optionally, if you would like to install the most commonly used extensions for PHP 8.2, use the following command:

sudo dnf install php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml php-dom php-redis php-memcached php-memcache

Note, remove the options you do not want. This is optional, and it is highly recommended to only install and keep what modules you require from a performance and security standard.

Alternatively, you can search for your desired PHP extension with the following command.

sudo dnf search php82-php-

Example output:

======================================================================Name & Summary Matched: php82-php- ======================================================================



php82-php-pecl-pcsc-devel.x86_64 : php82-php-pecl-pcsc developer files (header)

php82-php-pecl-psr-devel.x86_64 : php82-php-pecl-psr developer files (header)

php82-php-pecl-raphf-devel.x86_64 : php82-php-pecl-raphf developer files (header)

php82-php-pecl-xmldiff-devel.x86_64 : php82-php-pecl-xmldiff developer files (header)

php82-php-pecl-yaconf-devel.x86_64 : php82-php-pecl-yaconf developer files (header)

php82-php-zephir-parser-devel.x86_64 : php82-php-zephir-parser developer files (headers)

php82-php-zstd-devel.x86_64 : php82-php-zstd developer files (header)



======================================================================Name Matched: php82-php- ======================================================================

php82-php-ast.x86_64 : Abstract Syntax Tree

php82-php-bcmath.x86_64 : A module for PHP applications for using the bcmath library

php82-php-brotli.x86_64 : Brotli Extension for PHP

php82-php-cli.x86_64 : Command-line interface for PHP

php82-php-common.x86_64 : Common files for PHP

php82-php-dba.x86_64 : A database abstraction layer module for PHP applications

php82-php-dbg.x86_64 : The interactive PHP debugger

php82-php-devel.x86_64 : Files needed for building PHP extensions

php82-php-embedded.x86_64 : PHP library for embedding in applications

php82-php-enchant.x86_64 : Enchant spelling extension for PHP applications

php82-php-ffi.x86_64 : Foreign Function Interface

php82-php-fpm.x86_64 : PHP FastCGI Process Manager

php82-php-gd.x86_64 : A module for PHP applications for using the gd graphics library

php82-php-geos.x86_64 : PHP module for GEOS

php82-php-gmp.x86_64 : A module for PHP applications for using the GNU MP library

php82-php-imap.x86_64 : A module for PHP applications that use IMAP

php82-php-intl.x86_64 : Internationalization extension for PHP applications

php82-php-ldap.x86_64 : A module for PHP applications that use LDAP

php82-php-libvirt.x86_64 : PHP language binding for Libvirt

php82-php-libvirt-doc.noarch : Document of php-libvirt

php82-php-litespeed.x86_64 : LiteSpeed Web Server PHP support

php82-php-lz4.x86_64 : LZ4 Extension for PHP

php82-php-maxminddb.x86_64 : MaxMind DB Reader extension

php82-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling

php82-php-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases

php82-php-oci8.x86_64 : A module for PHP applications that use OCI8 databases

php82-php-odbc.x86_64 : A module for PHP applications that use ODBC databases

php82-php-opcache.x86_64 : The Zend OPcache

php82-php-pdo.x86_64 : A database access abstraction module for PHP applications

php82-php-pdo-dblib.x86_64 : PDO driver for Microsoft SQL Server and Sybase databases

php82-php-pdo-firebird.x86_64 : PDO driver for Interbase/Firebird databases

php82-php-pear.noarch : PHP Extension and Application Repository framework

php82-php-pecl-ahocorasick.x86_64 : Effective Aho-Corasick string pattern matching algorithm

php82-php-pecl-amqp.x86_64 : Communicate with any AMQP compliant server

php82-php-pecl-apcu.x86_64 : APC User Cache

php82-php-pecl-apcu-devel.x86_64 : APCu developer files (header)

php82-php-pecl-apfd.x86_64 : Always Populate Form Data

php82-php-pecl-awscrt.x86_64 : AWS Common Runtime PHP bindings

php82-php-pecl-base58.x86_64 : Encode and decode data with base58

php82-php-pecl-bitset.x86_64 : BITSET library

php82-php-pecl-bsdiff.x86_64 : The bsdiff extension for PHP

php82-php-pecl-cassandra.x86_64 : DataStax PHP Driver for Apache Cassandra

php82-php-pecl-couchbase3.x86_64 : Couchbase Server PHP extension

php82-php-pecl-couchbase4.x86_64 : Couchbase Server PHP extension

php82-php-pecl-crypto.x86_64 : Wrapper for OpenSSL Crypto Library

php82-php-pecl-csv.x86_64 : CSV PHP extension

php82-php-pecl-datadog-trace.x86_64 : APM and distributed tracing for PHP

php82-php-pecl-dbase.x86_64 : dBase database file access functions

php82-php-pecl-decimal.x86_64 : Arbitrary-precision floating-point decimal

php82-php-pecl-dio.x86_64 : Direct I/O functions

php82-php-pecl-ds.x86_64 : Data Structures for PHP

php82-php-pecl-eio.x86_64 : Provides interface to the libeio library

php82-php-pecl-env.x86_64 : Load environment variables

php82-php-pecl-ev.x86_64 : Provides interface to libev library

php82-php-pecl-event.x86_64 : Provides interface to libevent library

php82-php-pecl-excimer.x86_64 : Interrupting timer and low-overhead sampling profiler

php82-php-pecl-fann.x86_64 : Wrapper for FANN Library

php82-php-pecl-gearman.x86_64 : PHP wrapper to libgearman

php82-php-pecl-geoip.x86_64 : Extension to map IP addresses to geographic places

php82-php-pecl-geospatial.x86_64 : PHP Extension to handle common geospatial functions

php82-php-pecl-gmagick.x86_64 : Provides a wrapper to the GraphicsMagick library

php82-php-pecl-gnupg.x86_64 : Wrapper around the gpgme library

php82-php-pecl-grpc.x86_64 : General RPC framework

php82-php-pecl-handlebars.x86_64 : Handlebars templating language

php82-php-pecl-hdr-histogram.x86_64 : PHP extension wrapper for the C hdrhistogram API

php82-php-pecl-http.x86_64 : Extended HTTP support

php82-php-pecl-http-devel.x86_64 : Extended HTTP support developer files (header)

php82-php-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer

php82-php-pecl-igbinary-devel.x86_64 : Igbinary developer files (header)

php82-php-pecl-imagick-im6.x86_64 : Extension to create and modify images using ImageMagick 6

php82-php-pecl-imagick-im6-devel.x86_64 : imagick extension developer files (header)

php82-php-pecl-imagick-im7.x86_64 : Extension to create and modify images using ImageMagick 7

php82-php-pecl-imagick-im7-devel.x86_64 : imagick extension developer files (header)

php82-php-pecl-immutable-cache.x86_64 : An shared memory cache of immutable values

php82-php-pecl-inotify.x86_64 : Inotify

php82-php-pecl-ion.x86_64 : Amazon ION support

php82-php-pecl-ip2location.x86_64 : Get geo location information of an IP address

php82-php-pecl-ip2proxy.x86_64 : Get proxy information of an IP address

php82-php-pecl-json-post.x86_64 : JSON POST handler

php82-php-pecl-jsonpath.x86_64 : Extract data using JSONPath notation

php82-php-pecl-krb5.x86_64 : Kerberos authentification extension

php82-php-pecl-krb5-devel.x86_64 : Kerberos extension developer files (header)

php82-php-pecl-leveldb.x86_64 : LevelDB PHP bindings

php82-php-pecl-luasandbox.x86_64 : Lua interpreter with limits and safe environment

php82-php-pecl-lzf.x86_64 : Extension to handle LZF de/compression

php82-php-pecl-mailparse.x86_64 : PHP PECL package for parsing and working with email messages

php82-php-pecl-mcrypt.x86_64 : Bindings for the libmcrypt library

php82-php-pecl-memcache.x86_64 : Extension to work with the Memcached caching daemon

php82-php-pecl-memcached.x86_64 : Extension to work with the Memcached caching daemon

php82-php-pecl-memprof.x86_64 : Memory usage profiler

php82-php-pecl-mongodb.x86_64 : MongoDB driver for PHP

php82-php-pecl-msgpack.x86_64 : API for communicating with MessagePack serialization

php82-php-pecl-msgpack-devel.x86_64 : MessagePack developer files (header)

php82-php-pecl-mustache.x86_64 : Mustache templating language

php82-php-pecl-mysql.x86_64 : MySQL database access functions

php82-php-pecl-mysql-xdevapi.x86_64 : MySQL database access functions

php82-php-pecl-nsq.x86_64 : PHP extension for NSQ client

php82-php-pecl-oauth.x86_64 : PHP OAuth consumer extension

php82-php-pecl-opencensus.x86_64 : A stats collection and distributed tracing framework

php82-php-pecl-openswoole.x86_64 : PHP's asynchronous concurrent distributed networking framework

php82-php-pecl-pam.x86_64 : PAM integration

php82-php-pecl-parle.x86_64 : Parsing and lexing

php82-php-pecl-pcov.x86_64 : Code coverage driver

php82-php-pecl-pcsc.x86_64 : An extension for PHP using the winscard PC/SC API

php82-php-pecl-pkcs11.x86_64 : PHP Bindings for PKCS11 modules

php82-php-pecl-pq.x86_64 : PostgreSQL client library (libpq) binding

php82-php-pecl-protobuf.x86_64 : Mechanism for serializing structured data

php82-php-pecl-ps.x86_64 : An extension to create PostScript files

php82-php-pecl-psr.x86_64 : PSR interfaces

php82-php-pecl-quickhash.x86_64 : Set of specific strongly-typed classes for sets and hashing

php82-php-pecl-raphf.x86_64 : Resource and persistent handles factory

php82-php-pecl-rdkafka6.x86_64 : Kafka client based on librdkafka

php82-php-pecl-recode.x86_64 : A module for PHP applications for using the recode library

php82-php-pecl-redis5.x86_64 : Extension for communicating with the Redis key-value store

php82-php-pecl-rnp.x86_64 : wrapper around the RNP library

php82-php-pecl-rpminfo.x86_64 : RPM information

php82-php-pecl-rrd.x86_64 : PHP Bindings for rrdtool

php82-php-pecl-runkit7.x86_64 : For all those things you... shouldn't have been doing anyway... but surely do!

php82-php-pecl-scoutapm.x86_64 : Native Extension Component for ScoutAPM's PHP Agent

php82-php-pecl-scrypt.x86_64 : Scrypt hashing function

php82-php-pecl-sdl.x86_64 : Simple DirectMedia Layer for PHP

php82-php-pecl-sdl-image.x86_64 : SDL_image bindings for PHP

php82-php-pecl-sdl-mixer.x86_64 : Binding of SDL_mixer for PHP

php82-php-pecl-sdl-ttf.x86_64 : SDL_ttf bindings for PHP

php82-php-pecl-seaslog.x86_64 : An effective, fast, stable log extension for PHP

php82-php-pecl-seassnowflake.x86_64 : PHP Extension for Distributed unique ID generator

php82-php-pecl-selinux.x86_64 : SELinux binding for PHP scripting language

php82-php-pecl-simdjson.x86_64 : Provides faster json decoding through simdjson bindings for PHP

php82-php-pecl-simple-kafka-client.x86_64 : Kafka client based on librdkafka

php82-php-pecl-skywalking.x86_64 : The PHP instrument agent for Apache SkyWalking

php82-php-pecl-solr2.x86_64 : API orientée objet pour Apache Solr

php82-php-pecl-ssdeep.x86_64 : Wrapper for libfuzzy library

php82-php-pecl-ssh2.x86_64 : Bindings for the libssh2 library

php82-php-pecl-stats.x86_64 : Routines for statistical computation

php82-php-pecl-stomp.x86_64 : Stomp client extension

php82-php-pecl-swoole4.x86_64 : PHP's asynchronous concurrent distributed networking framework

php82-php-pecl-swoole5.x86_64 : PHP's asynchronous concurrent distributed networking framework

php82-php-pecl-sync.x86_64 : Named and unnamed synchronization objects

php82-php-pecl-teds.x86_64 : Tentative Extra Data Structures

php82-php-pecl-trader.x86_64 : Technical Analysis for traders

php82-php-pecl-translit.x86_64 : Transliterates non-latin character sets to latin

php82-php-pecl-trie.x86_64 : PHP Trie extension

php82-php-pecl-uopz.x86_64 : User Operations for Zend

php82-php-pecl-uploadprogress.x86_64 : An extension to track progress of a file upload

php82-php-pecl-uuid.x86_64 : Universally Unique Identifier extension for PHP

php82-php-pecl-var-representation.x86_64 : A compact, more readable alternative to var_export

php82-php-pecl-varnish.x86_64 : Varnish Cache bindings

php82-php-pecl-vips.x86_64 : PHP extension for interfacing with libvips

php82-php-pecl-vld.x86_64 : Dump the internal representation of PHP scripts

php82-php-pecl-xattr.x86_64 : Extended attributes

php82-php-pecl-xdebug3.x86_64 : Provides functions for function traces and profiling

php82-php-pecl-xdiff.x86_64 : File differences/patches

php82-php-pecl-xhprof.x86_64 : PHP extension for XHProf, a Hierarchical Profiler

php82-php-pecl-xlswriter.x86_64 : An efficient and fast xlsx file extension

php82-php-pecl-xmldiff.x86_64 : XML diff and merge

php82-php-pecl-xmlrpc.x86_64 : Functions to write XML-RPC servers and clients

php82-php-pecl-xxtea.x86_64 : XXTEA encryption algorithm extension for PHP

php82-php-pecl-yac.x86_64 : Lockless user data cache

php82-php-pecl-yaconf.x86_64 : Yet Another Configurations Container

php82-php-pecl-yaf.x86_64 : Yet Another Framework

php82-php-pecl-yaml.x86_64 : PHP Bindings for yaml

php82-php-pecl-yar.x86_64 : Light, concurrent RPC framework

php82-php-pecl-yaz.x86_64 : Z39.50/SRU client

php82-php-pecl-zip.x86_64 : A ZIP archive management extension

php82-php-pecl-zmq.x86_64 : ZeroMQ messaging

php82-php-pgsql.x86_64 : A PostgreSQL database module for PHP

php82-php-phpiredis.x86_64 : Client extension for Redis

php82-php-process.x86_64 : Modules for PHP script using system process interfaces

php82-php-pspell.x86_64 : A module for PHP applications for using pspell interfaces

php82-php-realpath-turbo.x86_64 : Use realpath cache despite open_basedir restriction

php82-php-smbclient.x86_64 : PHP wrapper for libsmbclient

php82-php-snappy.x86_64 : Snappy Extension for PHP

php82-php-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices

php82-php-soap.x86_64 : A module for PHP applications that use the SOAP protocol

php82-php-sodium.x86_64 : Wrapper for the Sodium cryptographic library

php82-php-sqlsrv.x86_64 : Microsoft Drivers for PHP for SQL Server

php82-php-tidy.x86_64 : Standard PHP module provides tidy library support

php82-php-xml.x86_64 : A module for PHP applications which use XML

php82-php-xz.x86_64 : XZ (LZMA2) compression/decompression

php82-php-zephir-parser.x86_64 : Zephir code parser

php82-php-zstd.x86_64 : Zstandard extension

A handy hint is that you do not need to use php82-PHP when installing packages. This helps filter down the PHP 8.2 packages, or else you will get all the previous versions listed, which makes it a bit more confusing.

You can use the following command to view modules loaded at any time.

php -m

Example output (They will 100% vary):

[PHP Modules]

apcu

bcmath

bz2

calendar

Core

ctype

curl

date

dom

exif

fileinfo

filter

ftp

gd

gettext

hash

iconv

igbinary

imagick

intl

json

libxml

mbstring

memcache

memcached

msgpack

mysqli

mysqlnd

openssl

pcntl

pcov

pcre

PDO

pdo_mysql

Phar

readline

redis

Reflection

session

SimpleXML

sockets

SPL

sqlite3

standard

tokenizer

xdebug

xml

xmlreader

xmlrpc

xmlwriter

xsl

Zend OPcache

zip

zlib



[Zend Modules]

Xdebug

Zend OPcache

Depending on how many modules you have installed, this can be pretty large, and it is always recommended to keep an eye on this and remove any you do not need.

Lastly, use the following command for anyone interested in installing the development branch.

sudo dnf install php-devel

Additional developments tool, such as debugging tools, use the following command.

sudo dnf install php-xdebug php-pcov

This will install many dependencies, and unless you are developing with PHP or have some special requirement to install it, do not use this version.

Now that you have installed PHP 8.2 and the extensions, check the version with the following command:

php -v

Example output:

php 8.2 version check on almalinux 9 or almalinux 8

Pin

PHP-FPM Installations of PHP 8.2

Unlike PHP-FPM installations on Debian/Ubuntu that use the (www-data) user, this isn’t the case with RHEL family installations. By default, the PHP-FPM service is designed to be run by (Apache) user, which is incorrect since we are using Nginx, which needs to be corrected.

Firstly, open the following (www.conf) configuration file:

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

Next, replace the (Apache) user and group with the (Nginx) user and group.

Example with username originally Apache:

example change from apache user for php 8.2 on almalinux 9 or almalinux 8

Pin

Example with username change to Nginx:

example changed to nginx user on php 8.2 with almalinux 9 or almalinux 8

Pin

To save, press (CTRL+O) for the nano editor, then exit (CTRL+X).

Now you will, too, reload or restart your PHP-FPM service.

sudo systemctl restart php-fpm

Nginx Configurement

The Nginx server block needs the following example below for Nginx to process the PHP files.

Below is an example for all server blocks that process PHP files that need the location ~ .php$ added.

Example ONLY:

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;

Test Nginx to make sure you have no errors with the adjustments made with the code above; enter the following.

sudo nginx -t

Example output:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Restart the Nginx service for installation to be complete.

sudo systemctl restart nginx

Nginx PHP Sessions Troubleshooting

If you find in your Nginx error logs session errors, most likely root or the apache username is still present on some of the session files. The easiest method to fix these is resetting the permissions back to Nginx.

sudo chown -R nginx:nginx /var/lib/php/

This will fix sessions and OPCache with any other additional modules you have installed.

See also How to Install FileZilla Fedora 37/36/35

Conclusion

This tutorial demonstrates installing PHP 8.2 on AlmaLinux EL 9 or EL 8 using the command line terminal and the Remi RPM Repo so you can install the latest PHP version on your server for your CMS or development.

https://www.computingpost.com/how-to-install-php-8-2-on-almalinux-9-8/?feed_id=24120&_unique_id=63b0185f6a960

--

--

ComputingPost

ComputingPost — Linux Howtos, Tutorials, Guides, News, Tips and Tricks.