diff --git a/appendices/migration85/incompatible.xml b/appendices/migration85/incompatible.xml new file mode 100644 index 000000000..a7282ae39 --- /dev/null +++ b/appendices/migration85/incompatible.xml @@ -0,0 +1,577 @@ + + + + + Изменения, которые ломают обратную совместимость + + + Ядро PHP + + + Псевдонимы <literal>"array"</literal> и <literal>"callable"</literal> + + + Больше нельзя использовать "array" и "callable" + в качестве имён псевдонимов классов в class_alias. + + + + + + Свободное сравнение несравнимых объектов + + + Ранее свободное сравнение несравнимых объектов + (например, перечислений, CurlHandle и других внутренних классов) + с логическими значениями было несогласованным. + При сравнении с логическим литералом $object == true происходило + приведение типа (bool)$object. + При сравнении со статически неизвестным значением $object == $true + всегда возвращалось значение &false;. + Поведение было унифицировано, теперь всегда происходит приведение типа (bool)$object. + + + + + + Возвращаемое значение gc_collect_cycles + + + Возвращаемое значение gc_collect_cycles больше не включает строки и ресурсы, + которые были косвенно собраны через циклы. + + + + + + Замена ключевого слова static в окончательных подклассе + + + Теперь разрешается заменять ключевое слово static + на self или конкретное имя класса в окончательных (final) подклассах. + + + + + + Обработчики тиков + + + Обработчики тиков теперь деактивируются после выполнения всех функций + завершения работы, деструкторов и очистки обработчиков вывода. + + + + + + Связывание трейтов + + + Теперь трейты связываются до родительского класса. + Небольшое изменение в поведении, которое больше соответствует ожиданиям пользователей. + + + + + + Ошибки при компиляции и связывании классов + + + Ошибки, возникающие во время компиляции и связывания классов, + теперь всегда откладываются и обрабатываются после компиляции или связывания классов. + Фатальные ошибки, возникающие во время компиляции или связывания классов, + приводят к немедленной обработке всех отложенных ошибок + без вызова пользовательских обработчиков ошибок. + + + + + + Исключения, выбрасываемые пользовательским обработчиком ошибок + + + Исключения, выбрасываемые пользовательскими обработчиками ошибок при обработке + ошибок связывания классов, больше не повышаются до уровня фатальных ошибок + и не препятствуют связыванию. + + + + + + Ошибка применения атрибута во время компиляции + + + Применение #[\Attribute] к абстрактному классу, перечислению, интерфейсу или трейту + вызывает ошибку во время компиляции. Ранее атрибут можно было добавить, + но при вызове метода ReflectionAttribute::newInstance выдавалась ошибка. + Ошибку можно отложить с момента компиляции до момента выполнения с помощью нового атрибута + #[\DelayedTargetValidation]. + + + + + + INI-настройка disable_classes + + + INI-настройка disable_classes удалена, + так как приводила к нарушению различных допущений движка. + + + + + + Деструктуризация значений, не являющихся массивами + + + Деструктуризация значений, не являющихся массивами (кроме &null;), + с помощью [] или функции list + теперь выдаёт предупреждение. + + + + + + Предупреждения, связанные с приведением типов + + + Теперь при преобразовании чисел с плавающей точкой (или строк, похожих на числа с плавающей точкой) + в целые числа выдаётся предупреждение, если их невозможно представить в виде целого числа. + Это касается явных и неявных преобразований в целые числа. + + + + Теперь при преобразовании NAN в другие типы выдаётся предупреждение. + + + + + + + + Модуль Bzip2 + + + Функция bzcompress теперь выбрасывает ошибку ValueError, + если значение параметра $block_size вне диапазона от 1 до 9. + + + + Функция bzcompress теперь выбрасывает ошибку ValueError, + если значение параметра $work_factor вне диапазона от 0 до 250. + + + + + + DOM + + + Клонирование DOMNamedNodeMap, + DOMNodeList, Dom\NamedNodeMap, + Dom\NodeList, Dom\HTMLCollection + и Dom\DtdNamedNodeMap теперь выбрасывает ошибку. + Такое поведение никогда не приводило к созданию рабочего объекта, + поэтому никаких последствий не ожидается. + + + + + + Модуль FileInfo + + + Функция finfo_file и метод finfo::file + теперь выбрасывают ошибку ValueError вместо + TypeError, если значение параметра $filename + содержит нулевые байты. + Теперь тип выбрасываемой ошибки соответствует остальной частью языка. + + + + + + Модуль интернационализации + + + Для работы модуля теперь требуется как минимум ICU 57.1. + + + + Метод IntlDateFormatter::setTimeZone и функция datefmt_set_timezone + теперь выбрасывают исключение IntlException + при неинициализированных классах или ошибках клонирования. + + + + Все методы класса Locale теперь выбрасывают исключение + ValueError, если значение параметра locale содержит нулевые байты. + + + + Поведение константы Collator::SORT_REGULAR при обработке числовых строк + теперь соответствует поведению SORT_REGULAR в модуле ext/standard. + + + + + + Модуль LDAP + + + Функция ldap_get_option и ldap_set_option + теперь выбрасывают исключение ValueError при передаче недопустимого параметра. + + + + + + Модуль MBString + + + Таблицы данных Unicode были обновлены до версии Unicode 17.0. + + + + + + Модуль MySQLi + + + Вызов конструктора mysqli для уже созданного объекта + теперь невозможен и выбрасывает ошибку Error. + + + + + + Модуль ODBC + + + ODBC теперь предполагает, что доступна как минимум функциональность ODBC 3.5. + Определение ODBCVER и флаги системы сборки, управляющие им, были удалены. + + + + ODBC больше не имеет флагов сборки для сборки с конкретными драйверами (за исключением DB2) + и удаляет особые случаи для этих драйверов. + Настоятельно рекомендуется использовать диспетчер драйверов, + такой как iODBC или unixODBC, на операционных системах кроме Windows. + + + + + + Модуль Opcache + + + Модуль Opcache теперь всегда встроен в бинарный файл PHP и всегда загружается. + INI-директивы opcache.enable и opcache.enable_cli + по-прежнему работают. + + + + Флаги конфигурации / + были удалены и сборка больше не создаёт объекты opcache.so или php_opcache.dll. + + + + Использование INI-директив zend_extension=opcache.so или + zend_extension=php_opcache.dll выдаст предупреждение. + + + + + + Модуль PCNTL + + + Функция pcntl_exec теперь выбрасывает ошибку ValueError, + если элементы параметра $args содержат нулевые байты.. + + + + Функция pcntl_exec теперь выбрасывает ошибку ValueError, + если записи или ключи параметра $env_vars + содержат нулевые байты. + + + + + + Модуль PCRE + + + Модуль скомпилирован без полу-устаревшего параметра + компиляции PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK. + + + + + + Модуль PDO + + + Аргументы конструктора, заданные в сочетании с + константой PDO::FETCH_CLASS, + теперь следуют обычной семантике CUFA (call_user_func_array). + Это означает, что строковые ключи будут действовать как именованные аргументы. + Кроме того, автоматическая оборачивание аргументов по значению, передаваемых в параметр по ссылке, + было удалено и теперь выдаётся обычное предупреждение E_WARNING. + Чтобы передать переменную по ссылке в аргумент конструктора, используйте общее + присвоение ссылки на значение массива: $ctor_args = [&$valByRef]. + + + + Попытка вызова метода PDOStatement::setFetchMode во время + вызова PDO::fetch, + PDO::fetchObject, + PDO::fetchAll, например, с использованием таких уловок, как + передача объекта запроса в качестве аргумента конструктора при извлечении в + объект, теперь будет выбрасывать ошибку Error. + + + + Изменились значения констант PDO::FETCH_GROUP, + PDO::FETCH_UNIQUE, + PDO::FETCH_CLASSTYPE, + PDO::FETCH_PROPS_LATE и + PDO::FETCH_SERIALIZE. + + + + Теперь выбрасывается исключение ValueError, если + константа PDO::FETCH_PROPS_LATE используется с режимом извлечения, + отличным от PDO::FETCH_CLASS, + в соответствии с другими флагами извлечения. + + + + Теперь выбрасывается исключение ValueError, + если константа PDO::FETCH_INTO используется в качестве режима + извлечения в методе PDO::fetchAll, + аналогично PDO::FETCH_LAZY. + + + + + + Драйвер PDO_FIREBIRD + + + Теперь при попытке установить слишком длинное имя курсора + в классе PDOStatement, полученном от драйвера Firebird, + выбрасывается исключение ValueError. + + + + + + Драйвер PDO_SQLITE + + + SQLite PDO::quote теперь будет выбрасывать исключение + или выдавать предупреждение, в зависимости от режима ошибок, + если строка содержит нулевой байт. + + + + Метод PDO::sqliteCreateCollation теперь выбрасывает исключение, + если у callback-функции неправильный тип возвращаемого значения, + что делает его более совместимым + с поведением метода Pdo\Sqlite::createCollation. + + + + + + Модуль POSIX + + + Функция posix_kill теперь выбрасывает + исключение ValueError, + если аргумент process_id меньше или больше, чем поддерживает платформа + (целое число со знаком или большой диапазон), + функция posix_setpgid теперь выбрасывает + исключение ValueError, + если process_id или process_group_id меньше нуля или больше, чем поддерживает платформа. + + + + Функция posix_setrlimit теперь выбрасывает + исключение ValueError, + если аргументы hard_limit или soft_limit меньше -1 или если soft_limit больше hard_limit. + + + + + + Модуль интроспекции кода Reflection + + + Метод ReflectionAttribute::newInstance теперь может + выбрасывать ошибки для внутренних атрибутов, если атрибут был применён к недопустимой цели, + а ошибка была отложена с момента компиляции до момента выполнения + с помощью атрибута #[\DelayedTargetValidation]. + + + + + + Модуль Session + + + Попытка записать данные сессии, где ключ $_SESSION содержит + символ вертикальной черты (|), + теперь будет выдавать предупреждение вместо молчаливой ошибки. + + + + Функция session_start более строго относится к аргументу options. + Теперь функция выбрасывает ошибку ValueError, + если массив не является хеш-картой, или ошибку TypeError, + если значение read_and_close не является допустимым типом, совместимым с int. + + + + + + Модуль SimpleXML + + + Передача выражения XPath, которое возвращает что-либо, + кроме набора узлов, в методе SimpleXMLElement::xpath + теперь выдаёт предупреждение и возвращает значение &false;, + вместо того, чтобы молчаливо завершаться с ошибкой и возвращать пустой массив. + + + + + + Модуль SNMP + + + Функции snmpget, + snmpset, + snmp2_get, + snmp2_set, + snmp3_get, + snmp3_set + и SNMP::__construct теперь выбрасывают ошибку + ValueError, если имя хоста + слишком большое, содержит нулевые байты или если порт указан + с отрицательным значением или больше 65535, а значения времени ожидания и повторных попыток + меньше -1 или слишком большое. + + + + + + Модуль SOAP + + + Метод SoapClient::__doRequest теперь принимает + новый необязательный параметр $uriParserClass, + который принимает строковые аргументы или &null;. + Значение &null; представляет исходный метод (parse_url), + а новые обработчики будут использоваться при передаче + либо Uri\Rfc3986\Uri, либо Uri\WhatWg\Url. + + + + + + Модуль Sockets + + + Функции socket_create_listen, socket_bind и socket_sendto + теперь выбрасывают ошибку ValueError, + если порт меньше 0 или больше 65535, + а также если любой из элементов массива $hints имеет числовой индекс. + + + + Функция socket_addrinfo_lookup теперь выбрасывает + ошибку TypeError, + если какое-либо из значений $hints не может быть преобразовано в целое число, + и может выбросить ошибку ValueError, + если какое-либо из этих значений переполняется. + + + + Функция socket_set_option с опциями + MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP + теперь выбрасывает исключение, если значение не является корректным объектом или массивом. + + + + Функция socket_set_option с контекстом многоадресной рассылки + теперь выбрасывает ошибку ValueError, + если созданный сокет не принадлежит семейству + AF_INET/AF_INET6. + + + + + + Модуль SPL + + + Класс ArrayObject больше не принимает перечисления, + так как изменение свойств $name или $value + может нарушить допущения движка. + + + + Параметр $length метода SplFileObject::fwrite + теперь может принимать значение &null;. + Значение по умолчанию изменено с 0 на &null;. + + + + + + Стандартные модули + + + Использование функции семейства printf с форматером, + в котором ранее не была указана точность, приводило к некорректной + переустановке точности вместо того, чтобы рассматривать ее как точность 0. + + + + + + Модуль Tidy + + + Методы tidy::__construct, tidy::parseFile, + tidy::parseString теперь выбрасывают ошибку ValueError, + если конфигурация содержит некорректное значение или пытается установить внутреннюю запись, + доступную только для чтения, и ошибку TypeError, + если ключ конфигурации не является строкой. + + + + + + diff --git a/appendices/migration85/new-features.xml b/appendices/migration85/new-features.xml new file mode 100644 index 000000000..97c6a67cd --- /dev/null +++ b/appendices/migration85/new-features.xml @@ -0,0 +1,473 @@ + + + + + Новая функциональность + + + Ядро PHP + + + Оператор Pipe + + + Добавлен оператор pipe (|>). + + + + + strlen(...); +print $result . PHP_EOL; // Prints "11" +]]> + + + + + + Замыкания в константных выражениях + + + Добавлена поддержка замыканий и + объектов первого класса + в константных выражениях. Поддерживаются: + + + Параметры атрибутов. + Значения свойств и параметров по умолчанию. + Константы и константы классов. + + + + + + Атрибут #[\NoDiscard] + + + Добавлен атрибут NoDiscard для указания, + что возвращаемое значение функции является важным и должно быть использовано. + + + + Также добавлено приведение типа (void) для указания, + что значение не используется намеренно. + Приведение типа (void) само по себе не влияет на выполнение программы, + но может использоваться для подавления предупреждений, + выдаваемых атрибутом #[\NoDiscard], а также, возможно, + диагностических сообщений, выдаваемых внешними IDE или инструментами статического анализа. + + + + + + + + + + + + Атрибуты констант + + + Добавлена поддержка атрибутов для констант, не относящихся к классам, на этапе компиляции + (например, const MY_CONST = 1; вместо define('MY_CONST', 1);). + + + + Атрибут Deprecated теперь можно использовать для констант. + + + + + + Атрибут <code>#[\DelayedTargetValidation]</code> + + + Новый атрибут DelayedTargetValidation можно использовать + для подавления ошибок компиляции из атрибутов ядра (или модулей), + которые используются на недопустимых целях. + Вместо этого ошибки сообщаются во время выполнения, + если и когда вызывается метод ReflectionAttribute::newInstance. + + + + + + Атрибут <code>#[\Override]</code> для свойств + + + Атрибут Override теперь можно применять к свойствам. + + + + + + Асимметричная видимость статических свойств + + + Добавлена поддержка асимметричной видимости + для статических свойств. + + + + + + Трассировки для фатальных ошибок + + + Фатальные ошибки (такие как превышение максимального времени выполнения) + теперь включают обратную трассировку. + + + + + + Объявление окончательных свойств в конструкторе + + + Объявление свойств в конструкторе + теперь можно использовать для окончательных (final) свойств. + + + + + + Приведения типов в константных выражениях + + + Добавлена поддержка приведения типов в константных выражениях. + + + + + + + + + + + + Функция clone + + + Языковая конструкция clone + теперь является функцией и поддерживает переназначение (только для чтения) свойств + во время клонирования с помощью нового параметра $withProperties. + + + + + + + + Модуль cURL + + + Добавлена поддержка совместного использования дескрипторов, + которые сохраняются между несколькими запросами PHP, + что позволяет безопасно и более эффективно повторно использовать соединения. + + + + Добавлена поддержка констант CURLINFO_USED_PROXY (libcurl >= 8.7.0), + CURLINFO_HTTPAUTH_USED и CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0) + в функции curl_getinfo. + Если функция curl_getinfo возвращает массив, та же информация доступна + в виде ключей "used_proxy", + "httpauth_used" и "proxyauth_used". + Константа CURLINFO_USED_PROXY получает значение ноль, + если в предыдущей передаче не использовался прокси или значение, отличное от нуля, если прокси использовался. + Константы CURLINFO_HTTPAUTH_USED и CURLINFO_PROXYAUTH_USED + получают битовые маски, указывающие методы аутентификации HTTP и прокси, + которые использовались в предыдущем запросе. + Возможные значения смотрите в описании констант CURLAUTH_*. + + + + Добавлена опция cURL CURLOPT_INFILESIZE_LARGE, + которая является безопасной заменой константы CURLOPT_INFILESIZE. + В некоторых системах CURLOPT_INFILESIZE принимает только + 32-разрядное целое число со знаком в качестве размера файла (2,0 ГБ) даже в 64-разрядных системах. + Константа CURLOPT_INFILESIZE_LARGE принимает наибольшее целое значение, + которое может обработать система. + + + + Добавлены значения CURLFOLLOW_OBEYCODE, CURLFOLLOW_FIRSTONLY + и CURLFOLLOW_ALL для опции CURLOPT_FOLLOWLOCATION + функции curl_setopt. + Константа CURLFOLLOW_OBEYCODE для более строгого соблюдения перенаправлений, если они разрешены. + Коснатнта CURLFOLLOW_FIRSTONLY для соблюдения только первого перенаправления, + таким образом, если есть последующие перенаправления, они не будут выполняться. + Константа CURLFOLLOW_ALL эквивалентна установке + константе CURLOPT_FOLLOWLOCATION значения true. + + + + Добавлена поддержка CURLINFO_CONN_ID (libcurl >= 8.2.0) + для функции curl_getinfo. Константа позволяет получить + уникальный идентификатор соединения, используемого для передачи cURL. + Это в первую очередь полезно, когда в приложениях на уровне PHP требуется + повторное использование соединений или логика пула соединений. + Если функция curl_getinfo возвращает массив, + значение доступно как ключ "conn_id". + + + + Добавлена поддержка CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0) + для функции curl_getinfo. Константа позволяет получить время (в микросекундах), + которое запрос провёл в очереди соединений libcurl перед отправкой. + Это значение также можно получить, передав + константу CURLINFO_QUEUE_TIME_T в параметр option + функции curl_getinfo. + + + + Добавлена поддержка CURLOPT_SSL_SIGNATURE_ALGORITHMS + для указания алгоритмов подписи, которые будут использоваться для TLS. + + + + + + Модуль DOM + + + Добавлено свойство Dom\Element::$outerHTML. + + + + Добавлено свойство $children в + реализацию интерфейса Dom\ParentNode. + + + + + + Модуль EXIF + + + Добавлена поддержка тегов Exif OffsetTime*. + + + + Добавлена поддержка HEIF/HEIC. + + + + + + Фильтрация данных + + + Добавлен новый флаг FILTER_THROW_ON_FAILURE для передачи + в функции фильтрации, который при выявлении ошибки при проверке выбрасывает исключение. + Новый флаг нельзя комбинировать с FILTER_NULL_ON_FAILURE; + попытка сделать это приведёт к выбрасыванию исключения ValueError. + + + + + + Модуль интернационализации + + + Добавлены константы класса NumberFormatter::CURRENCY_ISO, + NumberFormatter::CURRENCY_PLURAL, + NumberFormatter::CASH_CURRENCY + и NumberFormatter::CURRENCY_STANDARD + для различных форматов чисел, связанных с валютой. + + + + Добавлены методы Locale::addLikelySubtags и + Locale::minimizeSubtags для обработки вероятных тегов + заданной локали. + + + + Добавлен класс IntlListFormatter для форматирования, упорядочивания + и пунктуации списка элементов с заданной локалью: + операнды IntlListFormatter::TYPE_AND, + IntlListFormatter::TYPE_OR, + IntlListFormatter::TYPE_UNITS + а также ширины IntlListFormatter::WIDTH_WIDE, + IntlListFormatter::WIDTH_SHORT, + IntlListFormatter::WIDTH_NARROW. + Поддерживается начиная с icu 67. + + + + + + Драйвер PDO_Sqlite + + + Добавлена константа класса Pdo\Sqlite::ATTR_BUSY_STATEMENT. + + + + Добавлена константы класса Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT, + Pdo\Sqlite::EXPLAIN_MODE_PREPARED, + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN, + Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN. + + + + Добавлен атрибут соединения Pdo\Sqlite::ATTR_TRANSACTION_MODE + с возможными значениями Pdo\Sqlite::TRANSACTION_MODE_DEFERRED, + Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATE и Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE, + что позволяет настроить режим транзакции, который будет использоваться + при вызове метода beginTransaction(). + + + + + + Сессии + + + Функции session_set_cookie_params, + session_get_cookie_params, + и session_start теперь поддерживают cookie с независимым разделенным состоянием + с помощью ключа "partitioned". + + + + + + Модуль SOAP + + + Варианты перечисления теперь выгружаются методом SoapClient::__getTypes. + + + + Добавлена поддержка атрибута xml:lang в Soap 1.2 Reason Text. + + + + Добавлен опциональный параметр $lang в + подпись SoapFault::__construct и + SoapServer::fault. + Это решает проблему совместимости с клиентами .NET SOAP. + + + + + + Стандартные модули + + + Функция mail теперь возвращает фактическую ошибку + sendmail и определяет, был ли процесс sendmail неожиданно прерван. + В таких случаях выдаётся предупреждение и функция возвращает значение false. + Ранее ошибки игнорировались без предупреждения. + Это изменение затрагивает только транспорт sendmail. + + + + Функция getimagesize теперь поддерживает изображения HEIF/HEIC. + + + + Функция getimagesize теперь поддерживает изображения SVG, + если установлена библиотека ext-libxml. + Аналогично, функции image_type_to_extension и + image_type_to_mime_type + теперь также обрабатывают IMAGETYPE_SVG. + + + + У массив, возвращаемого функцией getimagesize, + появилось две дополнительные записи: + "width_unit" и "height_unit" для указания единиц измерения размеров. + По умолчанию эти единицы измерения — px. + Они не обязательно должны быть одинаковыми (например, одна может быть cm, а другая — px). + + + + Функции setcookie и setrawcookie + теперь поддерживают ключ "partitioned". + + + + + + Модуль URI + + + Добавлен всегда включённый модуль URI, который можно использовать + для обработки URI и URL в соответствии с RFC 3986 и WHATWG URL. + + + + + + Модуль XSL + + + Аргумент $namespace методов XSLTProcessor::getParameter, + XSLTProcessor::setParameter и + XSLTProcessor::removeParameter теперь действительно работает, + а не рассматривается как пустой. + Работает только в том случае, если аргумент $name + не использует нотацию Кларка и не является QName, + поскольку в этих случаях пространство имён берётся из href или префикса пространства имён соответственно. + + + + + + Модуль Zlib + + + Функция flock теперь поддерживается в потоках zlib. + Ранее это всегда приводило к сбою при выполнении любых действий по блокировке. + + + + + + diff --git a/appendices/migration85/other-changes.xml b/appendices/migration85/other-changes.xml new file mode 100644 index 000000000..f176d2bf8 --- /dev/null +++ b/appendices/migration85/other-changes.xml @@ -0,0 +1,633 @@ + + + + + Другие изменения + + + Изменения в ядре + + + Ядро PHP + + + Время высокого разрешения (hrtime) в macOS теперь + использует рекомендуемый + clock_gettime_nsec_np(CLOCK_UPTIME_RAW) API вместо + mach_absolute_time(). + + + + + + CGI/CLI + + + Опция или удалена, + так как не функционировала. + Вместо неё используйте . + + + + + + PDO_ODBC + + + Изменено поведение при извлечении данных из больших столбцов. + Вместо извлечения блоков по 256 байт PDO_ODBC будет пытаться извлекать + блоки большего размера; в настоящее время это размер страницы за вычетом + накладных расходов на строку. Драйверы, которые возвращают + SQL_NO_TOTAL в SQLGetData, также обрабатываются лучше. + + + + + + + + Изменения в модулях SAPI + + + CLI + + + Попытка установить слишком длинное название процесса с помощью + функции cli_set_process_title + теперь приведёт к ошибке, а не к молчаливому усечению заданного названия. + + + + Добавлена новая опция для вывода 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 + + + Улучшена производительность следующих методов: + + ReflectionProperty::getValue + ReflectionProperty::getRawValue + ReflectionProperty::isInitialized + ReflectionProperty::isInitialized + ReflectionProperty::setValue + ReflectionProperty::setRawValue + + + + + + + Модуль SPL + + + Улучшена производительность методов доступа к + размерам и методов SplFixedArray. + + + + + + Стандартные модули + + + Улучшенная производительность функций для работы с массивами с callback-функциями + (array_find, array_filter, + array_map, usort, ...). + + + + Улучшена производительность функций urlencode и + rawurlencode. + + + + Улучшена производительность функции unpack + с безымянными повторениями за счёт отказа от создания + временных строк и их повторного анализа. + + + + Улучшена производительность функции pack. + + + + Незначительные улучшения производительности функции array_chunk. + + + + + + Модуль XML + + + Улучшена производительность доступа к свойству класса XMLReader. + + + + Улучшена производительность класса XMLWriter + и уменьшено потребление памяти. + + + + + + + +