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
+
+
+ Псевдонимы "array" и "callable"
+
+
+ Больше нельзя использовать "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 теперь можно использовать для констант.
+
+
+
+
+
+ Атрибут #[\DelayedTargetValidation]
+
+
+ Новый атрибут DelayedTargetValidation можно использовать
+ для подавления ошибок компиляции из атрибутов ядра (или модулей),
+ которые используются на недопустимых целях.
+ Вместо этого ошибки сообщаются во время выполнения,
+ если и когда вызывается метод ReflectionAttribute::newInstance.
+
+
+
+
+
+ Атрибут #[\Override] для свойств
+
+
+ Атрибут 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
+ и уменьшено потребление памяти.
+
+
+
+
+
+
+
+