Installer PHP OPcache sur Rocky/Alma/CentOS 9|8
L'OPcache est conçu pour améliorer les performances de PHP en stockant le bytecode des scripts précompilés dans la mémoire partagée. En mettant en cache les scripts PHP en mémoire, il supprime le besoin pour PHP de charger et d'analyser les scripts à chaque requête reçue. Lorsqu'on héberge des sites web ou des applications web développés en PHP, l'utilisation d'OPcache améliorera considérablement la réactivité et les temps de chargement en général.
Voici comment fonctionne PHP OPcache :
- Compilation de script : OPcache compile un script demandé en bytecode.
- Mise en cache du bytecode : Une fois compilé, le bytecode est stocké dans la mémoire partagée pour un accès plus rapide.
- Exécution des requêtes suivantes : La prochaine fois qu’une requête est reçue pour le même script, le bytecode mis en cache est utilisé, contournant ainsi l’étape de compilation et permettant une exécution plus rapide.
En résumé, en utilisant OPcache, vous bénéficierez d'une exécution plus rapide des scripts PHP, d'une empreinte réduite sur le processeur et la mémoire, et d'une meilleure évolutivité du système puisqu'il peut gérer davantage de requêtes simultanées.
Comment pouvez-vous alors installer et configurer PHP OPcache sur les systèmes Linux Rocky Linux/AlmaLinux et CentOS Stream 9|8. Suivez ce guide pour savoir comment faire.
Passer à l'édition PHP de REMI
Nous ne pouvons activer OPcache que sur un système avec PHP installé. Les systèmes mentionnés distribuent plusieurs versions de PHP dans les dépôts AppStream. Mais Opcache est fourni dans les dépôts REMI.
Pour vérifier si PHP est installé, exécutez la commande :
$ php --version
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend TechnologiesD'après mon système, nous pouvons confirmer que la version est 8.2. Nous pouvons donc réinitialiser le module PHP.
sudo dnf module reset php -yEnsuite, nous installons le dépôt RPM de Remi :
- Enterprise Linux 9 – (Rocky/Alma/CentoS Stream 9)
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm- Enterprise Linux 8 – (Rocky/Alma/CentoS Stream 8)
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpmL'installateur configurera automatiquement le dépôt EPEL comme dépendance. Pour vérifier que REMI fonctionne, exécutez :
$ sudo dnf -y repolist
repo id repo name
appstream Rocky Linux 8 - AppStream
baseos Rocky Linux 8 - BaseOS
epel Extra Packages for Enterprise Linux 8 - x86_64
extras Rocky Linux 8 - Extras
remi-modular Remi's Modular repository for Enterprise Linux 8 - x86_64
remi-safe Safe Remi's RPM repository for Enterprise Linux 8 - x86_64Tous les modules PHP peuvent être vérifiés en exécutant la commande suivante :
dnf module list phpVoici le résultat d'exemple :
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d][x] common [d], devel, minimal PHP scripting language
php 7.3 [x] common [d], devel, minimal PHP scripting language
php 7.4 [x] common [d], devel, minimal PHP scripting language
php 8.0 [x] common [d], devel, minimal PHP scripting language
php 8.2 [x] common [d], devel, minimal PHP scripting language
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 [x] common [d], devel, minimal PHP scripting language
php remi-7.3 [x] common [d], devel, minimal PHP scripting language
php remi-7.4 [x] common [d], devel, minimal PHP scripting language
php remi-8.0 [x] common [d], devel, minimal PHP scripting language
php remi-8.1 [x] common [d], devel, minimal PHP scripting language
php remi-8.2 [x] common [d], devel, minimal PHP scripting language
php remi-8.3 [x] common [d], devel, minimal PHP scripting language
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalledMaintenant, activez le module PHP spécifique de REMI. D'après la sortie précédente, la version de PHP installée était 8.2, ce qui signifie que nous devrions activer le module php:remi-8.2.
sudo dnf module install php:remi-8.2 -yDans la plupart des cas, il mettra à jour votre version de PHP installée et ne désinstallera pas les paquets.
Dependencies resolved.
==============================================================================================================================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================================================================================================================
Upgrading:
php-cli x86_64 8.2.21-1.el8.remi remi-modular 5.5 M
php-common x86_64 8.2.21-1.el8.remi remi-modular 1.3 M
php-fpm x86_64 8.2.21-1.el8.remi remi-modular 1.9 M
php-mbstring x86_64 8.2.21-1.el8.remi remi-modular 583 k
php-xml x86_64 8.2.21-1.el8.remi remi-modular 264 k
Installing dependencies:
oniguruma5php x86_64 6.9.9-1.el8.remi remi-safe 213 k
Installing module profiles:
php/common
Enabling module streams:
php remi-8.2
Transaction Summary
==============================================================================================================================================================================================================================
Install 1 Package
Upgrade 5 Packages
Total download size: 9.7 M
Is this ok [y/N]: yInstallation de PHP OPcache
Avec le dépôt RPM de REMI configuré, nous pouvons rechercher les versions disponibles d'OPcache.
$ sudo dnf search opcache
Last metadata expiration check: 0:07:55 ago on Sun 28 Jul 2024 10:12:13 PM UTC.
============================================================================================== Name & Summary Matched: opcache ===============================================================================================
php-opcache.x86_64 : The Zend OPcache
php56-php-opcache.x86_64 : The Zend OPcache
php70-php-opcache.x86_64 : The Zend OPcache
php71-php-opcache.x86_64 : The Zend OPcache
php72-php-opcache.x86_64 : The Zend OPcache
php73-php-opcache.x86_64 : The Zend OPcache
php74-php-opcache.x86_64 : The Zend OPcache
php80-php-opcache.x86_64 : The Zend OPcache
php81-php-opcache.x86_64 : The Zend OPcache
php82-php-opcache.x86_64 : The Zend OPcache
php83-php-opcache.x86_64 : The Zend OPcache
php84-php-opcache.x86_64 : The Zend OPcache
Dans cet exemple, nous installons php82-php-opcache, qui est spécifique à la version 8.2 de PHP. Changez pour une version adaptée à votre installation PHP.
sudo dnf install php82-php-opcacheDes informations supplémentaires sur le paquet installé peuvent être consultées en utilisant les commandes rpm -qi :
$ rpm -qi php82-php-opcache
Name : php82-php-opcache
Version : 8.2.21
Release : 1.el8.remi
Architecture: x86_64
Install Date: Sun 28 Jul 2024 10:21:52 PM UTC
Group : Unspecified
Size : 1024035
License : PHP-3.01
Signature : RSA/SHA256, Tue 02 Jul 2024 02:07:23 PM UTC, Key ID 555097595f11735a
Source RPM : php82-php-8.2.21-1.el8.remi.src.rpm
Build Date : Tue 02 Jul 2024 01:33:41 PM UTC
Build Host : builder.remirepo.net
Relocations : (not relocatable)
Packager : Remi Collet
Vendor : Remi's RPM repository <https://rpms.remirepo.net/> #StandWithUkraine
URL : http://www.php.net/
Bug URL : https://forum.remirepo.net/
Summary : The Zend OPcache
...Configurer PHP OPcache
Utilisez la commande find pour localiser le chemin du module OPcache.
$ sudo find / -name opcache.so
/usr/lib64/php/modules/opcache.so
/usr/lib64/php-zts/modules/opcache.soLe module devrait se charger automatiquement lors de l'installation.
$ php -m | grep -i opcache
Zend OPcache
Zend OPcacheL'installateur créera également un modèle de configuration dans /etc/php.d, que vous pourrez personnaliser.
$ ls /etc/php.d/|grep opcache
10-opcache.ini
opcache-default.blacklistOuvrez le fichier pour le modifier.
sudo vi /etc/php.d/10-opcache.iniDans notre serveur, nous utilisons les paramètres suivants pour offrir de bonnes performances :
; Enable Zend OPcache extension module
zend_extension=opcache
; Determines if Zend OPCache is enabled
opcache.enable=1
; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1
; The OPcache shared memory storage size (in MB)
opcache.memory_consumption=512
; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=128
; The maximum number of keys (scripts) in the OPcache hash table.
opcache.max_accelerated_files=10000
; The maximum percentage of "wasted" memory until a restart is scheduled.
opcache.max_wasted_percentage=5
; Enable timestamp validation, ensuring that cached files are up to date.
opcache.validate_timestamps=1
; Checks for script changes every 2 seconds.
opcache.revalidate_freq=2
; Path where OPcache can store file cache.
opcache.file_cache=/tmp
; Enables or disables opcode caching in shared memory.
opcache.file_cache_only=0
; Enables or disables checksum validation when script loaded from file cache.
opcache.file_cache_consistency_checks=1
; Other performance settings
opcache.fast_shutdown=1
opcache.enable_file_override=1
opcache.optimization_level=0x7FFFBFFFReportez-vous à la documentation officielle d'OPcache pour une liste complète des options que vous pouvez configurer et personnaliser.
Tester si OPcache fonctionne
Redémarrez vos services de serveur web et php-fpm.
- Serveur web Nginx
sudo systemctl restart php-fpm nginx- Serveur web Apache httpd
sudo systemctl restart php-fpm httpdLa liste des configurations d'exécution d'OPcache peut être obtenue en exécutant les commandes ci-dessous :
php -i | grep opcache
Créez un script PHP exemple pour tester si OPcache fonctionne dans notre système.
- Serveur web Nginx
sudo vi /usr/share/nginx/html/opcache.php- Serveur web Apache httpd
sudo vi /var/www/html/opcache.phpAjoutez le contenu dans le fichier.
<?php
if (function_exists('opcache_get_status')) {
$status = opcache_get_status();
if ($status) {
echo "OPcache is enabled on the server.";
} else {
echo "OPcache is disabled on the server..";
}
} else {
echo "OPcache is not installed.";
}
?>Enregistrez et ouvrez le fichier depuis http://serverIP_or_fqdn/opcache.php
Cela confirme que PHP OPcache fonctionne correctement sur notre système. Nous espérons que cet article vous a été utile et vous souhaitons des temps de chargement de site web plus rapides !

