web-dev-qa-db-fra.com

Désactiver temporairement OPCache

J'ai récemment déménagé à PHP 5.4 et installé OPCache, c'est très puissant!

Comment puis-je désactiver temporairement le cache?

J'ai essayé :

 ini_set('opcache.enable', 0);

Mais cela n'a aucun effet.

Merci

39
Anthony

Une fois votre script exécuté, il est trop tard pour ne pas mettre le fichier en cache. Vous devez le définir en dehors de PHP:

  • Si PHP fonctionne en tant que module Apache, utilisez un .htaccess fichier:

    php_flag opcache.enable Off
    
  • Si PHP s'exécute en tant que CGI/FastCGI, utilisez un .user.ini fichier:

    opcache.enable=0
    

Et, dans tous les cas, vous pouvez utiliser le bon vieux système php.ini si vous y avez accès.

75
Álvaro González

opcache.enable est PHP_INI_ALL ce qui signifie que ini_set () fait fonctionne, mais seulement Pour la demande actuelle, désactivez la mise en cache OPcache pour le reste des scripts compilés dans votre demande actuelle. (Vous ne pouvez pas forcer l'activation). Il rétablit les valeurs par défaut du système pour les autres demandes. A ce stade, le script de requête aura déjà été mis en cache, à moins que vous ne fassiez l'ini_set dans un script auto_prepend_file .

Les valeurs par défaut du système ( PHP_INI_SYSTEM ) sont verrouillées dans le cadre du PHP démarrage du système et ne peuvent pas être relues. Donc Dans le cas d’Apache, par exemple, vous devez redémarrer Apache pour les changer/recharger.

Les directives .htaccessphp_flag Ne s'appliquent que si vous utilisez mod_php ou son équivalent. Ils et leurs fichiers .user.ini Sont PHP_INI_PERDIR, qui seront également verrouillés lors de l'activation de la demande.

Passons maintenant au Q que je pense que vous pourriez demander. Si vous avez un système de développement, le moyen le plus simple consiste à définir opcache.enable=0 Dans le fichier INI approprié) et à redémarrer votre serveur Web. Réglez-le sur =1, Puis redémarrez-le. à nouveau quand vous avez fini.

Prenez également en compte (dans le contexte de développement) les paramètres opcache.validate_timestamps=on Et opcache.revalidate_freq=0. Ceci maintiendra OPcache activé mais les scripts seront statés à chaque demande de compilation pour voir s'ils sont modifiés. Cela donne le meilleur des deux mondes lors du développement.

Lisez également la directive opcache.blacklist_filename. Cela vous permet de spécifier un fichier d'exclusion. Ainsi, s'il contient /var/www/test Et que le service Web docroot est /var/www, Alors toute les scripts du /var/www/test* les hiérarchies ne seront pas mises en cache.

J'espère que cela t'aides :)

21
TerryE

La meilleure façon que j'ai trouvée dans mon cas pour désactiver opcache dans un fichier spécifique PHP est: opcache_invalidate(__FILE__, true);]

Vous pouvez également réinitialiser tout le cache avec PHP: opcache_reset(); _

1
Jul