Настройка во время выполнения

Поведение функций зависит от установок в файле php.ini.

Опции настройки модуля OPcache
Имя По умолчанию Место изменения Список изменений
opcache.enable 1 INI_ALL  
opcache.enable_cli 0 INI_SYSTEM Между PHP 7.1.2 и 7.1.6 включительно значение по умолчанию было равно 1
opcache.memory_consumption 128 INI_SYSTEM  
opcache.interned_strings_buffer 8 INI_SYSTEM  
opcache.max_accelerated_files 10000 INI_SYSTEM  
opcache.max_wasted_percentage 5 INI_SYSTEM  
opcache.use_cwd 1 INI_SYSTEM  
opcache.validate_timestamps 1 INI_ALL  
opcache.revalidate_freq 2 INI_ALL  
opcache.revalidate_path 0 INI_ALL  
opcache.save_comments 1 INI_SYSTEM  
opcache.fast_shutdown 0 INI_SYSTEM  
opcache.enable_file_override 0 INI_SYSTEM  
opcache.optimization_level 0x7FFEBFFF INI_SYSTEM До PHP 7.3.0 значение равнялось 0x7FFFBFFF
opcache.inherited_hack 1 INI_SYSTEM Удалили в PHP 7.3.0
opcache.dups_fix 0 INI_ALL  
opcache.blacklist_filename "" INI_SYSTEM  
opcache.max_file_size 0 INI_SYSTEM  
opcache.consistency_checks 0 INI_ALL Опцию отключили с PHP 8.1.18 и 8.2.5 и удалили в PHP 8.3.0
opcache.force_restart_timeout 180 INI_SYSTEM  
opcache.error_log "" INI_SYSTEM  
opcache.log_verbosity_level "1" INI_SYSTEM  
opcache.record_warnings 0 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.preferred_memory_model "" INI_SYSTEM  
opcache.protect_memory 0 INI_SYSTEM  
opcache.mmap_base null INI_SYSTEM Опция доступна только на ОС Windows
opcache.restrict_api "" INI_SYSTEM  
opcache.file_update_protection 2 INI_ALL  
opcache.huge_code_pages 0 INI_SYSTEM  
opcache.lockfile_path "/tmp" INI_SYSTEM  
opcache.opt_debug_level 0 INI_SYSTEM Опция доступна с PHP 7.1.0
opcache.file_cache null INI_SYSTEM  
opcache.file_cache_only 0 INI_SYSTEM  
opcache.file_cache_consistency_checks 1 INI_SYSTEM  
opcache.file_cache_fallback 1 INI_SYSTEM  
opcache.validate_permission 0 INI_SYSTEM Опция доступна с PHP 7.0.14
opcache.validate_root 0 INI_SYSTEM Опция доступна с PHP 7.0.14
opcache.preload "" INI_SYSTEM Опция доступна с PHP 7.4.0
opcache.preload_user "" INI_SYSTEM Опция доступна с PHP 7.4.0
opcache.cache_id "" INI_SYSTEM Опция доступна с PHP 7.4.0 только на ОС Windows
opcache.jit "tracing" INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_buffer_size 0 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_debug 0 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_bisect_limit 0 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_prof_threshold 0.005 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_max_root_traces 1024 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_max_side_traces 128 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_max_exit_counters 8192 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_hot_loop 64 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_hot_func 127 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_hot_return 8 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_hot_side_exit 8 INI_SYSTEM Опция доступна с PHP 8.0.0
opcache.jit_blacklist_root_trace 16 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_blacklist_side_trace 8 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_max_loop_unrolls 8 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_max_recursive_calls 2 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_max_recursive_returns 2 INI_ALL Опция доступна с PHP 8.0.0
opcache.jit_max_polymorphic_calls 2 INI_ALL Опция доступна с PHP 8.0.0
Дополнительную информацию и определения режимов INI_* даёт раздел «Места установки параметров конфигурации».

Краткое разъяснение конфигурационных директив.

opcache.enable bool

Включает кеш опкодов. Код не оптимизируется и не кешируется, если опцию отключили. Опцию opcache.enable нельзя включить во время выполнения функцией ini_set(), но можно отключить. Попытка включить опцию в скрипте выдаст предупреждение.

opcache.enable_cli bool

Включает кеш опкодов для CLI-версии PHP.

opcache.memory_consumption int

Размер разделяемой памяти в мегабайтах для OPcache. Минимально допустимое значение — 8, которое кеш опкодов займёт, если установили значение меньше.

opcache.interned_strings_buffer int

Количество памяти в мегабайтах для хранения интернированных строк. Максимальное значение - 32 767 на 64-разрядных архитектурах и 4 095 на 32-разрядных архитектурах.

Замечание: До PHP 8.4.0 максимальное значение составляло 4 095 мегабайт на всех архитектурах.

opcache.max_accelerated_files int

Максимальное количество ключей (и, соответственно, скриптов) в хеш-таблице OPcache. Значение, которое кеш опкодов будет использовать в итоге, будет первым числом из набора { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793 }, которое больше или равно значению, которое установили для этого параметра. Минимальное значение составляет 200, а максимальное — 1 000 000. Значения за пределами этого диапазона ограничиваются допустимым диапазоном.

opcache.max_wasted_percentage int

Максимальный процент неиспользуемой памяти, при достижении которого модуль запланирует перезапуск, если свободной памяти недостаточно. Максимально допустимое значение: 50, которое кеш опкодов займёт, если установили значение больше.

opcache.use_cwd bool

При включении опции OPcache добавляет текущую рабочую директорию к ключу скрипта, чем устраняет возможность коллизий для файлов с одинаковым основным именем. Отключение этой директивы повышает производительность, но иногда приводит к сбоям приложений.

opcache.validate_timestamps bool

При включении опции OPcache будет проверять актуальность закешированных скриптов каждые opcache.revalidate_freq секунд. При отключении директивы требуется сбросить OPcache вручную функциями opcache_reset() и opcache_invalidate() или перезапустить веб-сервер, чтобы изменения в файловой системе вступили в силу.

Замечание: OPcache по-прежнему может проверять метку времени файла во время компиляции, если для опций opcache.file_update_protection или opcache.max_file_size установили ненулевые значения.

opcache.revalidate_freq int

Как часто в секундах проверять обновления меток времени скрипта. При значении 0 OPcache будет проверять обновления при каждом запросе.

Модуль игнорирует эту директиву конфигурации, если опцию opcache.validate_timestamps отключили.

opcache.revalidate_path bool

При отключении опции модуль переиспользует файлы кеша, пути которых содержат путь из списка include_path. Поэтому модуль не будет искать файл с таким же именем по другим путям списка include_path.

opcache.save_comments bool

При отключении опции модуль отбрасывает комментарии для документации из кеша опкодов, чтобы уменьшить размер оптимизированного кода. Отключение этой директивы конфигурации может спровоцировать сбой в работе приложений и фреймворков, которые полагаются на аннотации в комментариях, включая Doctrine, Zend Framework 2 и PHPUnit.

opcache.fast_shutdown bool

При включении опции используется последовательность быстрого завершения работы, которая не освобождает каждый выделенный блок памяти, а полагается на менеджер памяти движка Zend Engine для массового освобождения всего набора переменных запроса.

Эту директиву удалили в PHP 7.2.0. Вариант последовательности быстрого завершения работы интегрировали в PHP и кеш опкодов по возможности будет использовать вариант автоматически.

opcache.enable_file_override bool

При включении опции и вызове функций file_exists(), is_file() и is_readable() модуль будет проверять, содержит ли уже кеш опкодов файл. Опция может повысить производительность приложений, которые проверяют наличие и доступность для чтения PHP-скриптов, но рискует вернуть устаревшие данные, если опцию opcache.validate_timestamps отключили.

opcache.optimization_level int

Битовая маска, которая контролирует, какие шаги оптимизации выполняются. По умолчанию применяются все безопасные оптимизации. Изменение значения по умолчанию в основном полезно для отладки или разработки оптимизатора (смотрите также описание директивы opcache.opt_debug_level).

opcache.inherited_hack bool

Эта директива конфигурации игнорируется.

opcache.dups_fix bool

Этот хак требуется только для обхода ошибок «Невозможно повторно объявить класс» (Cannot redeclare class).

opcache.blacklist_filename string

Расположение файла чёрного списка OPcache. Файл чёрного списка — текстовый файл, который содержит имена файлов, которые не нужно ускорять, по одной записи на строку. Допускаются подстановочные знаки, также можно указывать префиксы. Строки, которые начинаются с точки с запятой, игнорируются как комментарии.

Пример простого чёрного списка:

; Соответствует конкретному файлу.
/var/www/broken.php
; Префикс, который соответствует каждому файлу, который начинается с «x».
/var/www/x
; Соответствует подстановочному знаку.
/var/www/*-broken.php
opcache.max_file_size int

Максимальный размер файла для кеширования в байтах. Модуль будет кешировать все файлы, если значение равно 0.

opcache.consistency_checks int

Если значение ненулевое, OPcache будет сверять контрольную сумму кеша каждые N запросов, где N — значение этой директивы конфигурации. Рекомендуется включать директиву только при отладке, поскольку опция снижает производительность.

Замечание:

Опцию отключили с PHP 8.1.18 и 8.2.5 и удалили в PHP 8.3.0.

opcache.force_restart_timeout int

Время ожидания начала запланированного перезапуска в секундах при неактивном кеше. Если время ожидания истекло, OPcache решает, что что-то не так, и чтобы разрешить перезапуск, завершит процессы, которые удерживают блокировки в кеше.

Если для параметра opcache.log_verbosity_level установили значение 2 или больше, то когда возникнет ситуации с превышением времени ожидания, модуль запишет в лог ошибок предупреждение.

Директива не поддерживается в ОС Windows.

opcache.error_log string

Путь к логу ошибок OPcache. Пустая строка обрабатывается как stderr, и приведёт к отправке логов в стандартный поток ошибок (обычно это лог ошибок веб-сервера).

opcache.log_verbosity_level int

Уровень детализации лога ошибок. По умолчанию регистрируются только фатальные ошибки (уровень 0) и ошибки (уровень 1). Другие доступные уровни: предупреждения (уровень 2), информационные сообщения (уровень 3) и сообщения отладки (уровень 4).

opcache.record_warnings bool

При включении опции OPcache будет записывать предупреждения, которые возникают во время компиляции, и повторять их при следующем включении файла, даже если файл обслуживается из кеша.

opcache.preferred_memory_model string

Предпочитаемая модель памяти для OPcache. Если оставить значение пустым, OPcache сам выберет наиболее подходящую модель, которая будет вести себя корректно практически в любых случаях.

Возможные значения включают mmap, shm, posix и win32.

opcache.protect_memory bool

Защищает разделяемую память от неожиданной записи во время запуска скриптов. Полезно только для внутренней отладки.

opcache.mmap_base string

Базовое значение для сегмента разделяемой памяти в ОС Windows. Каждый PHP-процесс должен отображать разделяемую память в одинаковое адресное пространство. Эта директива помогает исправить ошибки «Не удается повторно прикрепиться к базовому адресу» (Unable to reattach to base address).

opcache.restrict_api string

Разрешает вызывать API-функции модуля OPcache только из PHP-скриптов, чей путь начинается с заданной строки. Значение по умолчанию равно "" и означает отсутствие ограничений.

opcache.file_update_protection string

Исключает кеширование файлов, с момента изменения которых прошло меньше секунд, чем указали. Это защищает от кеширования неполностью обновлённых файлов. Если все обновления файлов атомарны, можно повысить производительность, задав для этого параметра значение 0. Это разрешит закешировать файлы немедленно.

opcache.huge_code_pages bool

Включает или отключает копирование PHP-кода (текстового сегмента) в HUGE PAGES. Опция может повысить производительность, но требует соответствующих системных настроек. Опция доступна в Linux начиная с PHP 7.0.0 и во FreeBSD начиная с PHP 7.4.0.

opcache.lockfile_path string

Абсолютный путь к хранилищу общих файлов блокировок (только для *nix-систем).

opcache.opt_debug_level string

Создаёт сброс опкодов для отладки отдельных этапов оптимизации. Значение 0x10000 будет выводить опкоды в том виде, в каком их создал компилятор, до оптимизации, тогда как значение 0x20000 будет выводить оптимизированные опкоды.

opcache.file_cache string

Включает и устанавливает каталог кеша второго уровня. Опция должна повысить производительность, когда SHM-память заполнилась, при перезапуске сервера или сбросе разделяемой SHM-памяти. Значение по умолчанию "" отключает кеширование на основе файлов.

opcache.file_cache_only bool

Включает или выключает кеширование опкодов в разделяемой памяти.

Замечание:

До PHP 8.1.0 отключение этой директивы с уже заполненным файловым кешем требовало ручной очистки файлового кеша.

opcache.file_cache_consistency_checks bool

Включает или выключает проверку контрольной суммы при загрузке скрипта из файлового кеша.

opcache.file_cache_fallback bool

Подразумевает opcache.file_cache_only=1 для конкретного процесса, которому не удалось повторно подключиться к разделяемой памяти (только для ОС Windows). Требуется явное включение файлового кеша.

Предостережение

Отключение этой опции конфигурации может помешать запуску процессов, и поэтому не рекомендуется.

opcache.validate_permission bool

Проверяет права доступа к кешированному файлу для текущего пользователя.

opcache.validate_root bool

Предотвращает коллизии имён в chroot-окружении. Опцию необходимо включать для каждого chroot-окружения, чтобы предотвратить доступ к файлам за пределами chroot.

opcache.preload string

Задаёт PHP-скрипт, который модуль скомпилирует и выполнит при старте сервера, а также сможет предзагрузить другие файлы, либо через конструкцию include, либо через функцию opcache_compile_file(). Каждая сущность (например, функции и классы), которую определили в этих файлах, будет автоматически доступна для запросов до момента выключения сервера.

Замечание:

Предварительная загрузка не поддерживается ОС Windows.

opcache.preload_user string

Позволяет запускать предварительную загрузку от имени заданного пользователя системы. Опция полезна для серверов, которые запускаются от имени root-пользователя перед переключением на непривилегированного пользователя системы. По умолчанию предварительная загрузка от имени root запрещена по соображениям безопасности, если только этой директиве явно не установили значение root. Начиная с PHP 8.3.0, эту директиву не нужно устанавливать, чтобы разрешить предварительную загрузку при запуске от имени root при использовании CLI SAPI или phpdbg SAPI.

opcache.cache_id string

В системах Windows процессы, которые запускают один и тот же SAPI-интерфейс PHP под одной и той же учётной записью пользователя с тем же идентификатором кеша, делят между собой один экземпляр OPcache. Значение этой опции разрешается задавать произвольно.

Подсказка

На IIS-серверах пулы приложений поддерживают способность работать с отдельными экземплярами OPcache. Чтобы разделить кеши, переменную окружения APP_POOL_ID указывают как идентификатор кеша opcache.cache_id.

opcache.jit string|int

В обычном режиме параметр принимает одно из четырёх строковых значений:

  • disable: Деактивирован, нельзя включить во время выполнения.
  • off: Выключен, но разрешается включить во время выполнения.
  • tracing/on: Включить JIT с компиляцией трассировок. Включён по умолчанию и рекомендуется для большей части пользователей.
  • function: Включить JIT с компиляцией функций.

В продвинутом режиме параметр принимает 4-значное целое число CRTO, в котором цифры означают:

C (флаги оптимизации для процессора)
  • 0: Отключить оптимизацию для ЦП.
  • 1: Включить набор инструкций AVX, если поддерживается ЦП.
R (распределение регистров)
  • 0: Не распределять регистры.
  • 1: Выделять локальный блочный регистр.
  • 2: Выделять глобальный регистр.
T (триггер)
  • 0: Компилировать каждую функцию при загрузке скрипта.
  • 1: Компилировать функций при первом выполнении.
  • 2: Профилировать функции при первом запросе и компилировать самые горячие функции.
  • 3: Профилировать на лету и компилировать горячие функции.
  • 4: Не используется.
  • 5: Включить JIT с компиляцией трассировок. Профилировать на лету и компилировать трассировки горячих сегментов кода.
O (уровень оптимизации)
  • 0: Без JIT-компилятора.
  • 1: Минимальный уровень JIT-компиляции (вызывать стандартные обработчики виртуальной машины).
  • 2: Вызывать встроенные обработчики виртуальной машины.
  • 3: Разрешить компилятору делать выводы о типах значений.
  • 4: Использовать граф вызовов.
  • 5: Оптимизировать весь скрипт.
Режим tracing соответствует CRTO = 1254, Режим function соответствует CRTO = 1205.

opcache.jit_buffer_size int

Объем разделяемой памяти, который резервируется для скомпилированного JIT-кода. Нулевое значение отключает JIT.

Объём измеряется в байтах, если значение параметра указали как целое число (int). Параметр также принимает значения в сокращённой нотации, которую описывает раздел FAQ.
opcache.jit_debug int

Битовая маска, которая определяет, какой вывод JIT-отладки включить. Возможные значения смотрите в файле » zend_jit.h (ищите определения макросов, которые начинаются с префикса ZEND_JIT_DEBUG).

opcache.jit_bisect_limit int

Опция отладки, которая отключает JIT-компиляцию после компиляции конкретного количества функций. Опция помогает разделять источник неправильной JIT-компиляции. Примечание: этот параметр работает, только если для JIT-триггера установили значение 0 (компиляция при загрузке скрипта) или 1 (компиляция при первом выполнении), например opcache.jit=1215. Подробнее о значениях рассказывает описание опции opcache.jit.

opcache.jit_prof_threshold float

Когда используется режим триггера «профилирование функций при первом запросе» этот порог определяет, считается ли функция горячей. Количество вызовов функции, разделённое на количество вызовов всех функций, должно быть выше порогового значения. Например, пороговое значение 0,005 означает, что функции, которые составляют более 0,5% всех вызовов, будут компилироваться JIT-компилятором.

opcache.jit_max_root_traces int

Максимальное количество корневых стеков вызовов. Корневой стек вызова — поток выполнения, который сначала проходит по одному пути через код, что является единицей JIT-компиляции. JIT не будет компилировать новый код, если достигнет этого предела.

opcache.jit_max_side_traces int

Максимальное количество боковых стеков вызова, которые могут принадлежать корневому стеку. Боковой стек вызова — другой поток выполнения, который не идёт по пути скомпилированного корневого стека вызова. Боковые стеки вызова, которые принадлежат тому же корневому стеку вызова, не будут компилироваться, если достигнут этого предела.

opcache.jit_max_exit_counters int

Максимальное количество счётчиков выхода бокового стека вызова. Опция ограничивает общее количество возможных боковых стеков вызова для всех корневых стеков.

opcache.jit_hot_loop int

После скольких итераций цикл считается горячим. Допустимый диапазон значений: [0,255]; для значений за пределами этого диапазона, например -1 или 256, будет использоваться значение по умолчанию. Значение 0 отключит трассировку и компиляцию циклов JIT-компилятором.

opcache.jit_hot_func int

После скольких вызовов функция считается горячей. Допустимый диапазон значений: [0,255]; для значений за пределами этого диапазона, например -1 или 256, будет использоваться значение по умолчанию. Значение 0 отключит трассировку и компиляцию функций JIT-компилятором.

opcache.jit_hot_return int

После скольких возвратов возврат считается горячим. Допустимый диапазон значений: [0,255]; для значений за пределами этого диапазона, например -1 или 256, будет использоваться значение по умолчанию. Значение 0 отключит трассировку и компиляцию возвратов JIT-компилятором.

opcache.jit_hot_side_exit int

После скольких выходов выход из бокового стека вызова считается горячим. Допустимый диапазон значений: [0,255]; для значений за пределами этого диапазона, например -1 или 256, будет использоваться значение по умолчанию. Значение 0 отключит трассировку и компиляцию боковых выходов JIT-компилятором.

opcache.jit_blacklist_root_trace int

Максимальное количество попыток компиляции корневого стека вызова, прежде чем компилятор занесёт корневой стек в чёрный список.

opcache.jit_blacklist_side_trace int

Максимальное количество попыток компиляции бокового стека вызова, прежде чем компилятор занесёт боковой стек в чёрный список.

opcache.jit_max_loop_unrolls int

Максимальное количество попыток развернуть цикл в боковом пути при попытке достичь корневого пути и закрыть внешний цикл.

opcache.jit_max_recursive_calls int

Максимальное количество развёрнутых циклов рекурсивных вызовов.

opcache.jit_max_recursive_returns int

Максимальное количество развёрнутых циклов рекурсивных возвратов.

opcache.jit_max_polymorphic_calls int

Максимальное количество попыток встроить полиморфные динамические вызовы или вызовы полиморфных методов. Вызовы, которые превышают этот предел, обрабатываются как мегаморфные и не встраиваются.

Добавить

Примечания пользователей 7 notes

up
20
damien at overeem dot org
7 years ago
When using PHP on a windows platform and enabling opcache, you might run into occasional 500 errors. These will appear to show up entirely random.

When this happens, your windows Event log (Windows Logs/Application) will show (probably multiple) entries from Zend OPcache with Event ID 487. Further information will state the following error message: "Base address marks unusable memory region".

This issue can be resolved by adding the following to your php.ini:

opcache.mmap_base = 0x20000000

Unfortunately I do not know the significance of the value "0x20000000". I can only tell you that this value works to solve the problem (Tried and tested)
up
8
carneiro at isharelife dot com dot br
4 years ago
If you try to allocate more memory that is available using opcache.memory_consumption PHP stops working without any logs to help on debugging. This issue took me 4 hours to solve when creating a staging server with same configrations and less memory that was available on production server.
up
9
wessos at example dot org
6 years ago
The optimization levels as of php 7.3 are the following:

#define ZEND_OPTIMIZER_PASS_1 (1<<0) /* CSE, STRING construction */
#define ZEND_OPTIMIZER_PASS_2 (1<<1) /* Constant conversion and jumps */
#define ZEND_OPTIMIZER_PASS_3 (1<<2) /* ++, +=, series of jumps */
#define ZEND_OPTIMIZER_PASS_4 (1<<3) /* INIT_FCALL_BY_NAME -> DO_FCALL */
#define ZEND_OPTIMIZER_PASS_5 (1<<4) /* CFG based optimization */
#define ZEND_OPTIMIZER_PASS_6 (1<<5) /* DFA based optimization */
#define ZEND_OPTIMIZER_PASS_7 (1<<6) /* CALL GRAPH optimization */
#define ZEND_OPTIMIZER_PASS_8 (1<<7) /* SCCP (constant propagation) */
#define ZEND_OPTIMIZER_PASS_9 (1<<8) /* TMP VAR usage */
#define ZEND_OPTIMIZER_PASS_10 (1<<9) /* NOP removal */
#define ZEND_OPTIMIZER_PASS_11 (1<<10) /* Merge equal constants */
#define ZEND_OPTIMIZER_PASS_12 (1<<11) /* Adjust used stack */
#define ZEND_OPTIMIZER_PASS_13 (1<<12) /* Remove unused variables */
#define ZEND_OPTIMIZER_PASS_14 (1<<13) /* DCE (dead code elimination) */
#define ZEND_OPTIMIZER_PASS_15 (1<<14) /* (unsafe) Collect constants */
#define ZEND_OPTIMIZER_PASS_16 (1<<15) /* Inline functions */

Source: https://lxr.room11.org/xref/php-src%40master/ext/opcache/Optimizer/zend_optimizer.h
up
6
tizian dot schmidlin at gmail dot com
5 years ago
It should be noted that according to the original RFC (https://wiki.php.net/rfc/preload) `opcache.preload` caches preloaded files *forever* for all instances of the underlying PHP process.

That means, that hosting multiple websites on the same server might result in some unexpected behaviour.

Concrete example:
- you have a Symfony 3.2 App (which might be an endpoint of some type) and a Symfony 3.4 App (which might be your main application)
- both apps have a main Class called App that is in the same namespace (as it is usual, since the class name is unique to each project)
- depending on which app is loaded first, one or the other will work, since `opcache.preload` has no file based distinction of what class is used where and simply provides them to the user space

This is avoidable by simply not preloading user space classes or, if you work with FPM, by defining a pool for each app.

In order to optimize memory consumption, you might also use a common FPM Pool for all Symfony 3.4 Apps and preload the entire framework in there and simply not preload user space classes (which might be cached by opcache anyway but is slower, since it will be checked if the file has changed on every request).
up
4
bdurand at ensemblegroup dot net
7 years ago
It would appear as though the [opcache.enable] setting is indeed NOT PHP_INI_ALL.
For changing it within user.ini yields no effect when disabled at global level. user.ini is ignored for that setting.
up
1
JReezy
8 months ago
Despite the set of values for opcache.max_accelerated_files including the value 1048793, the maximum as stated is 1000000. If you select a number above 1000000 the value is set its default which is 10000.
up
0
daniel at elementor dot com
7 months ago
When opcache.use_cwd=0 include/require of relative paths from different directories will both resolve to the same (first) file.

Example dir structure:
app1
index.php
lib.php
app2
index.php
lib.php

both index.php(s):
include "lib.php";

app1/lib.php:
echo "app1";

app2/lib.php:
echo "app2";

both will echo "app1".
To Top