Поведение функций зависит от установок в файле php.ini.
Места установки параметров конфигурации».
Краткое разъяснение конфигурационных директив.
opcache.enable
bool
opcache.enable нельзя включить
во время выполнения функцией ini_set(), но можно отключить.
Попытка включить опцию в скрипте выдаст предупреждение.
opcache.enable_cli
bool
opcache.memory_consumption
int
8,
которое кеш опкодов займёт, если установили значение меньше.
opcache.interned_strings_buffer
int
Замечание: До PHP 8.4.0 максимальное значение составляло 4095 мегабайт на всех архитектурах.
opcache.max_accelerated_files
int
{ 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.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
opcache.save_comments
bool
opcache.fast_shutdown
bool
opcache.enable_file_override
bool
opcache.optimization_level
int
0x7FFEBFFF, которое включает все безопасные оптимизации.
Отключение оптимизаций или включение небезопасных оптимизаций
в основном полезно для отладки/разработки оптимизатора.
Каждый бит в битовой маске включает определённый этап оптимизации:
| Бит | Название | Описание | По умолчанию |
|---|---|---|---|
| 0 | PASS_1 | Простая оптимизация Peephole | On |
| 1 | PASS_2 | Не используется (объединён с PASS_1) | On |
| 2 | PASS_3 | Простая оптимизация JuMP | On |
| 3 | PASS_4 | Оптимизация Call | On |
| 4 | PASS_5 | Оптимизация на основе графа управления потоком | On |
| 5 | PASS_6 | Оптимизация на основе анализа потока данных | On |
| 6 | PASS_7 | Следует ли использовать график вызовов для оптимизации на основе SSA | On |
| 7 | PASS_8 | Редкое распространение условных констант | On |
| 8 | PASS_9 | Оптимизация временных переменных | On |
| 9 | PASS_10 | Удаление кодов операций NOP | On |
| 10 | PASS_11 | Сжатие литералов | On |
| 11 | PASS_12 | Предварительный расчет размера стека вызовов | On |
| 12 | PASS_13 | Удаление неиспользуемых переменных | On |
| 13 | PASS_14 | Удаление мёртвого кода | On |
| 14 | PASS_15 | Сбор и замена объявлений констант (небезопасно) | Off |
| 15 | PASS_16 | Встраивание тривиальных функций (часть оптимизации вызовов) | On |
| 16 | (Flag) | Игнорировать возможность перегрузки оператора (небезопасно) | Off |
Замечание: Безопасные и небезопасные оптимизации
Безопасные оптимизации (включены по умолчанию) сохраняют точное поведение кода PHP, одновременно повышая производительность. Включают удаление мёртвого кода, сворачивание констант и оптимизацию переходов. Небезопасные оптимизации (по умолчанию отключено) может изменить поведение в пограничных случаях:
- Бит 14: Сбор констант. Константы подставляются во время компиляции, игнорируя порядок объявления во время выполнения:
<?php
echo getA(); // Вывод: "hello" вместо того, чтобы вызывать ошибку
const A = "hello";
function getA() { return A; }- Бит 16: Игнорирование перегрузки операторов. Небезопасно при использовании классов с
do_operation(например, GMP, BCMath) в арифметических операциях. При объявлении типов оптимизатор может безопасно применять те же оптимизации.
opcache.inherited_hack
bool
opcache.dups_fix
bool
opcache.blacklist_filename
string
; Соответствует конкретному файлу. /var/www/broken.php ; Префикс, который соответствует каждому файлу, который начинается с «x». /var/www/x ; Соответствует подстановочному знаку. /var/www/*-broken.php
opcache.max_file_size
int
0.
opcache.consistency_checks
int
Замечание: Опцию отключили с PHP 8.1.18 и 8.2.5 и удалили в PHP 8.3.0.
opcache.force_restart_timeout
int
opcache.error_log
string
stderr,
и приведёт к отправке логов в стандартный поток ошибок (обычно это лог
ошибок веб-сервера).
opcache.log_verbosity_level
int
opcache.record_warnings
bool
opcache.preferred_memory_model
string
mmap, shm,
posix и win32.
opcache.protect_memory
bool
opcache.mmap_base
string
opcache.restrict_api
string
"" и означает отсутствие ограничений.
opcache.file_update_protection
string
0.
Это разрешит закешировать файлы немедленно.
opcache.huge_code_pages
bool
opcache.lockfile_path
string
opcache.opt_debug_level
string
opcache.file_cache
string
""
отключает кеширование на основе файлов.
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
opcache.preload
string
Замечание: Предварительная загрузка не поддерживается ОС Windows.
opcache.preload_user
string
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
opcache.jit_debug
int
ZEND_JIT_DEBUG).
opcache.jit_bisect_limit
int
opcache.jit=1215.
Подробнее о значениях рассказывает описание опции opcache.jit.
opcache.jit_prof_threshold
float
opcache.jit_max_root_traces
int
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