sinphp RPM repository

PHP built from the php.net release tarballs, for EL 8, 9 and 10 (AlmaLinux, Rocky, RHEL), x86_64. Packages and repository metadata are GPG-signed. Each PHP series is its own package under its own prefix, so several can be installed side by side.

PackagePrefixFPM service, portSecurity fixes until
php82/opt/php82php82-fpm, 908231 Dec 2026
php83/opt/php83php83-fpm, 908331 Dec 2027
php85/opt/php85php85-fpm, 908531 Dec 2029

Always the latest patch release of each series. Built in: bz2, calendar, curl, exif, ftp, gd (jpeg, png, webp, avif, freetype), gettext, gmp, intl, mbstring, mysqli, pdo_mysql, pdo_sqlite, sqlite3, opcache, openssl, pcntl, readline, shmop, sockets, sodium, sysvmsg/sysvsem/sysvshm, xsl, zip, zlib, argon2 password hashing, plus the PHP defaults.

PECL extensions, each a separate package: phpXY-apcu, phpXY-igbinary, phpXY-msgpack, phpXY-memcached (with session, igbinary, msgpack and json support), phpXY-imagick, phpXY-redis.

Install

As root. The repository needs EPEL (for libsodium, libargon2 and libavif).

dnf install -y epel-release
curl -fsSLo /etc/yum.repos.d/sinphp.repo https://rpm.metalgearsonic.de/sinphp.repo
dnf install -y php85
# optional PECL extensions:
dnf install -y php85-apcu php85-igbinary php85-msgpack php85-memcached php85-imagick php85-redis

On EL 9, phpXY-memcached also needs the CRB repository (libmemcached is only there): dnf config-manager --set-enabled crb

On RHEL itself, epel-release is not in the base repos; install it with dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E %rhel).noarch.rpm.

dnf asks to import the signing key on first install. Only accept it if the fingerprint is:

7139 10F6 D1D6 E1F3 7EBC C080 CC2E 821E 1407 DC1A

Start PHP-FPM

systemctl enable --now php85-fpm

The www pool listens on 127.0.0.1:9085 (backlog 65535) and runs as nobody; adjust /opt/php85/etc/php-fpm.d/www.conf for your web server, or set up a site pool from pool.conf.example:

cd /opt/php85/etc/php-fpm.d
cp pool.conf.example site.conf     # then set user/group, port, pm sizing
systemctl reload php85-fpm

Update and roll back

dnf upgrade 'php85*'      # new releases, restarts php85-fpm
dnf downgrade php85     # back one release (the last 3 are kept)

Where things are

CLI/opt/php85/bin/php
FPM/opt/php85/sbin/php-fpm, service php85-fpm
php.ini/opt/php85/etc/php.ini (production defaults)
Extra ini/opt/php85/etc/conf.d/*.ini
Fleet tuning/opt/php85/etc/conf.d/90-fleet.ini (live's limits, opcache, APCu)
Per-server ini/opt/php85/etc/conf.d/99-local.ini (start from 99-local.ini.example)
FPM config/opt/php85/etc/php-fpm.conf, /opt/php85/etc/php-fpm.d/
Example pool/opt/php85/etc/php-fpm.d/pool.conf.example (modelled on live's pool)
Sessions/var/opt/php85/session
Kernel/usr/lib/sysctl.d/60-php85-fpm.conf (net.core.somaxconn = 65535)
FPM log/var/opt/php85/log/php-fpm.log
phpize/opt/php85/bin/phpize, /opt/php85/bin/php-config

Nothing is put on PATH, so it never clashes with the distro's php. To get a php85 command:

ln -s /opt/php85/bin/php /usr/local/bin/php85

Debug symbols and sources

dnf --enablerepo=sinphp-debuginfo install php85-debuginfo php85-debugsource
dnf --enablerepo=sinphp-source download --source php85

Files

sinphp.repo · RPM-GPG-KEY-sinphp