web-dev-qa-db-fra.com

Zend OPCache - opcache.enable_cli 1 ou 0? Qu'est ce que ça fait?

Dans la documentation, il est dit "principalement utilisé pour le débogage", ce qui m'amènerait à penser "ne l'activez jamais sauf si vous avez un problème et avez besoin de faire un débogage", mais lire principalement tout ce que je pourrais trouver à ce sujet dit de l'activer "opcache .enable_cli 1 "mais pourquoi? Je n'ai pu trouver aucune information à ce sujet, donc si quelqu'un le sait, pourquoi devrais-je l'activer si la documentation dit essentiellement de le garder sur 0?

28
Jack

Laissez-le. Il est principalement destiné à être utilisé lors du débogage de problèmes avec OPcache lui-même.

Le opcache.enable_cli l'option active PHP OPcache lors de l'exécution de PHP à partir de la ligne de commande (à l'aide de la commande php). Cependant, gardez à l'esprit que pour PHP 5.x l'extension OPcache fonctionne en stockant les opcodes mis en cache dans la mémoire du processus en cours. Ceci n'est utile que lorsque le processus en cours d'exécution PHP va gérer plusieurs requêtes qui peuvent réutiliser ces opcodes, comme dans un serveur Web ou sous FastCGI. Pour un processus comme le PHP CLI, qui exécute une "requête" "et sort, il ne fait que perdre de la mémoire et du temps.

31
duskwuff

Avec PHP7 et la mise en cache basée sur des fichiers, il peut désormais être judicieux d'activer opcache pour CLI. La meilleure possibilité serait d'avoir un php.ini séparé pour CLI avec la configuration suivante:

opcache.enable=1
opcache.enable_cli=1
opcache.file_cache="/tmp/php-file-cache"
opcache.file_cache_only=1
opcache.file_cache_consistency_checks=1

opcache.file_cache_only=1 S'assure que l'opcache en mémoire est désactivé et que seuls les fichiers sont utilisés, ce que vous voulez pour CLI. Cela devrait augmenter considérablement le temps d'exécution.

Dans le php.ini pour FPM, vous voudrez avoir les mêmes paramètres mais utilisez opcache.file_cache_only=0, Donc l'opcache en mémoire est utilisé et le cache de fichiers est utilisé comme solution de secours (ce qui rend également FPM plus rapide, car le le cache de fichiers réduit le temps de préchauffage lorsque FPM est redémarré ou opcache est réinitialisé, car les fichiers mis en cache restent).

De cette façon, CLI et FPM partagent le cache de fichiers et FPM a le cache en mémoire comme deuxième cache principal pour une vitesse maximale. Une grande amélioration en PHP7! Assurez-vous simplement de choisir un répertoire pour opcache.file_cache Sur lequel CLI et FPM peuvent écrire, et que le même utilisateur fait l'écriture/lecture.

MISE À JOUR 2017

Je ne recommanderais plus d'utiliser le cache de fichiers avec FPM (utilisez-le uniquement pour CLI), car il n'y a aucun moyen de réinitialiser le cache lors de la configuration de opcache.validate_timestamps=0 - le cache de fichiers empêche PHP-FPM de reconnaître les modifications, car opcache_reset() ou même un redémarrage complet de PHP-FPM n'affecte pas le cache de fichiers et il n'y a pas d'équivalent pour le cache de fichiers, donc les scripts modifiés ne sont jamais remarqués. J'ai signalé cela en tant que " bug "/" demande de fonctionnalité " en mars 2016, mais cela n'est actuellement pas considéré comme un problème. Attention, si vous utilisez opcache.validate_timestamps=0!

29
iquito

Selon documentation PHP :

opcache.enable_cli boolean active le cache d'opcode pour la version CLI de PHP. Ceci est surtout utile pour tester et déboguer.

Par conséquent, il doit être désactivé, sauf si vous en avez vraiment besoin.

Cela peut être utile lorsque vous avez un processus de migration à long terme exécuté à partir de la ligne de commande (personnellement, j'ai testé OPcache v7.0.3 pour CLI en exécutant un script de migration complet et je n'ai pas vu beaucoup d'amélioration des performances).

2
kenorb