Код: Выделить всё
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)
Функция в коде Функция PHP вызывает ErrorFeb
array_map() array_count_values() ArgumentCountError: array_count_values() ожидает ровно 1 аргумент, задано 2
array_map() array_all() TypeError: array_all(): Аргумент №1 ($array) должен иметь тип массива, Замыкание дано
round() sin() ArgumentCountError: sin() ожидает ровно 1 аргумент, задано 2
file_get_contents() unlink() ErrorException: unlink(...schema.ser): такого файла или каталога нет
Ключевые детали:
- Ни одна из «вызываемых» функций (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
Мобильная версия