Вопрос

Как мне использовать параметр apc.filters в кэшировании кода операции APC, чтобы не кэшировать определенные пути?Например, я хочу, чтобы кеширование было активным для всего, что находится по пути:

"/var/www/vhosts"

и исключить такие пути, как

"/usr/share/psa-horde/"

Я попробовал использовать

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

Должен ли фильтр быть чем-то вроде «+/var/www/vhosts/*» (обратите внимание на подстановочный знак)?Боюсь, это невозможно из-за особенностей работы фильтров:

Обратите внимание, что имя файла, используемое для соответствие - это тот, который передан включают/требуют, а не абсолютные путь.

Есть идеи или примеры конфигураций?

Это было полезно?

Решение

Фильтр должен представлять собой список расширенных регулярных выражений POSIX, разделенных запятыми.Я считаю, что то, что у вас есть во второй попытке, соответствует только точному пути /usr/share/psa-horde/, а не /usr/share/psa-horde/something или /usr/share/psa-horde/anotherfile.php.

Следующее должно соответствовать чему-либо в подпапке

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

Другие советы

Очень поздний ответ, но на всякий случай, если у кого-то еще возникла эта проблема (я предполагаю, что вы, возможно, используете или использовали Plesk, поэтому я и столкнулся с этим).

Лучше всего иметь APC в списке загруженных модулей PHP, но иметьapc.enabled 0 в основном php.ini.Затем для каждого виртуального хоста, для которого вы хотите включить его, добавьте php_admin_value apc.enabled 1 включить для каждого.Это может быть проблемой, если у вас много сайтов, но работает только для некоторых.

Решение pnomolos работает, если у вас есть разные виртуальные хосты, но оно не будет работать, если у вас только один и вы хотите управлять кешированием действительно для каждого каталога.

Этот отчет об ошибке указывает на лучшее решение: https://bugs.php.net/bug.php?id=57064

Включите APC и установите apc.cache_by_default к 0 в php.ini.В вашей конфигурации Apache вы можете использовать php_admin_setting apc.cache_by_default 1 внутри Directory блок, чтобы включить кэширование APC именно там, где вам это нужно.

Поскольку apc.filters работает с регулярными выражениями, путь к подстановочной карте должен быть указан как apc.filters = "-/usr/share/psa-horde/.*"

Использовал:

apc.filters="-/eliminate/path1/,-/eliminate/path2/,+/add/to/cache/"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top