Ответ 1
Документация apc.enable_cli
, которая определяет, следует ли активировать APC в режиме CLI, говорит (цитирует):
В основном для тестирования и отладки. Установка этого параметра позволяет APC для CLI версии PHP. При нормальном обстоятельства, он не идеален для создавать, заполнять и уничтожать APC кеша при каждом запросе CLI, но для различные тестовые сценарии полезно иметь возможность включить APC для CLI версии PHP легко.
Возможно, APC сохранит коды операций в памяти, но по мере того, как исполняемый файл PHP умрет в конце script, эта память будет потеряна: она не будет сохраняться между выполнением script.
Итак, кеш-код opcode в APC бесполезен в режиме CLI: он ничего не будет оптимизировать, поскольку PHP все равно придется перекомпилировать исходный код для кодов операций при каждом запуске исполняемого файла PHP.
На самом деле, APC не "оптимизирует": стандартный способ выполнения PHP script выглядит следующим образом:
- прочитайте файл и скомпилируйте его в opcodes
- выполнить коды операций
То, что APC делает, хранится в кодах операций в памяти, поэтому выполнение PHP script становится:
- читайте коды операций из памяти (намного быстрее, чем компиляция исходного кода)
- выполнить коды операций
Но это означает, что у вас должно быть место в памяти для хранения кодов операций. При запуске PHP в качестве модуля Apache Apache отвечает за сохранение этого сегмента памяти... Когда PHP запускается из CLI, нет ничего, что бы сохранить сегмент памяти, поэтому он будет уничтожен в конце выполнения PHP.
(Я не знаю, как это работает точно, но это что-то вроде этого, по крайней мере в принципах, даже если мои слова не очень "технические" ^^)
Или, под "оптимизацией" вы подразумеваете нечто иное, чем кеш-код операции, например, директиву конфигурации apc.optimization? Если это так, то этот был удален в APC 3.0.13