PHP 8.5.0 Released!

Другие изменения

Изменения в ядре

Ядро PHP

Время высокого разрешения (hrtime()) в macOS теперь использует рекомендуемый clock_gettime_nsec_np(CLOCK_UPTIME_RAW) API вместо mach_absolute_time().

CGI/CLI

Опция -z или --zend-extension удалена, так как не функционировала. Вместо неё используйте -d zend_extension=[path].

PDO_ODBC

Изменено поведение при извлечении данных из больших столбцов. Вместо извлечения блоков по 256 байт PDO_ODBC будет пытаться извлекать блоки большего размера; в настоящее время это размер страницы за вычетом накладных расходов на строку. Драйверы, которые возвращают SQL_NO_TOTAL в SQLGetData, также обрабатываются лучше.

Изменения в модулях SAPI

CLI

Попытка установить слишком длинное название процесса с помощью функции cli_set_process_title() теперь приведёт к ошибке, а не к молчаливому усечению заданного названия.

Добавлена новая опция --ini=diff для вывода INI-настройки, отличной от установленной по умолчанию.

FPM

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

Функция ldap_get_option() теперь принимает соединение null, как и функция ldap_set_option(), чтобы обеспечить возможность извлечения глобальных опций.

Функции libxml

Тип возвращаемого значения функции libxml_set_external_entity_loader() изменён на true.

Функции OpenSSL

Добавлен новый параметр $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

Тип возвращаемого значения функции pcntl_exec() изменён на false.

Функция pcntl_waitid() принимает дополнительный аргумент resource_usage для сбора различных платформенных метрик о дочернем процессе.

Функции PDO_PGSQL

Метод Pdo\Pgsql::copyFromArray() теперь поддерживает входные данные типа iterable.

Метод Pdo\Pgsql::setAttribute() и Pdo\Pgsql::prepare() поддерживают установку значения PDO::ATTR_PREFETCH в 0, что переводит систему в режим отложенной выборки. В этом режиме операторы не могут выполняться параллельно.

Функции PostgreSQL

Функция pg_copy_from() теперь поддерживает входные данные типа iterable.

Функция pg_connect() проверяет, содержит ли аргумент connection_string нулевой байт.

Функция pg_close_stmt() проверяет, содержит ли аргумент statement_name нулевой байт.

Функции POSIX

Функция posix_ttyname() устанавливает last_error в EBADF при обнаружении некорректного файлового дескриптора.

Функция posix_isatty() выдаёт ошибку уровня E_WARNING при обнаружении некорректного файлового дескриптора.

Функция posix_fpathconf() проверяет некорректные файловые дескрипторы, устанавливает last_error в EBADF и выдаёт ошибку уровня E_WARNING.

Функции интроспекции кода Reflection

Вывод метода ReflectionClass::__toString() для перечислений изменён, чтобы лучше показать, что класс является перечислением, а элементы перечисления являются именно элементами перечисления, а не обычными константами класса.

Вывод метода ReflectionProperty::__toString() для свойств с хуками изменён, чтобы указать, у каких хуков есть свойство, являются ли эти хуки окончательными и является ли свойство виртуальным. Это также влияет на вывод метода ReflectionClass::__toString(), когда класс содержит свойства с хуками.

Функции Sockets

Функции socket_create()/socket_bind() могут создавать сокеты семейства AF_PACKET.

Функция socket_getsockname() получает индекс интерфейса и его строковое представление с помощью сокета AF_PACKET.

Функции Zlib

Параметр $use_include_path функций gzfile(), gzopen() и readgzfile() изменён с целого числа (int) на логическое значение (bool).

Функции gzfile(), gzopen() и readgzfile() теперь учитывают контекст потока по умолчанию.

Другие изменения в модулях

Модуль cURL

Функция curl_setopt() со значением опции CURLOPT_FOLLOWLOCATION больше рассматривается не как логическое значение, а как целое число для обработки CURLFOLLOW_OBEYCODE и CURLFOLLOW_FIRSTONLY.

Модуль Fileinfo

Обновлён файл с версии 5.45 до 5.46.

Тип возвращаемого значения функции finfo_close() был изменён на true вместо bool.

Модуль интернационализации

Внутренний механизм ошибок Intl был модернизирован, чтобы более точно указывать, какой участок кода вызвал ту или иную ошибку. Кроме того, некоторые исключения ext/date теперь заключены в IntlException.

Модуль Lexbor

Добавлен всегда включенный модуль lexbor. Он содержит библиотеку lexbor, которая была отделена от ext/dom для повторного использования в других модулях. Новый модуль не доступно напрямую пользователям.

Модуль Opcache

Модуль Opcache теперь всегда встроен в бинарный файл PHP и всегда загружается. INI-директивы opcache.enable и opcache.enable_cli по-прежнему соблюдаются.

Модуль PCRE

Обновлена библиотека pcre2lib с версии 10.44 до 10.46.

Модуль PDO_Sqlite

Увеличена поддержка минимальной версии с 3.7.7 до 3.7.17.

Модуль Readline

Тип возвращаемого значения функций readline_add_history(), readline_clear_history() и readline_callback_handler_install() был изменён с bool на true.

Модуль интроспекции кода Reflection

Класс ReflectionConstant больше не является окончательным.

Изменения обработки INI-файла

Ядро PHP

Добавлен параметр fatal_error_backtraces для управления тем, должны ли фатальные ошибки включать обратную трассировку.

Добавлена INI-настройка max_memory_limit, доступная только при запуске, для управления максимальным значением memory_limit, которое может быть настроено при запуске или во время работы. Превышение значения выдаёт предупреждение, если не установлено значение -1, и устанавливает memory_limit в текущее значение max_memory_limit.

Модуль Opcache

Добавлена опция 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

Добавлена опция openssl.libctx для выбора типа контекста библиотеки OpenSSL. Можно использовать либо настраиваемый libctx для каждого потока, либо один глобальный (по умолчанию) libctx.

Производительность

Ядро PHP

Удалены OP-коды для сравнения идентичности с логическими значениями, в частности для шаблона match(true).

Добавлена специализация OPcode для сравнений === [] и !== [].

Создание объектов исключений теперь происходит намного быстрее.

Части кода, в которых использовался SSE2, были адаптированы для использования SIMD с ARM NEON.

Введена виртуальная машина TAILCALL, включенная по умолчанию при компиляции с Clang>=19 на x86_64 или aarch64. Виртуальная машина TAILCALL работает так же быстро, как виртуальная машина HYBRID, используемая при компиляции с GCC. Благодаря этому бинарные файлы PHP, скомпилированные с Clang>=19, работают так же быстро, как бинарные файлы, скомпилированные с GCC. Производительность виртуальной машины CALL, используемой с другими компиляторами, также значительно улучшилась.

Модуль интернационализации

Теперь не создаются лишние копии строк при преобразовании строк для использования в сортировщике.

Модуль MBString

Части кода, в которых использовался SSE2, были адаптированы для использования SIMD с ARM NEON.

Модуль Opcache

Улучшена производительность извлечения переменных TLS в коде JIT в сборках без Glibc.

Модуль интроспекции кода Reflection

Улучшена производительность следующих методов:

Модуль SPL

Улучшена производительность методов доступа к размерам и методов SplFixedArray.

Стандартные модули

Улучшенная производительность функций для работы с массивами с callback-функциями (array_find(), array_filter(), array_map(), usort(), ...).

Улучшена производительность функций urlencode() и rawurlencode().

Улучшена производительность функции unpack() с безымянными повторениями за счёт отказа от создания временных строк и их повторного анализа.

Улучшена производительность функции pack().

Незначительные улучшения производительности функции array_chunk().

Модуль XML

Улучшена производительность доступа к свойству класса XMLReader.

Улучшена производительность класса XMLWriter и уменьшено потребление памяти.

Добавить

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

Пользователи ещё не добавляли примечания для страницы
To Top