PHP 8.6.0RC2: Downloads, Changelog, News

Release Information

Release
8.6.0RC2
PHP Version
PHP 8.6
Release Date
Release Type
Bug Fix Release
Release Status
QA Release
Branch Status
Upcoming Release

PHP 8.6 is a development version, and is not recommended for production use. PHP 8.6 is scheduled to reach General Availability on 2026-11-19.
PHP 8.6.0RC3 is the latest QA release in PHP 8.6.

Downloads

Source Code

Git Clone
Use Git to clone the 8.6.0RC2 tag from the PHP Git repository.
git clone https://github.com/php/php-src.git --depth 1 --branch php-8.6.0RC2
How to compile PHP
PHP can be compiled by setting up the dependencies, building the configure script (./buildconf), configuring the build ./configure, and running make.
Detailed articles on how to compile PHP are available for Ubuntu/Debian based systems and Fedora/RHEL based systems.

Docker/Podman Containers

PHP CLI
PHP CLI Containers images only include the PHP CLI, and no FPM or Apache modules. The Alpine builds are lightweight, but may introduce incompatibilities due to their musl builds. Albeit their larger size, the Debian-based (without the "-alpine" suffix) images are more complete, and widely used.

Alpine-based: Lightweight, but may introduce incompatibilities due to their musl builds.
docker pull php:8.6.0RC2-cli-alpine

Debian-based: More compatible with other components, complete, and are widely used.
docker pull php:8.6.0RC2-cli
PHP CLI + Web Server Integration
These container images include PHP CLI, and a web server integration. FPM container images can be integrated with web servers such as Nginx, Caddy, and Apache with Event MPM. The Apache container images include Apache web server, integrating PHP as an Apache module.

Alpine-based: Lightweight, but may introduce incompatibilities due to their musl builds.
docker pull php:8.6.0RC2-fpm-alpine

Debian-based ZTS Apache: Includes Apache web server integrating PHP as an Apache module.
docker pull php:8.6.0RC2-apache

Debian-based NTS FPM: PHP-FPM, can be integrated with Nginx, Caddy, and other web servers over Fast CGI.
docker pull php:8.6.0RC2-fpm

ChangeLog

Core

  • Fixed incorrect internal pointer and foreach iterator positions when compacting arrays with holes.
  • Fix handling of references to typed properties during unserialization of various internal classes.
  • Fixed OSS-Fuzz 532353396 (assertion failure with static type).
  • Fix GH-23662 (Avoid NAN warning in print_r()).
  • Fixed bug GH-23752 (Use scoped diagnostic suppression for the global register declarations so the caller's -Wvolatile-register-var state is restored).
  • Fixed OSS-Fuzz #538730793 (Assertion failure when returning by-ref from closure invoke).
  • Fixed OSS-Fuzz #540904105 (ASSERT: ast->attr == T_CLASS_C).

CLI

  • Fix GH-22567 (Windows ZTS CLI SAPI should refresh its TSRMLS cache during request activation).
  • Fixed bug GH-23764 (Built-in server leaks a file descriptor on every HEAD request for a static file).

Date

  • Fix unserialization of Time\Duration.
  • Add comparison handler for Time\Duration.

DOM

  • Fixed use-after-free when re-constructing a DOMXPath whose php:function registrations are freed while still reachable from the cycle collector.
  • Fixed Dom\HTMLDocument::getElementById() not finding ids of SVG and MathML elements.
  • Fixed Dom\HTMLDocument giving attributes the namespace of their element when a fragment is parsed with an xlink, xml or xmlns context element.

Fileinfo

  • Upgrade to file 5.48.

Intl

  • Fixed cloning IntlDateFormatter and MessageFormatter losing PHP-side state such as dateType, timeType, calendar and the message pattern.
  • Fixed a crash when converting with a cloned UConverter that uses toUCallback/fromUCallback.
  • Fixed Collator attribute and strength methods not rejecting an unconstructed Collator.

Lexbor

  • Merge patches lexbor/lexbor@8a14bc0 and lexbor/lexbor@f67ce4b, fixing a heap buffer overflow in :lexbor-contains() parsing and buffer overflows in malformed decode replay.

MBString

  • Fixed bug GH-23106 (mb_strpos() reads past the end of a haystack ending in a truncated UTF-8 sequence).
  • Updated Unicode data tables to Unicode 18.0
  • Fixed mbstring functions emitting surrogates in UTF-8 output and flagging it as valid UTF-8.

MySQLi

  • Fix GH-22854: Fixed failed assertion when accessing mysqli property after failed reconnection.

Opcache

  • Fixed bug GH-23693 (Tracing JIT produces wrong results for a guard on a loop-invariant addition).
  • Fixed OSS-Fuzz #545352966 (default value AST of an SHM-persisted partial).

PDO

  • Fixed PDOStatement::getColumnMeta() reading out of bounds for an invalid column index.
  • Fixed PDOStatement::bindColumn() registering a binding for a column name that is not in the result set.
  • Fixed bug GH-23962 (Destroying a persistent PDO instance rolls back a transaction still in use by another instance).

PGSQL

  • Fixed pg_lo_write() rejecting data containing null bytes.

Posix

  • Reverted the validity check on the flags argument of posix_access().

Readline

  • Fixed a heap over-read in the interactive shell prompt when cli.prompt is set to an empty string.

Session

  • Fixed session_start() continuing after a failed create_sid() when session.use_strict_mode rejects the supplied ID.
  • Fixed exceptions from user-defined create_sid() handlers being replaced by return-value validation errors.

SPL

  • Fixed bug GH-23385 (SplDoublyLinkedList::serialize() use-after-free when __serialize() removes an element).

SQLite

  • Fixed a crash when SQLite3::close() is called from a userland callback.

Standard

  • Fixed bug #60110 (fclose(), file_put_contents(), copy() do not return false properly).
  • Fixed three Windows-only proc_open() defects: an uninitialized PROCESS_INFORMATION, an indeterminate comspec pointer after a failed lookup, and an unchecked CreateFileA() failure.
  • Fix persistent stream context lifetime during shutdown
  • Fixed bug GH-23780 (unserialize('') fails silently).

URI

  • Fix casing of enum cases in UriHostType and UrlHostType to match the RFC and PHP’s naming policy.

Zlib

  • Fixed inflate_init() dropping the preset dictionary for raw streams with a non-default window.

Commit List

Daniel Scherzer

  • Reflection: add regression tests for printing boolean constant values in 2b1f6ad52b
  • Reflection: print boolean constant values as true and false in 0da9d196b1
  • Reflection: add UPGRADING note about changed boolean constant display in 77d4c7f7dd

Ilia Alshanetsky

  • ext/session: Abort strict-mode re-creation when create_sid() fails in 4868dd4e02

Jakub Skopal

Matteo Beccati

Shivam Mathur

Tim Düsterhus

  • standard: Pass unserialize('') through the regular path in GH-23827
Subscribe to PHP.Watch newsletter for monthly updates

You will receive an email on last Wednesday of every month and on major PHP releases with new articles related to PHP, upcoming changes, new features and what's changing in the language. No marketing emails, no selling of your contacts, no click-tracking, and one-click instant unsubscribe from any email you receive.