2011-04-01 51 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