Qu’est-ce que le cache d’opcode PHP et pourquoi l’utiliser ?
PHP est un langage interprété : chaque requête HTTP déclenche la compilation du code source en opcode (bytecode). Sans cache, cette compilation est répétée à chaque appel, ce qui consomme du CPU et ralentit les pages. Le cache d’opcode stocke le bytecode compilé en mémoire, évitant la recompilation et accélérant considérablement l’exécution. L’outil le plus répandu est OPcache, intégré à PHP depuis la version 5.5. D’autres solutions comme APCu (Alternative PHP Cache – User Cache) complètent le cache opcode avec un cache utilisateur pour les données.
L’utilisation du cache d’opcode est indispensable pour tout site en production : elle réduit le temps de réponse, diminue la charge serveur et améliore l’expérience utilisateur. Dans cet article, vous apprendrez pas à pas comment l’activer, le configurer et l’optimiser.
Activer OPcache pas à pas
Vérifier la disponibilité d’OPcache
Avant toute chose, vérifiez si OPcache est déjà installé. Créez un fichier phpinfo.php contenant et ouvrez-le dans votre navigateur. Cherchez la section OPcache. Si elle apparaît, le module est présent. Sinon, installez-le via votre gestionnaire de paquets :
- Debian/Ubuntu :
sudo apt install php-opcache - CentOS/RHEL :
sudo yum install php-opcache - Windows : décommentez
extension=php_opcache.dlldansphp.ini
Configuration minimale dans php.ini
Ouvrez votre fichier php.ini et ajoutez ou modifiez ces directives :
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
- opcache.enable : active le cache (1 = oui).
- opcache.memory_consumption : mémoire allouée en Mo (128 est un bon départ pour un site moyen).
- opcache.max_accelerated_files : nombre maximum de fichiers en cache (10 000 convient à la plupart des CMS).
- opcache.revalidate_freq : fréquence (en secondes) de vérification des modifications des fichiers (2 secondes pour le développement, 60+ en production).
Redémarrez votre serveur web (Apache, Nginx, etc.) pour appliquer les changements.
Configurer OPcache pour les environnements de production
En production, privilégiez la stabilité et les performances maximales. Voici une configuration recommandée :
| Directive | Valeur conseillée | Explication |
|---|---|---|
| opcache.enable | 1 | Active le cache |
| opcache.memory_consumption | 256 | 256 Mo suffisent pour un site avec des centaines de fichiers |
| opcache.interned_strings_buffer | 16 | Mémoire pour les chaînes internées (améliore la mémoire partagée) |
| opcache.max_accelerated_files | 20000 | Augmentez si votre projet contient beaucoup de fichiers |
| opcache.revalidate_freq | 60 | Vérifie les mises à jour toutes les 60 secondes |
| opcache.fast_shutdown | 1 | Accélère l’arrêt du processus |
| opcache.validate_timestamps | 0 | Désactive la vérification des timestamps (nécessite vidage manuel après déploiement) |
Attention : Si vous définissez opcache.validate_timestamps=0, le cache ne se rafraîchira pas automatiquement après une mise à jour des fichiers. Vous devrez vider le cache manuellement (par exemple via opcache_reset() dans un script ou un plugin).
Vider le cache d’opcode PHP
Il est parfois nécessaire de vider le cache, notamment après un déploiement. Plusieurs méthodes :
- Via PHP :
opcache_reset();vide tout le cache.opcache_invalidate('fichier.php', true);invalide un fichier spécifique. - Via un plugin CMS : Des plugins comme OPcache Dashboard (WordPress) offrent une interface.
- Via la ligne de commande :
php -r 'opcache_reset();' - Redémarrage du serveur web : méthode radicale mais efficace.
Utiliser APCu pour le cache utilisateur
APCu (Alternative PHP Cache – User Cache) permet de stocker des données utilisateur en mémoire, en complément du cache d’opcode. Il est idéal pour mettre en cache des résultats de requêtes SQL, des configurations, ou des objets sérialisés. Pour l’installer :
sudo apt install php-apcu
Exemple d’utilisation :
// Enregistrer une valeur en cache
apcu_store('ma_cle', $donnees, 3600);
// Lire la valeur
$donnees = apcu_fetch('ma_cle');
if ($donnees === false) {
// Recalculer et stocker
}
APCu n’est pas un cache d’opcode mais un cache mémoire partagé. Il fonctionne main dans la main avec OPcache pour des performances optimales.
Bonnes pratiques et erreurs fréquentes
Erreurs à éviter
- Ne pas ajuster la mémoire : Si la mémoire allouée est trop faible, OPcache va supprimer des fichiers fréquemment, réduisant l’efficacité. Surveillez les statistiques avec
opcache_get_status(). - Laisser validate_timestamps=1 en production : Cela force une vérification à chaque requête (selon revalidate_freq), ce qui impacte les performances. Préférez un vidage manuel après déploiement.
- Ignorer le cache utilisateur : Combiner OPcache et APCu peut réduire la charge base de données.
- Oublier de vider le cache après une mise à jour : Les anciens fichiers en cache peuvent causer des erreurs.
Liste de vérification pour une configuration optimale
- Activez OPcache dans php.ini.
- Allouez suffisamment de mémoire (256 Mo ou plus).
- Réglez
max_accelerated_filesen fonction du nombre de fichiers de votre projet. - En production, désactivez
validate_timestampsou augmentezrevalidate_freqà 300 secondes. - Installez APCu si vous avez besoin d’un cache utilisateur.
- Surveillez les statistiques OPcache via un script ou un outil.
- Automatisez le vidage du cache après chaque déploiement.
Comment utiliser le cache d’opcode PHP avec un CMS comme WordPress
WordPress bénéficie grandement du cache d’opcode. Activez simplement OPcache au niveau serveur. Des plugins comme OPcache Dashboard vous permettent de visualiser l’état du cache et de le vider depuis l’admin. Pour un site à fort trafic, combinez OPcache avec un cache de page (comme WP Rocket ou W3 Total Cache) et un cache objet (Redis ou Memcached).
Surveiller les performances du cache d’opcode
Utilisez la fonction opcache_get_status() pour obtenir des statistiques : mémoire utilisée, hits, misses, fichiers en cache. Exemple de script simple :
$status = opcache_get_status();
if ($status) {
echo 'Mémoire utilisée : ' . $status['memory_usage']['used_memory'] . ' bytes';
echo 'Hits : ' . $status['opcache_statistics']['hits'];
echo 'Misses : ' . $status['opcache_statistics']['misses'];
}
Un ratio hits/misses élevé indique un cache efficace. Si le nombre de misses est important, augmentez la mémoire ou le nombre de fichiers.
Notre recommandation pour bien démarrer
Pour tirer le meilleur parti du cache d’opcode PHP :
- Activez OPcache immédiatement si ce n’est pas déjà fait.
- Utilisez la configuration de production ci-dessus.
- Mettez en place un script de vidage automatique après chaque déploiement.
- Surveillez régulièrement les statistiques.
- Complétez avec APCu ou un cache objet pour les données applicatives.
Le cache d’opcode est l’un des leviers les plus simples et les plus efficaces pour accélérer un site PHP. En quelques minutes, vous pouvez réduire le temps de réponse de 30 à 50 %. N’attendez plus pour l’utiliser !
Photo by AXP Photography on Pexels

12 Comments
J’ai suivi vos instructions pour activer OPcache, mais après redémarrage d’Apache, la section OPcache n’apparaît pas dans phpinfo. Une idée ?
Plusieurs causes possibles : le module n’est pas bien installé (vérifiez avec php -m | grep opcache), ou le fichier php.ini modifié n’est pas celui utilisé par Apache. Assurez-vous d’éditer le bon php.ini (généralement /etc/php/7.4/apache2/php.ini sur Debian). Redémarrez Apache complètement (pas seulement reload).
Merci pour cet article très clair. J’ai activé OPcache sur mon site WordPress, mais je ne sais pas trop quelle valeur donner à opcache.memory_consumption. Mon site a environ 300 fichiers PHP, est-ce que 128 Mo suffisent ?
Bonjour, 128 Mo est un bon point de départ pour un site WordPress standard. Vous pouvez surveiller l’utilisation via opcache_get_status() et augmenter si nécessaire. Pour 300 fichiers, 128 Mo devrait être largement suffisant.
Petite précision : APCu n’est pas un cache d’opcode mais un cache utilisateur. Il peut être utilisé en complément d’OPcache pour stocker des données. Merci pour l’article !
Tout à fait, merci pour cette précision. APCu est effectivement destiné au cache utilisateur (données) et non au cache opcode. Nous avons mentionné APCu comme complément, mais c’est important de clarifier. Bonne continuation !
Dans la configuration de production, vous recommandez opcache.validate_timestamps = 0. Mais comment faire pour que les modifications de fichiers soient prises en compte sans redémarrer le serveur ?
Excellente question. Avec validate_timestamps=0, vous devez vider le cache manuellement après un déploiement, par exemple via opcache_reset() ou en redémarrant PHP-FPM. C’est un compromis pour éviter les vérifications coûteuses à chaque requête.
Je suis sur un hébergement mutualisé OVH, je n’ai pas accès au php.ini. Est-ce que je peux quand même utiliser OPcache ?
Sur certains hébergements mutualisés, OPcache est déjà activé par défaut. Vérifiez via un phpinfo(). Si ce n’est pas le cas, vous pouvez contacter le support pour demander l’activation. Sinon, envisagez un hébergement avec plus de contrôle.
Très bon article, je partage ! Une question : que signifie exactement ‘interned_strings_buffer’ et comment choisir la bonne valeur ?
Merci ! interned_strings_buffer stocke les chaînes de caractères partagées entre les fichiers (comme les noms de classes). La valeur par défaut de 8 Mo est souvent suffisante. Pour un gros projet, 16 Mo est un bon choix. Vous pouvez surveiller l’utilisation avec opcache_get_status() pour ajuster.