2011-04-01 5 views
5

Apc ne met pas en cache les fichiers, il ne met en cache que les données utilisateur. Quand j'ai testé sur localhost, APC a mis en cache tous les fichiers que j'ai utilisés. Mais cela ne fonctionne pas sur mon hébergement partagé. Est-ce un problème de configuration?APC ne met pas en cache les fichiers, mais met en cache les données utilisateur

Ce sont les stats de mon apc.php (APC 3.0.19): apc.php stats

Sur l'image ci-dessus, APC n'utilise pas de mémoire. Ce est ce que phpinfo() me donne: phpinfo() output

Sur localhost, je ne http://localhost/test.php accéder. Apc mettra en cache localhost/test.php (fichier de type) immédiatement. mais sur l'hôte partagé, je ne vois pas le fichier cache (il peut mettre en cache la variable, si je stocke mais pas avec le fichier);

apc_add('APC TEST', '123'); 
    echo apc_fetch('APC TEST'); //-- it work with this code 

Je veux Apc cache test.php si j'accède à test.php.

Existe-t-il un configure make APC ne peut pas mettre en cache le type de fichier ou la limite d'hébergement partagé ?.

+0

SourceGuardian? http://stackoverflow.com/questions/7337859/apc-file-cache-not-working-but-user-cache-is-fine/7348937#7348937 –

Répondre

25

En réponse à votre commentaire "Apc est activé, et apc.cache_by_default = 1; installation php avec CGI, j'ai vérifié phpinfo();": C'est le problème. Si vous exécutez PHP sur CGI, un nouveau processus PHP est créé à chaque chargement de page. Comme APC est lié au processus PHP, il est nouvellement instancié sur chaque accès à la page. Donc, évidemment, il n'y a pas de données. Votre exemple de cache utilisateur ne fonctionne que parce que vous stockez et récupérez la variable sur un chargement de page unique. Donc: APC ne peut pas travailler avec PHP sur CGI. Utilisez FastCGI (qui maintient les processus actifs, rendant ainsi le cache fonctionnel et généralement plus rapide).

+0

+1 pour la description claire de la différence entre le processus de génération de CGI et le mode FastCGI –

0

Si votre hébergement est configuré avec php en mode fastcgi, APC peut ne pas fonctionner. pouvez-vous vérifier cela avec une page phpinfo() standard? edit: Je me tiens corrigé, la réponse choisie est juste. J'ai confondu CGI/fastcgi. Oui, CGI ne fonctionnera pas. Mais je tiens à noter que même fastcgi n'est pas génial avec la mise en cache des opcode.

+0

Aussi, vérifiez 'phpinfo' pour savoir si la mise en cache est désactivé, re: [apc.cache_by_default = false] (http://www.php.net/manual/en/apc.configuration.php#ini.apc.cache-by-default) –

+0

Apc est activé, et apc. cache_by_default = 1; configuration php avec CGI, j'ai vérifié phpinfo(); – meotimdihia

0

APC en mode CGI sur un hébergement partagé n'est généralement pas réalisable, bien que cela soit possible. Selon votre application, cela peut également représenter un risque pour la sécurité. Comme nikic l'a dit, vous devriez être capable de le faire fonctionner avec FastCGI, mais même ce n'est pas facile en fonction de votre hôte. Voici un compte rendu détaillé de quelqu'un qui l'a fait fonctionner. Il peut vous donner un peu d'aide à essayer de le faire fonctionner en mode CGI

FastCGI with a PHP APC Opcode Cache

+0

En soi, il n'y a absolument aucun problème pour exécuter php avec apc sur fcgi. Je l'ai fait sur lighty et je le fais sur nginx. Le problème est qu'il est sur l'hébergement partagé, donc n'a probablement pas autant de possibilités de changer les configurations;) – NikiC

Questions connexes