2011-04-01 50 views
5

Apc不缓存文件,它只缓存用户数据。当我在本地主机上测试时,APC缓存了我使用的所有文件。但它不适用于我的共享主机。这是一个配置问题?APC不缓存文件,但缓存用户数据

这些都是从我的apc.php(APC 3.0.19)的统计数据: apc.php stats

在上面的图片,APC不使用任何内存。 这是phpinfo()函数给了我: phpinfo() output

在本地主机上,我只能访问http://localhost/test.php。 Apc会立即缓存localhost/test.php(类型文件)。但在共享主机上,我没有看到它的缓存文件(它可以缓存变量,如果我存储但不包含文件);

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

我想apc缓存test.php如果我访问test.php。

有没有配置让APC无法缓存文件类型或共享主机的限制?

+0

SourceGuardian工作有所帮助? http://stackoverflow.com/questions/7337859/apc-file-cache-not-working-but-user-cache-is-fine/7348937#7348937 – 2013-04-10 15:57:19

回答

25

回应您的评论“Apc已启用,并且apc.cache_by_default = 1;使用CGI设置php,我检查了phpinfo();”:这就是问题所在。如果您通过CGI运行PHP,则每次页面加载时都会创建一个新的PHP进程。由于APC绑定到PHP进程,它也会在每次页面访问时新实例化。所以它显然没有任何数据。您的用户缓存示例仅适用,因为您在单页加载中存储和获取变量。

因此:APC 不能与CGI一起使用PHP。使用FastCGI(保持进程活着,从而使缓存工作,并且通常更快)。

+0

+1为清楚描述CGI和FastCGI模式的进程产卵之间的区别 – 2011-04-06 18:17:49

0

如果您的主机在fastcgi模式下使用php进行安装,APC可能无法正常工作。你可以使用标准的phpinfo()页面来检查吗? 编辑:我站在纠正,选择的答案是正确的。我迷惑CGI/fastcgi。是啊CGI不会工作。但我想指出的是,即使fastcgi对于操作码缓存来说也不是那么棒。

+0

此外,检查'phpinfo'缓存是否禁用,回复:[apc.cache_by_default = false](http://www.php.net/manual/en/apc.configuration.php#ini.apc.cache-by-default) – 2011-04-01 06:54:32

+0

Apc已启用,并且apc。 cache_by_default = 1; php设置与CGI,我检查phpinfo(); – meotimdihia 2011-04-01 07:00:56

0

共享主机上的CGI模式下的APC通常不可行,尽管它可能是可行的。根据您的应用程序,这可能也是一个安全风险。正如nikic说你应该能够使用FastCGI工作,但即使这样也不容易,这取决于你的主机。这里有一个让它工作的人的详细说明。它可以让你在试图让它在CGI模式

FastCGI with a PHP APC Opcode Cache

+0

本身绝对没有问题,通过apc over fcgi运行php。我在lighty上做了这个,我在nginx上做了。问题在于他在共享主机上,因此可能没有更改配置的可能性;) – NikiC 2011-04-05 16:28:58