Мне нужно очистить все записи кэша APC при развертывании новой версии сайта. APC.php имеет кнопку для очистки всех кэшей кода операции, но я не вижу кнопок для очистки всех записей пользователя, или всех системных записей, или всех записей для каждого каталога.
Можно ли очистить все записи кэша через командную строку или каким-либо другим способом?
php
performance
caching
apc
lo_fye
источник
источник
Ответы:
Вы можете использовать функцию PHP
apc_clear_cache
.Вызов
apc_clear_cache()
очистит системный кеш, а вызовapc_clear_cache('user')
очистит пользовательский кеш.источник
php -r "apc_clear_cache();"
Я не верю, что какой-либо из этих ответов действительно работает для очистки кэша APC из командной строки. Как заметил Фрэнк Фармер выше, CLI работает в процессе, отдельном от Apache.
Моим решением для очистки из командной строки было написать сценарий, который копирует сценарий очистки APC в
web
каталог, получает к нему доступ и затем удаляет его. Доступ к сценарию ограничен локальным хостом.apc_clear.php
Это файл, который сценарий копирует в веб-каталог, получает к нему доступ и удаляет его.
Скрипт очистки кеша
Этот скрипт копирует apc_clear.php в веб-каталог, получает к нему доступ, затем удаляет его. Это основано на задаче Symfony. В версии Symfony обращаются к форме копирования и отмены связи Symfony, которая обрабатывает ошибки. Вы можете добавить проверки, что они успешны.
источник
Я знаю, что это не для всех, но: почему бы не сделать изящный перезапуск Apache?
Например, в случае с Centos / RedHat Linux:
Ubuntu:
источник
Это не указано в документации, но для очистки кэша кода операции вы должны сделать:
РЕДАКТИРОВАТЬ: Это, кажется, относится только к некоторым старым версиям APC.
Независимо от того, какую версию вы используете, вы не можете очистить кэш mod_php или fastcgi APC из скрипта php cli, так как скрипт cli будет запускаться из другого процесса, такого как mod_php или fastcgi. Вы должны вызвать apc_clear_cache () внутри процесса (или дочернего процесса), для которого вы хотите очистить кеш. Использование curl для запуска простого php-скрипта - один из таких подходов.
источник
Если вы хотите очистить кэш apc в команде: (используйте sudo, если вам это нужно)
APCu
APC
источник
Если вы работаете в стеке NGINX / PHP-FPM, лучше всего просто перезагрузить php-fpm
service php-fpm reload
(или какая-либо ваша команда перезагрузки может быть в вашей системе)источник
Как определено в документе APC:
Для очистки кеша выполните:
источник
Еще одна возможность использования командной строки, еще не упомянутая, это использование curl.
Это не решит вашу проблему для всех записей кэша, если вы используете стандартный скрипт apc.php, но он может вызвать адаптированный сценарий или другой, который вы установили.
Это очищает кэш кода операции:
Измените параметр OB на 3, чтобы очистить кэш пользователя:
Поместите обе строки в скрипт и назовите его с $ PASSWORD в вашем env.
источник
Если вы хотите отслеживать результаты через json, вы можете использовать этот вид сценария:
Как упоминалось в других ответах, этот сценарий нужно будет вызывать через http или curl, и вы должны быть защищены, если он отображается в корневом каталоге вашего приложения. (по ip, токен ...)
источник
apc_clear_cache () работает только на том же php SAPI, который вы хотите очистить кеш. Если у вас есть PHP-FPM и вы хотите очистить кэш apc, вы должны сделать это с помощью одного из сценариев php, а НЕ командной строки, потому что два кэша разделены.
Я написал CacheTool , инструмент командной строки, который решает именно эту проблему, и с помощью одной команды вы можете очистить кэш PHP-FPM APC из командной строки (он подключается к php-fpm для вас и выполняет функции apc)
Это также работает для opcache.
Посмотрите, как это работает здесь: http://gordalina.github.io/cachetool/
источник
Конюшня APC имеет возможность очищать кеш в своем интерфейсе. Чтобы очистить эти записи, вы должны войти в интерфейс apc.
APC имеет возможность установить имя пользователя и пароль в файле apc.php.
источник
php-apc
в вашей системе установлен пакет.если вы запускаете fpm под Ubuntu, необходимо запустить приведенный ниже код (проверено на 12 и 14)
источник
apc.ini
apc.stat = "1" заставит APC проверять скрипт на каждом запросе, чтобы определить, был ли он изменен. Если он был изменен, он перекомпилирует и кеширует новую версию.
Если этот параметр выключен, APC не будет проверять, что обычно означает, что для принудительной проверки APC файлов веб-сервер должен быть перезапущен, или кэш должен быть очищен вручную. Обратите внимание, что конфигурации веб-сервера FastCGI могут не очищать кэш при перезапуске. На рабочем сервере, где файлы сценариев редко изменяются, можно добиться значительного повышения производительности с помощью отключенной статистики.
источник
В новом интерфейсе администратора APC есть опции для добавления / очистки пользовательского кэша и кэша кода операции. Одна интересная функция заключается в добавлении / обновлении / удалении каталога из кэша opCode
Документация администратора APC
источник
Хорошим решением для меня было просто больше не использовать устаревший пользовательский кеш после развертывания.
Если вы добавите префикс к каждому из ваших ключей, вы можете изменить префикс при изменении структуры данных записей кэша. Это поможет вам получить следующее поведение при развертывании:
Это возможно только для пользовательского кэша.
источник
Создать файл APC.php
Запустите его из браузера.
источник
Мой обходной путь для сборки Symfony с множеством экземпляров на одном сервере:
Шаг 1. Создайте триггер или что-то, чтобы установить флаг файла (например, команда Symfony), затем создайте
marker file
..Шаг 2. В индексном файле при запуске добавить код очистки и удалить
marker file
.Шаг 2. Запустите приложение.
источник
У нас была проблема с APC и символическими ссылками на символические ссылки на файлы - похоже, они игнорируют изменения в самих файлах. Каким-то образом выполнение касания самого файла помогло. Я не могу сказать, в чем разница между изменением файла и касанием его, но как-то это было необходимо ...
источник