Время высокого разрешения (hrtime()) в macOS теперь
использует рекомендуемый
clock_gettime_nsec_np(CLOCK_UPTIME_RAW) API вместо
mach_absolute_time().
Опция -z или --zend-extension удалена, так как не функционировала. Вместо неё используйте -d zend_extension=[path].
Изменено поведение при извлечении данных из больших столбцов. Вместо извлечения блоков по 256 байт PDO_ODBC будет пытаться извлекать блоки большего размера; в настоящее время это размер страницы за вычетом накладных расходов на строку. Драйверы, которые возвращают SQL_NO_TOTAL в SQLGetData, также обрабатываются лучше.
Попытка установить слишком длинное название процесса с помощью функции cli_set_process_title() теперь приведёт к ошибке, а не к молчаливому усечению заданного названия.
Добавлена новая опция --ini=diff для вывода INI-настройки, отличной от установленной по умолчанию.
FPM с httpd ProxyPass опционально декодирует полный путь к скрипту. Добавлена INI-настройка fastcgi.script_path_encoded, чтобы предотвратить обновлённое поведение.
Ограничение журнала доступа FPM теперь учитывает значение log_limit.
Функция grapheme_extract() правильно присваивает
значение $next при пропуске недопустимых начальных байтов.
Ранее были случаи, когда значение параметра указывало на начало границы графема,
а не на конец.
Из сигнатуры функций transliterator_get_error_code(),
transliterator_get_error_message(),
TransLiterator::getErrorCode() и
TransLiterator::getErrorMessage() убрано
возвращаемое значение false.
Возвращение значения false на самом деле никогда не было возможным.
Следующие функции теперь поддерживают параметр $locale:
grapheme_strpos(),
grapheme_stripos(),
grapheme_strrpos(),
grapheme_strripos(),
grapheme_substr(),
grapheme_strstr() и
grapheme_stristr().
Функция ldap_get_option() теперь принимает соединение
null, как и функция ldap_set_option(),
чтобы обеспечить возможность извлечения глобальных опций.
Тип возвращаемого значения функции libxml_set_external_entity_loader() изменён на true.
Добавлен новый параметр $digest_algo
функциям openssl_public_encrypt() и
openssl_private_decrypt(),
который позволяет указать алгоритм хеширования
для заполнения OAEP.
Добавлен новый параметр $padding
функциям openssl_sign() и
openssl_verify(),
openssl_sign() and openssl_verify()
have a new parameter $padding,
который позволяет использовать более
безопасную подкладку RSA PSS.
Параметр $cipher_algo функции openssl_cms_encrypt()
может быть строкой с именем шифра.
Это позволяет использовать больше алгоритмов, включая алгоритмы шифрования AES GCM для
данных с авторизацией.
Тип возвращаемого значения функции pcntl_exec() изменён на false.
Функция pcntl_waitid() принимает дополнительный аргумент
resource_usage для сбора различных платформенных
метрик о дочернем процессе.
Метод Pdo\Pgsql::copyFromArray() теперь поддерживает входные данные типа iterable.
Метод Pdo\Pgsql::setAttribute() и
Pdo\Pgsql::prepare() поддерживают
установку значения PDO::ATTR_PREFETCH в 0,
что переводит систему в режим отложенной выборки.
В этом режиме операторы не могут выполняться параллельно.
Функция pg_copy_from() теперь поддерживает входные данные типа iterable.
Функция pg_connect() проверяет,
содержит ли аргумент connection_string нулевой байт.
Функция pg_close_stmt() проверяет,
содержит ли аргумент statement_name нулевой байт.
Функция posix_ttyname() устанавливает last_error в EBADF при обнаружении некорректного файлового дескриптора.
Функция posix_isatty() выдаёт ошибку уровня E_WARNING
при обнаружении некорректного файлового дескриптора.
Функция posix_fpathconf() проверяет некорректные файловые дескрипторы,
устанавливает last_error в EBADF и выдаёт ошибку уровня E_WARNING.
Вывод метода ReflectionClass::__toString() для перечислений изменён, чтобы лучше показать, что класс является перечислением, а элементы перечисления являются именно элементами перечисления, а не обычными константами класса.
Вывод метода ReflectionProperty::__toString() для свойств с хуками изменён, чтобы указать, у каких хуков есть свойство, являются ли эти хуки окончательными и является ли свойство виртуальным. Это также влияет на вывод метода ReflectionClass::__toString(), когда класс содержит свойства с хуками.
Функции socket_create()/socket_bind()
могут создавать сокеты семейства AF_PACKET.
Функция socket_getsockname() получает индекс интерфейса
и его строковое представление с помощью сокета AF_PACKET.
Параметр $use_include_path функций gzfile(),
gzopen() и readgzfile() изменён
с целого числа (int) на логическое значение (bool).
Функции gzfile(), gzopen() и readgzfile() теперь учитывают контекст потока по умолчанию.
Функция curl_setopt() со
значением опции CURLOPT_FOLLOWLOCATION
больше рассматривается не как логическое значение, а как целое число для обработки
CURLFOLLOW_OBEYCODE и CURLFOLLOW_FIRSTONLY.
Обновлён файл с версии 5.45 до 5.46.
Тип возвращаемого значения функции finfo_close() был изменён на true вместо bool.
Внутренний механизм ошибок Intl был модернизирован, чтобы более точно указывать, какой участок кода вызвал ту или иную ошибку. Кроме того, некоторые исключения ext/date теперь заключены в IntlException.
Добавлен всегда включенный модуль lexbor. Он содержит библиотеку lexbor, которая была отделена от ext/dom для повторного использования в других модулях. Новый модуль не доступно напрямую пользователям.
Модуль Opcache теперь всегда встроен в бинарный файл PHP и всегда загружается. INI-директивы opcache.enable и opcache.enable_cli по-прежнему соблюдаются.
Обновлена библиотека pcre2lib с версии 10.44 до 10.46.
Увеличена поддержка минимальной версии с 3.7.7 до 3.7.17.
Тип возвращаемого значения функций readline_add_history(), readline_clear_history() и readline_callback_handler_install() был изменён с bool на true.
Класс ReflectionConstant больше не является окончательным.
Добавлен параметр fatal_error_backtraces для управления тем, должны ли фатальные ошибки включать обратную трассировку.
Добавлена INI-настройка max_memory_limit, доступная только при запуске, для управления максимальным значением memory_limit, которое может быть настроено при запуске или во время работы. Превышение значения выдаёт предупреждение, если не установлено значение -1, и устанавливает memory_limit в текущее значение max_memory_limit.
Добавлена опция opcache.file_cache_read_only для поддержки
каталога opcache.file_cache
только для чтения, для использования с файловыми системами только для чтения
(например, контейнерами Docker только для чтения).
Лучше всего использовать с opcache.validate_timestamps=0,
opcache.enable_file_override=1 и opcache.file_cache_consistency_checks=0.
Замечание: Кеш, сгенерированный с помощью другой сборки PHP, другого пути к файлу или других настроек (включая загружаемые модули), может быть проигнорирован.
Значение по умолчанию opcache.jit_hot_loop теперь 61 (простое число), чтобы предотвратить его кратность количеству итераций цикла. Рекомендуется устанавливать для этого параметра простое число.
Изменение opcache.memory_consumption при уже настроенном OPcache SHM теперь будет правильно сообщать об ошибке, а не молчаливо ничего не делать и показывать в PHPInfo вводящие в заблуждение значения.
Добавлена опция openssl.libctx для выбора типа контекста библиотеки OpenSSL. Можно использовать либо настраиваемый libctx для каждого потока, либо один глобальный (по умолчанию) libctx.
Удалены OP-коды для сравнения идентичности с логическими значениями,
в частности для шаблона match(true).
Добавлена специализация OPcode для сравнений
=== [] и !== [].
Создание объектов исключений теперь происходит намного быстрее.
Части кода, в которых использовался SSE2, были адаптированы для использования SIMD с ARM NEON.
Введена виртуальная машина TAILCALL, включенная по умолчанию при компиляции с Clang>=19 на x86_64 или aarch64. Виртуальная машина TAILCALL работает так же быстро, как виртуальная машина HYBRID, используемая при компиляции с GCC. Благодаря этому бинарные файлы PHP, скомпилированные с Clang>=19, работают так же быстро, как бинарные файлы, скомпилированные с GCC. Производительность виртуальной машины CALL, используемой с другими компиляторами, также значительно улучшилась.
Теперь не создаются лишние копии строк при преобразовании строк для использования в сортировщике.
Части кода, в которых использовался SSE2, были адаптированы для использования SIMD с ARM NEON.
Улучшена производительность извлечения переменных TLS в коде JIT в сборках без Glibc.
Улучшена производительность следующих методов:
Улучшена производительность методов доступа к размерам и методов SplFixedArray.
Улучшенная производительность функций для работы с массивами с callback-функциями (array_find(), array_filter(), array_map(), usort(), ...).
Улучшена производительность функций urlencode() и rawurlencode().
Улучшена производительность функции unpack() с безымянными повторениями за счёт отказа от создания временных строк и их повторного анализа.
Улучшена производительность функции pack().
Незначительные улучшения производительности функции array_chunk().