2009-10-26 41 views
7

如何在APC操作碼緩存中使用apc.filters參數來緩存某些路徑?例如,我想緩存是活躍的路徑下的任何東西:apc.filters by path?

「/無功/網絡/虛擬主機」

,並排除像

路徑 「在/ usr /共享/ PSA-部落/」

我嘗試使用

apc.cache_by_default = 0 
apc.filters = "+/var/www/vhosts" 

apc.cache_by_default = 1 
apc.filters = "-/usr/share/psa-horde/" 

但都沒有按預期工作。

http://www.php.net/manual/en/apc.configuration.php#ini.apc.filters

應該過濾更多的東西,如 「+ /無功/網絡/虛擬主機/ *」(注意通配符)?這恐怕是因爲這樣的過濾器的工作原理不可能的:

注意,用於 匹配文件名是一個傳遞給 包括/需要,而不是絕對 路徑。

任何想法或示例配置?

回答

6

該過濾器應該是逗號分隔的POSIX擴展正則表達式列表。我相信你在第二次嘗試中只匹配確切路徑/ usr/share/psa-horde /,而不是/ usr/share/psa-horde/something或/usr/share/psa-horde/anotherfile.php

下,應在子文件夾

apc.filters = "-/usr/share/psa-horde/.*" 
+0

嗯,良好的通話,但我想,如果在需要語句的使用方法的完整路徑它僅適用於文件名:「請注意,用於匹配文件名是一個通過包括/要求,而不是絕對路徑。「 – typeoneerror 2009-10-27 03:51:00

+0

例如試過「 -/var/www/vhosts/myhostname.com/svn/public/openx /.*」,這個目錄中的文件仍然被緩存。 – typeoneerror 2009-10-27 03:51:34

+0

「請注意,用於匹配的文件名是傳遞給include/require的文件名,而不是絕對路徑。」 - 從docs – livelygreen 2011-11-22 16:21:07

5

非常晚的響應匹配任何東西,但以防萬一別人是有這個問題(我要去猜你可能會/已經運行的Plesk盒子,這就是爲什麼我碰到這個)。

最好的辦法是讓APC在加載的php模塊列表中,但在主php.ini中有 apc.enabled 0。然後,對於要啓用的每個虛擬主機,請添加php_admin_value apc.enabled 1以啓用每個虛擬主機。如果您有大量網站,可能會成爲問題,但只適用於少數幾個網站。

0

由於apc.filters使用正則表達式的作品,通配符路徑應被指定爲 apc.filters = 「 - 在/ usr /共享/ PSA-部落/.*」 如果你有不同的

2

pnomolos'解決方案的工作虛擬主機,但如果你只有一個虛擬主機並且想要在真正的每個目錄上控制緩存,它將不起作用。

這個bug報告指出,最好的解決方案:https://bugs.php.net/bug.php?id=57064

啓用APC和php.ini設置apc.cache_by_default0。在您的Apache配置中,您可以在Directory區塊內使用php_admin_setting apc.cache_by_default 1以準確地在您需要的位置啓用APC緩存。

0

使用:

apc.filters="-/eliminate/path1/,-/eliminate/path2/,+/add/to/cache/"