Рекомендуем
VPS на Windows и Linux — от 49 ₽ за 7 дней Быстрый запуск сервера на NVMe для сайтов, ботов и других задач.
Выбрать VPS

PHP 8.6.0 Beta 3 — исправления памяти, chunked-fetch для PostgreSQL и новые KEM API

10 сентября 2026 года была выпущена третья бета-версия PHP 8.6.0. Это последняя бета-версия перед тем, как ветка перейдёт в стадию Release Candidate. Основное внимание в релизе уделено устранению ошибок в ядре и расширениях. Также были добавлены новые функции, такие как chunked-fetch для работы с PDO PostgreSQL, поддержка KEM API из библиотеки libsodium версии 1.0.22 и обновлённые параметры для сокетных буферов.

PHP 8.6.0 Beta 3
PHP 8.6.0 Beta 3

PHP 8.6 перешёл к финальной стадии бета-тестирования

PHP 8.6.0 Beta 3 продолжает стабилизацию будущей основной ветки языка перед жёсткой заморозкой функциональности. В официальном NEWS версия датирована 10 сентября 2026 года, а график разработки PHP 8.6 предусматривает hard feature freeze 22 сентября, RC1 — 24 сентября и общий релиз PHP 8.6.0 — 19 ноября.

Beta 3 остаётся тестовой сборкой. Использовать её в production-среде не следует: задача этого этапа — проверить совместимость приложений и расширений, найти регрессии и выявить проблемы до формирования Release Candidate.

В сравнении с предыдущими альфа- и бета-сборками в Beta 3 меньше крупных языковых новшеств и больше точечных исправлений. Полный список изменений опубликован в официальном NEWS тега php-8.6.0beta3.

Исправления памяти затронули ядро, Intl, Phar и потоки

PHP 8.6.0 Beta 3 закрывает сразу несколько ошибок, связанных с выходом за границы буфера, use-after-free и некорректным управлением памятью. Эти изменения не оформлены как отдельный security-релиз, однако разработчикам расширений и приложений с интенсивной обработкой внешних данных стоит проверить новую сборку заранее.

В ядре исправлено чтение за пределами допустимой области памяти при автоматическом определении UTF-16/UTF-32. В BCMath устранён out-of-bounds read в bc_is_zero_for_scale(), возникавший при значении scale, превышающем внутренний n_scale.

Расширение Intl получило сразу несколько исправлений:

  • устранена утечка памяти при выводе объектов IntlCalendar;
  • исправлена утечка при обходе результатов IntlBreakIterator::getPartsIterator();
  • устранён use-after-free при создании IntlRuleBasedBreakIterator из скомпилированных правил;
  • Collator::sortWithSortKeys() больше не выделяет фиксированный буфер размером 2 МиБ независимо от размера массива;
  • исправлены обработка ошибок ICU и поведение функций IDN.

В Phar устранён use-after-free при обращении к смонтированным каталогам и утечка памяти при дублирующихся native-элементах манифеста. В стандартной библиотеке исправлены segfault в stream filter callback и out-of-bounds read при обработке HTTP-перенаправления с пустым заголовком Location.

КомпонентИзменение в Beta 3Практический смысл
CoreИсправлено out-of-bounds чтение при определении UTF-16/UTF-32Более корректная обработка некорректных или обрезанных входных данных
BCMathИсправлено чтение за границами в bc_is_zero_for_scale()Стабильнее работа с нетипичными значениями scale
IntlУстранены утечки памяти и use-after-freeПолезно для долгоживущих процессов и приложений с ICU
PharИсправлены use-after-free и утечка памятиСнижается риск сбоев при работе с Phar-архивами
StreamsИсправлены segfault и ошибки HTTP redirectНадёжнее сетевые операции и пользовательские фильтры потоков

is_a() и is_subclass_of() получили новое предупреждение о будущем поведении

В Beta 3 изменена диагностика вызовов is_a() и is_subclass_of(): передача строки первым аргументом при $allow_string = false теперь считается устаревающим поведением. Это изменение стоит проверить в библиотеках, где имена классов передаются как строки динамически.

Такой код теперь относится к deprecated-сценарию:

is_a(SomeClass::class, ParentClass::class, false);
is_subclass_of(SomeClass::class, ParentClass::class, false);

Если проект использует подобные проверки, тестовая миграция на PHP 8.6 поможет заранее обнаружить предупреждения до выхода стабильной версии.

Ещё одно исправление ядра касается автозагрузки: одиночный разделитель namespace больше не должен приводить к попытке загрузить класс с пустым именем.

PDO PostgreSQL научился получать большие выборки порциями

Расширение PDO_PGSQL в PHP 8.6.0 Beta 3 получило Pdo\Pgsql::ATTR_CHUNK_SIZE, позволяющий задавать количество строк, получаемых за один фрагмент результата. Изменение ориентировано на сценарии, где запрос возвращает большой набор данных и его невыгодно обрабатывать как единый массив.

Для приложений с PostgreSQL это даёт дополнительный инструмент управления потреблением памяти и обработкой крупных выборок. Перед внедрением параметра в реальные сервисы стоит протестировать его вместе с используемыми режимами курсора и конкретной версией PostgreSQL-драйвера.

Параллельно исправлены сообщения об ошибках pg_insert(), pg_update() и pg_delete(): теперь они корректнее указывают допустимые флаги.

Sodium добавил X-Wing и ML-KEM768

PHP 8.6.0 Beta 3 добавляет поддержку KEM API, появившихся в libsodium 1.0.22: X-Wing и ML-KEM768. Речь идёт об интерфейсах механизма инкапсуляции ключей, которые становятся доступны через расширение Sodium при наличии соответствующей версии библиотеки.

Для большинства веб-приложений изменение не требует немедленных действий. Оно интереснее разработчикам криптографических библиотек, инфраструктурных компонентов и систем, которым требуется экспериментировать с современными схемами согласования и инкапсуляции ключей.

На текущем этапе это также повод проверить сборочные окружения: обновление системной libsodium может влиять на доступность новых API при компиляции PHP.

Потоки получили управление размерами socket-буферов

В stream socket context появились параметры so_rcvbuf и so_sndbuf. Они позволяют задавать размер системного буфера приёма и отправки сокета в байтах.

Изменение полезно для приложений, работающих с большим количеством сетевого трафика, собственными протоколами или высоконагруженными потоковыми соединениями. Раньше для более тонкой настройки таких параметров приходилось опускаться на уровень расширения Sockets или внешней конфигурации.

В Io\Poll\Context::wait() также изменена проверка $maxEvents: значения выше INT_MAX теперь отклоняются вместо неявного усечения.

CLI, DOM, MBString, SOAP и SimpleXML получили точечные исправления

PHP 8.6.0 Beta 3 исправляет ряд ошибок, которые могут проявляться в тестовых серверах, XML-приложениях, обработке Unicode и интеграциях на основе SOAP.

В CLI development server появилась корректная поддержка HTTP-механизма Expect: 100-continue. Это делает встроенный сервер PHP ближе к поведению обычных HTTP-серверов при загрузке тела запроса клиентами, использующими предварительное подтверждение.

В DOM исправлено устаревание кэша результатов getElementsByClassName() и других списков узлов после изменения className, classList или удаления атрибутов. Также скорректирована работа NamedNodeMap::getNamedItemNS() с пустым URI пространства имён.

MBString больше не должен выдавать NUL-байты или читать данные за границами буфера в mb_ereg_replace() при некорректной именованной обратной ссылке без закрывающего разделителя.

В SOAP исправлены повреждение WSDL-кэша при использовании soap:header с headerfaults и переполнение стека на самоссылочных schema group или attributeGroup.

SimpleXML получил исправления для создания атрибутов через attributes() и для доступа к дочерним элементам после SimpleXMLElement::addChild() при использовании пространств имён.

Вывод

Beta-версия PHP 8.6.0, релиз 3, ориентирована на разработчиков фреймворков, Composer-пакетов, расширений и команд, которые намерены поддерживать PHP 8.6 сразу после официального выхода. Использование этой версии для рабочих серверов не рекомендуется.

Приоритет тестирования выше у проектов, которые используют:

  • is_a() и is_subclass_of() со строковыми именами классов;
  • PostgreSQL через PDO и обрабатывают крупные выборки;
  • Intl и ICU в долгоживущих worker-процессах;
  • Phar, SOAP, DOM, SimpleXML или MBString;
  • пользовательские stream filters и сетевые потоки;
  • расширение Sodium и актуальные версии libsodium.

Для быстрой проверки приложения можно поднять отдельное окружение с Beta 3 и прогнать unit-, integration- и статические тесты. Доступность сборки также можно проверить через CLI-контейнер:

docker run --rm php:8.6.0beta3-cli php -v

После Beta 3 планируется, что 22 сентября PHP 8.6 будет заморожен с точки зрения новых функций, а 24 сентября выйдет RC1. Если проект планирует официально поддерживать PHP 8.6 с момента его General Availability 19 ноября, то ближайшие две недели — это оптимальное время для выявления возможных несовместимостей до того, как ветка перейдёт в стадию Release Candidate.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться