Код: Выделить всё
Confirmed environment:
PHP 8.4.16 (cli) (built: Jan 19 2026 03:54:38) (NTS) Zend Engine v4.4.16 Zend OPcache v8.4.16 JIT: disabled (opcache.jit=disable)
Код: Выделить всё
Function in code Function PHP calls ErrorFeb
array_map() array_count_values() ArgumentCountError: array_count_values() expects exactly 1 argument, 2 given
array_map() array_all() TypeError: array_all(): Argument #1 ($array) must be of type array, Closure given
round() sin() ArgumentCountError: sin() expects exactly 1 argument, 2 given
file_get_contents() unlink() ErrorException: unlink(...schema.ser): No such file or directory
- Ни одна из «вызываемых» функций (array_count_values, array_all, sin, unlink) не существует где-либо в нашей кодовой базе.
- Фактические исходные файлы содержат array_map, round и file_get_contents в сообщаемых строках.
- Между ошибками код не был развернут — один и тот же код работал один день, а на следующий сломался.
- Каждый раз появляется другая неправильная функция, всегда другая внутренняя функция PHP.
- Обмен file_get_contents() → unlink() является разрушительным: он удаляет файл поставщика (schema.ser) вместо его чтения
- Подтверждено, что JIT отключен; это чистое кэширование байт-кода OPcache
- Перезапуск PHP-FPM временно исправляет ситуацию, но ошибки возвращаются
Пример — фактический источник (строка 111 файла InvoiceTotals.php):**
Код: Выделить всё
$item->taxAmount = round($item->taxAmount, $inv->getDecimals('invoice/taxAmount'));
Код: Выделить всё
ArgumentCountError: sin() expects exactly 1 argument, 2 given in .../InvoiceTotals.php:111
Похоже, OPcache разрешает неверные указатели функций из внутренней таблицы функций PHP во время компиляции байт-кода или извлечения из кэша. Кто-нибудь сталкивался с этим с PHP 8.4 + OPcache? Это известная ошибка или это может быть связано с повреждением памяти на сервере?
Подробнее здесь: https://stackoverflow.com/questions/798 ... sin-file-g
Мобильная версия