171 votes

Comment effacer les entrées du cache APC ?

J’ai besoin d’effacer toutes les entrées du cache APC lorsque j’ai déployer une nouvelle version du site. APC.php dispose d’un bouton pour effacer tous les caches opcode, mais je ne vois pas les boutons pour effacer toutes les entrées de l’utilisateur, ou toutes les entrées du système ou toutes les entrées de répertoire.

Est-il possible d’effacer toutes les entrées du cache via la ligne de commande, ou une autre manière ?

146voto

Travis Beale Points 2338

Vous pouvez utiliser la fonction PHP `` .

Appel efface le cache du système et en appelant efface le cache de l’utilisateur.

117voto

jeremy Points 6308

Je ne crois pas qu'aucun de ces réponses de travail pour effacer le cache APC à partir de la ligne de commande. Comme Frank Farmer , a commenté ci-dessus, la CLI s'exécute dans un processus distinct de Apache.

Ma solution pour la compensation de la ligne de commande a été d'écrire un script qui copie un APC de compensation script à l' web répertoire et accède et puis le supprime. Le script est limité à être accessible à partir de l'hôte local.

  1. apc_clear.php

    C'est le dossier que le script copie vers le répertoire web, les accès, et les supprime.

    <?php
    if (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
    {
      apc_clear_cache();
      apc_clear_cache('user');
      apc_clear_cache('opcode');
      echo json_encode(array('success' => true));
    }
    else
    {
      die('SUPER TOP SECRET');
    }
    
  2. Supprimer le Cache de script

    Ce script copie apc_clear.php pour le répertoire web, les accès, puis le supprime. C'est basé sur Symfony tâche. Dans la version de Symfony, les appels sont effectués à l'Symfony forme de copie et de délier, de gérer les erreurs. Vous pouvez ajouter des contrôles qu'ils réussissent.

    copy($apcPaths['data'], $apcPaths['web']); //'data' is a non web accessable directory
    
    $url = 'http://localhost/apc_clear.php'; //use domain name as necessary
    $result = json_decode(file_get_contents($url));
    
    if (isset($result['success']) && $result['success'])
    {
      //handle success
    }
    else
    {
      //handle failure
    }
    
    unlink($apcPaths['web']);
    

68voto

Tadas Sasnauskas Points 949

Je sais que ce n’est pas pour tout le monde mais : pourquoi ne pas faire un redémarrage d’Apache gracieux ?

Pour par exemple en cas de Centos/RedHat Linux :

Ubuntu :

27voto

ColinM Points 2701

Ce n'est pas indiqué dans la documentation, mais pour effacer le cache d'opcode vous devez faire:

apc_clear_cache('opcode');

EDIT: Cela semble être la seule à s'appliquer à certaines versions plus anciennes de l'APC..

Quelle que soit la version que vous utilisez, vous ne pouvez pas clair mod_php ou fastcgi cache APC à partir d'un cli php script depuis la cli script sera exécuté à partir d'un autre processus de mod_php ou fastcgi. Vous devez appeler apc_clear_cache() dans le processus (ou processus enfant) dont vous souhaitez effacer le cache. Utilisation de curl pour l'exécution d'un simple script php est une telle approche.

11voto

passion4code Points 71

Si vous utilisez une pile NGINX / PHP-FPM, le mieux est probablement de recharger php-fpm

service php-fpm reload (ou quelle que soit votre commande de rechargement sur votre système)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X