Author: Daniel Scherzer (DanielEScherzer)
Date: 2025-11-20T16:37:31+02:00
Commit:
https://github.com/php/web-php/commit/d87b8188c777d77365d6a4eae7f313ca5660ae5e
Raw diff:
https://github.com/php/web-php/commit/d87b8188c777d77365d6a4eae7f313ca5660ae5e.diff
Announce PHP 8.5.0
Changed paths:
A archive/entries/2025-11-20-3.xml
A releases/8_5_0.php
M ChangeLog-8.php
M archive/archive.xml
M include/release-qa.php
M include/version.inc
Diff:
diff --git a/ChangeLog-8.php b/ChangeLog-8.php
index 075068b6b8..6e6db6dc18 100644
--- a/ChangeLog-8.php
+++ b/ChangeLog-8.php
@@ -3,10 +3,500 @@
include_once __DIR__ . '/include/prepend.inc';
include_once __DIR__ . '/include/changelogs.inc';
-$MINOR_VERSIONS = ['8.4', '8.3', '8.2', '8.1', '8.0'];
+$MINOR_VERSIONS = ['8.5', '8.4', '8.3', '8.2', '8.1', '8.0'];
changelog_header(8, $MINOR_VERSIONS);
?>
+<a id="PHP_8_5"></a>
+
+<section class="version" id="8.5.0"><!-- {{{ 8.5.0 -->
+<h3>Version 8.5.0</h3>
+<b><?php release_date('20-Nov-2025'); ?></b>
+<ul><li>Core:
+<ul>
+ <li>Added the #[\NoDiscard] attribute to indicate that a function's return
value is important and should be consumed.</li>
+ <li>Added the (void) cast to indicate that not using a value is
intentional.</li>
+ <li>Added get_error_handler(), get_exception_handler() functions.</li>
+ <li>Added support for casts in constant expressions.</li>
+ <li>Added the pipe (|>) operator.</li>
+ <li>Added support for `final` with constructor property promotion.</li>
+ <li>Added support for configuring the URI parser for the FTP/FTPS as well as
the SSL/TLS stream wrappers as described in
https://wiki.php.net/rfc/url_parsing_api#plugability.</li>
+ <li>Added PHP_BUILD_PROVIDER constant.</li>
+ <li>Added PHP_BUILD_DATE constant.</li>
+ <li>Added support for Closures and first class callables in constant
expressions.</li>
+ <li>Add support for backtraces for fatal errors.</li>
+ <li>Add clone-with support to the clone() function.</li>
+ <li>Add RFC 3986 and WHATWG URL compliant APIs for URL parsing and
manipulation (kocsismate, timwolla)</li>
+ <li>Fixed AST printing for immediately invoked Closure.</li>
+ <li>Properly handle __debugInfo() returning an array reference.</li>
+ <li>Properly handle reference return value from __toString().</li>
+ <li>Improved error message of UnhandledMatchError for
zend.exception_string_param_max_len=0.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 15753); ?> and <?php
githubissuel('php/php-src', 16198); ?> (Bind traits before parent class).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 17951); ?> (memory_limit is
not always limited by max_memory_limit).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20183); ?> (Stale
EG(opline_before_exception) pointer through eval).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20113); ?> (Missing new
Foo(...) error in constant expressions).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19844); ?> (Don't bail when
closing resources on shutdown).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20177); ?> (Accessing
overridden private property in get_object_vars() triggers assertion error).</li>
+ <li>Fix OSS-Fuzz #447521098 (Fatal error during sccp shift eval).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20002); ?> (Broken build on
*BSD with MSAN).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19352); ?>
(Cross-compilation with musl C library).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19765); ?>
(object_properties_load() bypasses readonly property checks).</li>
+ <li>Fixed hard_timeout with --enable-zend-max-execution-timers.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19839); ?> (Incorrect
HASH_FLAG_HAS_EMPTY_IND flag on userland array).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19823); ?>
(register_argc_argv deprecation emitted twice when using OPcache).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19480); ?> (error_log
php.ini cannot be unset when open_basedir is configured).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19719); ?> (Allow empty
statements before declare(strict_types)).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19934); ?> (CGI with
auto_globals_jit=0 causes uouv).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19613); ?> (Stale array
iterator pointer).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19679); ?>
(zend_ssa_range_widening may fail to converge).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19681); ?> (PHP_EXPAND_PATH
broken with bash 5.3.0).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18850); ?> (Repeated
inclusion of file with __halt_compiler() triggers "Constant already defined"
warning).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19476); ?> (pipe operator
fails to correctly handle returning by reference).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19081); ?> (Wrong lineno in
property error with constructor property promotion).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 17959); ?> (Relax missing
trait fatal error to error exception).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18033); ?> (NULL-ptr
dereference when using register_tick_function in destructor).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18026); ?> (Improve
"expecting token" error for ampersand).</li>
+ <li>The report_memleaks INI directive has been deprecated.</li>
+ <li>Fixed OSS-Fuzz #439125710 (Pipe cannot be used in write context).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19548); ?> (Shared memory
violation on property inheritance).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19544); ?> (GC treats
ZEND_WEAKREF_TAG_MAP references as WeakMap references).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18373); ?> (Don't substitute
self/parent with anonymous class).</li>
+ <li>Fix support for non-userland stream notifiers.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19305); ?> (Operands may be
being released during comparison).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19306); ?> (Generator can be
resumed while fetching next value from delegated Generator).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19326); ?> (Calling
Generator::throw() on a running generator with a non-Generator delegate
crashes).</li>
+ <li>Fix OSS-Fuzz #427814452 (pipe compilation fails with assert).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 16665); ?> (\array and
\callable should not be usable in class_alias).</li>
+ <li>Use `clock_gettime_nsec_np()` for high resolution timer on macOS if
available.</li>
+ <li>Make `clone()` a function.</li>
+ <li>Introduced the TAILCALL VM, enabled by default when compiling with
Clang>=19 on x86_64 or aarch64.</li>
+ <li>Enacted the follow-up phase of the "Path to Saner Increment/Decrement
operators" RFC, meaning that incrementing non-numeric strings is now
deprecated. (Girgias).</li>
+ <li>Various closure binding issues are now deprecated.</li>
+ <li>Constant redeclaration has been deprecated.</li>
+ <li>Marks the stack as non-executable on Haiku.</li>
+ <li>Deriving $_SERVER['argc'] and $_SERVER['argv'] from the query string is
now deprecated.</li>
+ <li>Using null as an array offset or when calling array_key_exists() is now
deprecated.</li>
+ <li>The disable_classes INI directive has been removed.</li>
+ <li>The locally predefined variable $http_response_header is deprecated.</li>
+ <li>Non-canonical cast names (boolean), (integer), (double), and (binary)
have been deprecated.</li>
+ <li>The $exclude_disabled parameter of the get_defined_functions() function
has been deprecated, as it no longer has any effect since PHP 8.0.</li>
+ <li>Terminating case statements with a semicolon instead of a colon has been
deprecated.</li>
+ <li>The backtick operator as an alias for shell_exec() has been
deprecated.</li>
+ <li>Returning null from __debugInfo() has been deprecated.</li>
+ <li>Support #[\Override] on properties.</li>
+ <li>Destructing non-array values (other than NULL) using [] or list() now
emits a warning.</li>
+ <li>Casting floats that are not representable as ints now emits a
warning.</li>
+ <li>Casting NAN to other types now emits a warning.</li>
+ <li>Implement <?php githubissuel('php/php-src', 15680); ?> (Enhance
zend_dump_op_array to properly represent non-printable characters in string
literals).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 17442); ?> (Engine UAF with
reference assign and dtor).</li>
+ <li>Do not use RTLD_DEEPBIND if dlmopen is available.</li>
+</ul></li>
+<li>BCMath:
+<ul>
+ <li>Simplify `bc_divide()` code.</li>
+ <li>If the result is 0, n_scale is set to 0.</li>
+ <li>If size of BC_VECTOR array is within 64 bytes, stack area is now
used.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20006); ?> (Power of 0 of
BcMath number causes UB).</li>
+</ul></li>
+<li>Bz2:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19810); ?> (Broken bzopen()
stream mode validation).</li>
+</ul></li>
+<li>CLI:
+<ul>
+ <li>Add --ini=diff to print INI settings changed from the builtin
default.</li>
+ <li>Drop support for -z CLI/CGI flag.</li>
+ <li>Fixed <?php githubissuel('php/php-src', 17956); ?> - development server
404 page does not adapt to mobiles.</li>
+ <li>Fix useless "Failed to poll event" error logs due to EAGAIN in CLI
server with PHP_CLI_SERVER_WORKERS.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19461); ?> (Improve error
message on listening error with IPv6 address).</li>
+</ul></li>
+<li>COM:
+<ul>
+ <li>Fixed property access of PHP objects wrapped in variant.</li>
+ <li>Fixed method calls for PHP objects wrapped in variant.</li>
+</ul></li>
+<li>Curl:
+<ul>
+ <li>Added CURLFOLLOW_ALL, CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY
values for CURLOPT_FOLLOWLOCATION curl_easy_setopt option.</li>
+ <li>Added curl_multi_get_handles().</li>
+ <li>Added curl_share_init_persistent().</li>
+ <li>Added CURLINFO_USED_PROXY, CURLINFO_HTTPAUTH_USED, and
CURLINFO_PROXYAUTH_USED support to curl_getinfo.</li>
+ <li>Add support for CURLINFO_CONN_ID in curl_getinfo() (thecaliskan)</li>
+ <li>Add support for CURLINFO_QUEUE_TIME_T in curl_getinfo()
(thecaliskan)</li>
+ <li>Add support for CURLOPT_SSL_SIGNATURE_ALGORITHMS.</li>
+ <li>The curl_close() function has been deprecated.</li>
+ <li>The curl_share_close() function has been deprecated.</li>
+ <li>Fix cloning of CURLOPT_POSTFIELDS when using the clone operator instead
of the curl_copy_handle() function to clone a CurlHandle.</li>
+</ul></li>
+<li>Date:
+<ul>
+ <li>Fix undefined behaviour problems regarding integer overflow in extreme
edge cases.</li>
+ <li>The DATE_RFC7231 and DateTimeInterface::RFC7231 constants have been
deprecated.</li>
+ <li>Fixed date_sunrise() and date_sunset() with partial-hour UTC offset.</li>
+ <li>Fixed <?php githubissuel('php/php-src', 17159); ?>: "P" format for
::createFromFormat swallows string literals.</li>
+ <li>The __wakeup() magic method of DateTimeInterface, DateTime,
DateTimeImmutable, DateTimeZone, DateInterval, and DatePeriod has been
deprecated in favour of the __unserialize() magic method.</li>
+</ul></li>
+<li>DOM:
+<ul>
+ <li>Added Dom\Element::$outerHTML.</li>
+ <li>Added Dom\Element::insertAdjacentHTML().</li>
+ <li>Added $children property to ParentNode implementations.</li>
+ <li>Make cloning DOM node lists, maps, and collections fail.</li>
+ <li>Added Dom\Element::getElementsByClassName().</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18877); ?>
(\Dom\HTMLDocument querySelectorAll selecting only the first when using ~ and
:has).</li>
+ <li>Fix getNamedItemNS() incorrect namespace check.</li>
+</ul></li>
+<li>Enchant:
+<ul>
+ <li>Added enchant_dict_remove_from_session().</li>
+ <li>Added enchant_dict_remove().</li>
+ <li>Fix missing empty string checks.</li>
+</ul></li>
+<li>EXIF:
+<ul>
+ <li>Add OffsetTime* Exif tags.</li>
+ <li>Added support to retrieve Exif from HEIF file.</li>
+ <li>Fix OSS-Fuzz #442954659 (zero-size box in HEIF file causes infinite
loop).</li>
+ <li>Fix OSS-Fuzz #442954659 (Crash in exif_scan_HEIF_header).</li>
+ <li>Various hardening fixes to HEIF parsing.</li>
+</ul></li>
+<li>FileInfo:
+<ul>
+ <li>The finfo_close() function has been deprecated.</li>
+ <li>The $context parameter of the finfo_buffer() function has been
deprecated as it is ignored.</li>
+ <li>Upgrade to file 5.46.</li>
+ <li>Change return type of finfo_close() to true.</li>
+</ul></li>
+<li>Filter:
+<ul>
+ <li>Added support for configuring the URI parser for FILTER_VALIDATE_URL as
described in https://wiki.php.net/rfc/url_parsing_api#plugability.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 16993); ?> (filter_var_array
with FILTER_VALIDATE_INT|FILTER_NULL_ON_FAILURE should emit warning for invalid
filter usage).</li>
+</ul></li>
+<li>FPM:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19817); ?> (Decode
SCRIPT_FILENAME issue in php 8.5).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19989); ?> (PHP 8.5 FPM
access log lines also go to STDERR).</li>
+ <li>Fixed <?php githubissuel('php/php-src', 17645); ?> (FPM with httpd
ProxyPass does not decode script path).</li>
+ <li>Make FPM access log limit configurable using log_limit.</li>
+ <li>Fixed failed debug assertion when php_admin_value setting fails.</li>
+ <li>Fixed <?php githubissuel('php/php-src', 8157); ?> (post_max_size
evaluates .user.ini too late in php-fpm).</li>
+</ul></li>
+<li>GD:
+<ul>
+ <li><?php bugfix(68629); ?> (Transparent artifacts when using
imagerotate).</li>
+ <li><?php bugfix(64823); ?> (ZTS GD fails to find system TrueType font).</li>
+ <li>Fix incorrect comparison with result of php_stream_can_cast().</li>
+ <li>The imagedestroy() function has been deprecated.</li>
+</ul></li>
+<li>Iconv:
+<ul>
+ <li>Extends the ICONV_CONST preprocessor for illumos/solaris.</li>
+</ul></li>
+<li>Intl:
+<ul>
+ <li>Bumped ICU requirement to ICU >= 57.1.</li>
+ <li>IntlDateFormatter::setTimeZone()/datefmt_set_timezone() throws an
exception with uninitialised classes or clone failure.</li>
+ <li>Added DECIMAL_COMPACT_SHORT/DECIMAL_COMPACT_LONG for NumberFormatter
class.</li>
+ <li>Added Locale::isRightToLeft to check if a locale is written right to
left.</li>
+ <li>Added null bytes presence in locale inputs for Locale class.</li>
+ <li>Added grapheme_levenshtein() function.</li>
+ <li>Added Locale::addLikelySubtags/Locale::minimizeSubtags to handle
adding/removing likely subtags to a locale.</li>
+ <li>Added IntlListFormatter class to format a list of items with a locale,
operands types and units.</li>
+ <li>Added grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(),
grapheme_strripos(), grapheme_substr(), grapheme_strstr(), grapheme_stristr()
and grapheme_levenshtein() functions add $locale parameter (Yuya Hamada).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 11952); ?> (Fix locale
strings canonicalization for IntlDateFormatter and NumberFormatter).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18566); ?> ([intl] Weird
numeric sort in Collator).</li>
+ <li>Fix return value on failure for resourcebundle count handler.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19307); ?> (PGO builds of
shared ext-intl are broken).</li>
+ <li>Intl's internal error mechanism has been modernized so that it indicates
more accurately which call site caused what error. Moreover, some ext/date
exceptions have been wrapped inside a IntlException now.</li>
+ <li>The intl.error_level INI setting has been deprecated.</li>
+</ul></li>
+<li>LDAP:
+<ul>
+ <li>Allow ldap_get_option to retrieve global option by allowing NULL for
connection instance ($ldap).</li>
+</ul></li>
+<li>MBstring:
+<ul>
+ <li>Updated Unicode data tables to Unicode 17.0.</li>
+</ul></li>
+<li>MySQLi:
+<ul>
+ <li>Fixed bugs <?php githubissuel('php/php-src', 17900); ?> and <?php
githubissuel('php/php-src', 8084); ?> (calling mysqli::__construct twice).</li>
+ <li>The mysqli_execute() alias function has been deprecated.</li>
+</ul></li>
+<li>MySQLnd:
+<ul>
+ <li>Added mysqlnd.collect_memory_statistics to ini quick reference.</li>
+</ul></li>
+<li>ODBC:
+<ul>
+ <li>Removed driver-specific build flags and support.</li>
+ <li>Remove ODBCVER and assume ODBC 3.5.</li>
+</ul></li>
+<li>Opcache:
+<ul>
+ <li>Make OPcache non-optional (Arnaud, timwolla)</li>
+ <li>Added opcache.file_cache_read_only.</li>
+ <li>Updated default value of opcache.jit_hot_loop.</li>
+ <li>Log a warning when opcache lock file permissions could not be
changed.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20012); ?> (heap buffer
overflow in jit).</li>
+ <li>Partially fixed bug <?php githubissuel('php/php-src', 17733); ?> (Avoid
calling wrong function when reusing file caches across differing
environments).</li>
+ <li>Disallow changing opcache.memory_consumption when SHM is already set
up.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 15074); ?> (Compiling
opcache statically into ZTS PHP fails).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 17422); ?> (OPcache bypasses
the user-defined error handler for deprecations).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19301); ?> (opcache build
failure).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20081); ?> (access to
uninitialized vars in preload_load()).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20121); ?> (JIT broken in
ZTS builds on MacOS 15).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19875); ?> (JIT 1205
segfault on large file compiled in subprocess).</li>
+ <li>Fixed segfault in function JIT due to NAN to bool warning.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19984); ?> (Double-free of
EG(errors)/persistent_script->warnings on persist of already persisted
file).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19889); ?> (race condition
in zend_runtime_jit(), zend_jit_hot_func()).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19669); ?> (assertion
failure in zend_jit_trace_type_to_info_ex).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19831); ?> (function JIT may
not deref property value).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19486); ?> (Incorrect opline
after deoptimization).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19601); ?> (Wrong JIT stack
setup on aarch64/clang).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19388); ?> (Broken
opcache.huge_code_pages).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19657); ?> (Build fails on
non-glibc/musl/freebsd/macos/win platforms).</li>
+ <li>Fixed ZTS OPcache build on Cygwin.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19493); ?> (JIT variable not
stored before YIELD).</li>
+</ul></li>
+<li>OpenSSL:
+<ul>
+ <li>Added openssl.libctx INI that allows to select the OpenSSL library
context type and convert various parts of the extension to use the custom
libctx.</li>
+ <li>Add $digest_algo parameter to openssl_public_encrypt() and
openssl_private_decrypt() functions.</li>
+ <li>Implement #81724 (openssl_cms_encrypt only allows specific ciphers).</li>
+ <li>Implement #80495 (Enable to set padding in openssl_(sign|verify).</li>
+ <li>Implement #47728 (openssl_pkcs7_sign ignores new openssl flags).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19994); ?>
(openssl_get_cipher_methods inconsistent with fetching).</li>
+ <li>Fixed build when --with-openssl-legacy-provider set.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19369); ?> (8.5 | Regression
in openssl_sign() - support for alias algorithms appears to be broken).</li>
+ <li>The $key_length parameter for openssl_pkey_derive() has been
deprecated.</li>
+</ul></li>
+<li>Output:
+<ul>
+ <li>Fixed calculation of aligned buffer size.</li>
+</ul></li>
+<li>PCNTL:
+<ul>
+ <li>Extend pcntl_waitid with rusage parameter.</li>
+</ul></li>
+<li>PCRE:
+<ul>
+ <li>Remove PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK from pcre compile options.</li>
+</ul></li>
+<li>PDO:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20095); ?> (Incorrect class
name in deprecation message for PDO mixins).</li>
+ <li>Driver specific methods and constants in the PDO class are now
deprecated.</li>
+ <li>The "uri:" DSN scheme has been deprecated due to security concerns with
DSNs coming from remote URIs.</li>
+</ul></li>
+<li>PDO_ODBC:
+<ul>
+ <li>Fetch larger block sizes and better handle SQL_NO_TOTAL when calling
SQLGetData.</li>
+</ul></li>
+<li>PDO_PGSQL:
+<ul>
+ <li>Added Iterable support for PDO::pgsqlCopyFromArray.</li>
+ <li>Implement <?php githubissuel('php/php-src', 15387); ?>
Pdo\Pgsql::setAttribute(PDO::ATTR_PREFETCH, 0) or Pdo\Pgsql::prepare(…, [
PDO::ATTR_PREFETCH => 0 ]) make fetch() lazy instead of storing the whole
result set in memory (Guillaume Outters)</li>
+</ul></li>
+<li>PDO_SQLITE:
+<ul>
+ <li>Add PDO\Sqlite::ATTR_TRANSACTION_MODE connection attribute.</li>
+ <li>Implement <?php githubissuel('php/php-src', 17321); ?>: Add
setAuthorizer to Pdo\Sqlite.</li>
+ <li>PDO::sqliteCreateCollation now throws a TypeError if the callback has a
wrong return type.</li>
+ <li>Added Pdo_Sqlite::ATTR_BUSY_STATEMENT constant to check if a statement
is currently executing.</li>
+ <li>Added Pdo_Sqlite::ATTR_EXPLAIN_STATEMENT constant to set a statement in
either EXPLAIN_MODE_PREPARED, EXPLAIN_MODE_EXPLAIN,
EXPLAIN_MODE_EXPLAIN_QUERY_PLAN modes.</li>
+ <li>Fix bug <?php githubissuel('php/php-src', 13952); ?> (sqlite PDO::quote
silently corrupts strings with null bytes) by throwing on null bytes.</li>
+</ul></li>
+<li>PGSQL:
+<ul>
+ <li>Added pg_close_stmt to close a prepared statement while allowing its
name to be reused.</li>
+ <li>Added Iterable support for pgsql_copy_from.</li>
+ <li>pg_connect checks if connection_string contains any null byte,
pg_close_stmt check if the statement contains any null byte.</li>
+ <li>Added pg_service to get the connection current service identifier.</li>
+ <li>Fix segfaults when attempting to fetch row into a non-instantiable class
name.</li>
+</ul></li>
+<li>Phar:
+<ul>
+ <li>Fix potential buffer length truncation due to usage of type int instead
of type size_t.</li>
+ <li>Fixed memory leaks when verifying OpenSSL signature.</li>
+</ul></li>
+<li>POSIX:
+<ul>
+ <li>Added POSIX_SC_OPEN_MAX constant to get the number of file descriptors a
process can handle.</li>
+ <li>posix_ttyname() sets last_error to EBADF on invalid file descriptors,
posix_isatty() raises E_WARNING on invalid file descriptors, posix_fpathconf
checks invalid file descriptors.</li>
+ <li>posix_kill and posix_setpgid throws a ValueError on invalid
process_id.</li>
+ <li>posix_setpgid throws a ValueError on invalid process_group_id,
posix_setrlimit throws a ValueError on invalid soft_limit and hard_limit
arguments.</li>
+</ul></li>
+<li>Random:
+<ul>
+ <li>Moves from /dev/urandom usage to arc4random_buf on Haiku.</li>
+</ul></li>
+<li>Reflection:
+<ul>
+ <li>Added ReflectionConstant::getExtension() and ::getExtensionName().</li>
+ <li>Added ReflectionProperty::getMangledName() method.</li>
+ <li>ReflectionConstant is no longer final.</li>
+ <li>The setAccessible() methods of various Reflection objects have been
deprecated, as those no longer have an effect.</li>
+ <li>ReflectionClass::getConstant() for constants that do not exist has been
deprecated.</li>
+ <li>ReflectionProperty::getDefaultValue() for properties without default
values has been deprecated.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 12856); ?>
(ReflectionClass::getStaticPropertyValue() returns UNDEF zval for uninitialized
typed properties).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 15766); ?>
(ReflectionClass::__toString() should have better output for enums).</li>
+ <li>Fix <?php githubissuel('php/php-src', 19691); ?> (getModifierNames() not
reporting asymmetric visibility).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 17927); ?> (Reflection: have
some indication of property hooks in `_property_string()`).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19187); ?>
(ReflectionNamedType::getName() prints nullable type when retrieved from
ReflectionProperty::getSettableType()).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20217); ?>
(ReflectionClass::isIterable() incorrectly returns true for classes with
property hooks).</li>
+</ul></li>
+<li>SAPI:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18582); ?> and #81451:
http_response_code() does not override the status code generated by
header().</li>
+</ul></li>
+<li>Session:
+<ul>
+ <li>session_start() throws a ValueError on option argument if not a hashmap
or a TypeError if read_and_close value is not compatible with int.</li>
+ <li>Added support for partitioned cookies.</li>
+ <li>Fix RC violation of session SID constant deprecation attribute.</li>
+ <li>Fixed <?php githubissuel('php/php-src', 19197); ?>: build broken with
ZEND_STRL usage with memcpy when implemented as macro.</li>
+</ul></li>
+<li>SimpleXML:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 12231); ?> (SimpleXML xpath
should warn when returning other return types than node lists).</li>
+</ul></li>
+<li>SNMP:
+<ul>
+ <li>snmpget, snmpset, snmp_get2, snmp_set2, snmp_get3, snmp_set3 and
SNMP::__construct() throw an exception on invalid hostname, community timeout
and retries arguments.</li>
+</ul></li>
+<li>SOAP:
+<ul>
+ <li>Added support for configuring the URI parser for
SoapClient::__doRequest() as described in
https://wiki.php.net/rfc/url_parsing_api#plugability.</li>
+ <li>Implement request #55503 (Extend __getTypes to support
enumerations).</li>
+ <li>Implement request #61105 (Support Soap 1.2 SoapFault Reason Text lang
attribute).</li>
+ <li><?php bugfix(49169); ?> (SoapServer calls wrong function, although "SOAP
action" header is correct).</li>
+ <li>Fix namespace handling of WSDL and XML schema in SOAP, fixing at least
<?php githubissuel('php/php-src', 16320); ?> and bug #68576.</li>
+ <li><?php bugfix(70951); ?> (Segmentation fault on invalid WSDL cache).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19773); ?> (SIGSEGV due to
uninitialized soap_globals->lang_en).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19226); ?> (Segfault when
spawning new thread in soap extension).</li>
+</ul></li>
+<li>Sockets:
+<ul>
+ <li>Added IPPROTO_ICMP/IPPROTO_ICMPV6 to create raw socket for ICMP
usage.</li>
+ <li>Added TCP_FUNCTION_BLK to change the TCP stack algorithm on FreeBSD.</li>
+ <li>Added IP_BINDANY for a socket to bind to any address.</li>
+ <li>Added SO_BUSY_POOL to reduce packets poll latency.</li>
+ <li>Added UDP_SEGMENT support to optimise multiple large datagrams over UDP
if the kernel and hardware supports it.</li>
+ <li>Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for
socket_shutdown().</li>
+ <li>Added TCP_FUNCTION_ALIAS, TCP_REUSPORT_LB_NUMA,
TCP_REUSPORT_LB_NUMA_NODOM, TCP_REUSPORT_LB_CURDOM, TCP_BBR_ALGORITHM
constants.</li>
+ <li>socket_set_option() catches possible overflow with
SO_RCVTIMEO/SO_SNDTIMEO with timeout setting on windows.</li>
+ <li>socket_create_listen() throws an exception on invalid port value.</li>
+ <li>socket_bind() throws an exception on invalid port value.</li>
+ <li>socket_sendto() throws an exception on invalid port value.</li>
+ <li>socket_addrinfo_lookup throws an exception on invalid hints value
types.</li>
+ <li>socket_addrinfo_lookup throws an exception if any of the hints value
overflows.</li>
+ <li>socket_addrinfo_lookup throws an exception if one or more hints entries
has an index as numeric.</li>
+ <li>socket_set_option with the options
MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP will throw an exception if its value
is not a valid array/object.</li>
+ <li>socket_getsockname/socket_create/socket_bind handled AF_PACKET family
socket.</li>
+ <li>socket_set_option for multicast context throws a ValueError when the
socket family is not of AF_INET/AF_INET6 family.</li>
+</ul></li>
+<li>Sodium:
+<ul>
+ <li>Fix overall theoretical overflows on zend_string buffer allocations.</li>
+</ul></li>
+<li>SPL:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20101); ?>
(SplHeap/SplPriorityQueue serialization exposes INDIRECTs).</li>
+ <li>Improve __unserialize() hardening for SplHeap/SplPriorityQueue.</li>
+ <li>Deprecate ArrayObject and ArrayIterator with objects.</li>
+ <li>Unregistering all autoloaders by passing the spl_autoload_call()
function as a callback argument to spl_autoload_unregister() has been
deprecated. Instead if this is needed, one should iterate over the return value
of spl_autoload_functions() and call spl_autoload_unregister() on each
value.</li>
+ <li>The SplObjectStorage::contains(), SplObjectStorage::attach(), and
SplObjectStorage::detach() methods have been deprecated in favour of
SplObjectStorage::offsetExists(), SplObjectStorage::offsetSet(), and
SplObjectStorage::offsetUnset() respectively.</li>
+</ul></li>
+<li>Sqlite:
+<ul>
+ <li>Added Sqlite3Stmt::busy to check if a statement is still being
executed.</li>
+ <li>Added Sqlite3Stmt::explain to produce an explain query plan from the
statement.</li>
+ <li>Added Sqlite3Result::fetchAll to return all results at once from a
query.</li>
+</ul></li>
+<li>Standard:
+<ul>
+ <li>Add HEIF/HEIC support to getimagesize.</li>
+ <li>Added support for partitioned cookies.</li>
+ <li>Implement #71517 (Implement SVG support for getimagesize() and
friends).</li>
+ <li>Implement <?php githubissuel('php/php-src', 19188); ?>: Add support for
new INI mail.cr_lf_mode.</li>
+ <li>Optimized PHP html_entity_decode function.</li>
+ <li>Minor optimization to array_chunk().</li>
+ <li>Optimized pack().</li>
+ <li>Fixed crypt() tests on musl when using --with-external-libcrypt (Michael
Orlitzky).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18062); ?>
(is_callable(func(...), callable_name: $name) for first class callables returns
wrong name).</li>
+ <li>Added array_first() and array_last().</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18823); ?> (setlocale's 2nd
and 3rd argument ignores strict_types).</li>
+ <li>Fixed exit code handling of sendmail cmd and added warnings.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 18897); ?> (printf: empty
precision is interpreted as precision 6, not as precision 0).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20257); ?> (mail() heap
overflow with an empty message in lf mode).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 20201); ?> (AVIF images
misdetected as HEIF after introducing HEIF support in getimagesize()).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19926); ?> (reset internal
pointer earlier while splicing array while COW violation flag is still
set).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19801); ?> (leaks in
var_dump() and debug_zval_dump()).</li>
+ <li>Fixed <?php githubissuel('php/php-src', 14402); ?> (SplPriorityQueue,
SplMinHeap, and SplMaxHeap lost their data on serialize()).</li>
+ <li>Fixed <?php githubissuel('php/php-src', 19610); ?> (Deprecation warnings
in functions taking as argument).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19577); ?> (Avoid integer
overflow when using a small offset and PHP_INT_MAX with LimitIterator).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19153); ?> (#[\Attribute]
validation should error on trait/interface/enum/abstract class).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19070); ?> (setlocale($type,
NULL) should not be deprecated).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 16649); ?> (UAF during
array_splice).</li>
+ <li>Passing strings which are not one byte long to ord() is now
deprecated.</li>
+ <li>Passing integers outside the interval [0, 255] to chr() is now
deprecated.</li>
+ <li>The socket_set_timeout() alias function has been deprecated.</li>
+ <li>Passing null to readdir(), rewinddir(), and closedir() to use the last
opened directory has been deprecated.</li>
+</ul></li>
+<li>Streams:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 16889); ?> (stream_select()
timeout useless for pipes on Windows).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19798); ?>: XP_SOCKET XP_SSL
(Socket stream modules): Incorrect condition for Win32/Win64.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 14506); ?> (Closing a
userspace stream inside a userspace handler causes heap corruption).</li>
+ <li>Avoid double conversion to string in php_userstreamop_readdir().</li>
+</ul></li>
+<li>Tests:
+<ul>
+ <li>Allow to shuffle tests even in non-parallel mode.</li>
+</ul></li>
+<li>Tidy:
+<ul>
+ <li>tidy::__construct/parseFile/parseString methods throw an exception if
the configuration argument is invalid.</li>
+ <li>Fixed <?php githubissuel('php/php-src', 19021); ?> (improved
tidyOptGetCategory detection).</li>
+</ul></li>
+<li>Tokenizer:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 19507); ?> (Corrupted result
after recursive tokenization during token_get_all()).</li>
+</ul></li>
+<li>Windows:
+<ul>
+ <li>Fixed bug <?php githubissuel('php/php-src', 10992); ?> (Improper long
path support for relative paths).</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 16843); ?> (Windows phpize
builds ignore source subfolders).</li>
+ <li>Fix <?php githubissuel('php/php-src', 19722); ?> (_get_osfhandle asserts
in debug mode when given a socket).</li>
+</ul></li>
+<li>XML:
+<ul>
+ <li>The xml_parser_free() function has been deprecated.</li>
+</ul></li>
+<li>XMLWriter:
+<ul>
+ <li>Improved performance and reduce memory consumption.</li>
+</ul></li>
+<li>XSL:
+<ul>
+ <li>Implement request #30622 (make $namespace parameter functional).</li>
+</ul></li>
+<li>Zlib:
+<ul>
+ <li>gzfile, gzopen and readgzfile, their "use_include_path" argument is now
a boolean.</li>
+ <li>Fixed bug <?php githubissuel('php/php-src', 16883); ?> (gzopen() does
not use the default stream context when opening HTTP URLs).</li>
+ <li>Implemented <?php githubissuel('php/php-src', 17668); ?> (zlib streams
should support locking).</li>
+</ul></li>
+<li>Zip:
+<ul>
+ <li>Fixed missing zend_release_fcall_info_cache on the following methods
ZipArchive::registerProgressCallback() and ZipArchive::registerCancelCallback()
on failure.</li>
+</ul></li>
+</ul>
+<!-- }}} --></section>
+
+
+
<a id="PHP_8_4"></a>
<section class="version" id="8.4.15"><!-- {{{ 8.4.15 -->
diff --git a/archive/archive.xml b/archive/archive.xml
index 547fde4396..6a43da71f5 100644
--- a/archive/archive.xml
+++ b/archive/archive.xml
@@ -9,6 +9,7 @@
<uri>http://php.net/contact</uri>
<email>[email protected]</email>
</author>
+ <xi:include href="entries/2025-11-20-3.xml"/>
<xi:include href="entries/2025-11-20-2.xml"/>
<xi:include href="entries/2025-11-20-1.xml"/>
<xi:include href="entries/2025-11-13-1.xml"/>
diff --git a/archive/entries/2025-11-20-3.xml b/archive/entries/2025-11-20-3.xml
new file mode 100644
index 0000000000..1c0d7c1469
--- /dev/null
+++ b/archive/entries/2025-11-20-3.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<entry xmlns="http://www.w3.org/2005/Atom">
+ <title>PHP 8.5.0 Released!</title>
+ <id>https://www.php.net/archive/2025.php#2025-11-20-3</id>
+ <published>2025-11-20T14:20:19+00:00</published>
+ <updated>2025-11-20T14:20:19+00:00</updated>
+ <link href="https://www.php.net/index.php#2025-11-20-3" rel="alternate"
type="text/html"/>
+ <link href="https://www.php.net/archive/2025.php#2025-11-20-3" rel="via"
type="text/html"/>
+ <category term="releases" label="New PHP release"/>
+ <category term="frontpage" label="PHP.net frontpage news"/>
+ <content type="xhtml">
+ <div xmlns="http://www.w3.org/1999/xhtml"><p>The PHP development team
announces the immediate availability of PHP 8.5.0. This release marks the
latest minor release of the PHP language.</p>
+
+<p>PHP 8.5 comes with numerous improvements and new features such as:</p>
+<ul>
+ <li>New "URI" extension</li>
+ <li>New pipe operator (|>)</li>
+ <li>Clone With</li>
+ <li>New #[\NoDiscard] attribute</li>
+ <li>Support for closures, casts, and first class callables in constant
expressions</li>
+ <li>And much much more...</li>
+</ul>
+<p>
+ For source downloads of PHP 8.5.0 please visit our <a
href="https://www.php.net/downloads.php">downloads page</a>,
+ Windows source and binaries can be found on <a
href="https://windows.php.net/download/">windows.php.net/download/</a>.
+ The list of changes is recorded in the <a
href="https://www.php.net/ChangeLog-8.php#8.5.0">ChangeLog</a>.
+</p>
+<p>
+ The <a href="https://php.net/manual/en/migration85.php">migration guide</a>
is available in the PHP Manual.
+ Please consult it for the detailed list of new features and backward
incompatible changes.
+</p>
+<p>Kudos to all the contributors and supporters!</p>
+</div>
+ </content>
+</entry>
diff --git a/include/release-qa.php b/include/release-qa.php
index c49614c776..cc43f45b1d 100644
--- a/include/release-qa.php
+++ b/include/release-qa.php
@@ -101,10 +101,10 @@
'active' => true,
'release' => [
'type' => 'RC',
- 'number' => 5,
- 'sha256_bz2' =>
'0d5f8b55a0f5350c55526e34372037348e0bc959d14d7f8e25d7b3237be2fc63',
- 'sha256_gz' =>
'c57233825070238a00dee8712487b4859fa35f597e3c365adddfad13578ffb87',
- 'sha256_xz' =>
'4964cdbaf2447afba100c4199ec9c59c41ca4cc23db8d1e38ac7e57aab028954',
+ 'number' => 0,
+ 'sha256_bz2' => '',
+ 'sha256_gz' => '',
+ 'sha256_xz' => '',
'date' => '13 Nov 2025',
'baseurl' => 'https://downloads.php.net/~daniels/',
],
diff --git a/include/version.inc b/include/version.inc
index 14942e4179..08ddd87f21 100644
--- a/include/version.inc
+++ b/include/version.inc
@@ -18,6 +18,20 @@
$RELEASES = (function () {
$data = [];
+ /* PHP 8.5 Release */
+ $data['8.5'] = [
+ 'version' => '8.5.0',
+ 'date' => '20 Nov 2025',
+ 'tags' => [''], // Set to ['security'] for security releases.
+ 'sha256' => [
+ // WARNING: Order of SHA256 entries here is DIFFERENT from the
+ // order in the manifest
+ 'tar.gz' =>
'dc3651369c9b63320dd4ea8e272c6a23f18e50f67c13d10ee368c86961dbd10f',
+ 'tar.bz2' =>
'cd16cb045b34a6cec6a83008e1b335f365c7a832fcc483df82308664c6d021f9',
+ 'tar.xz' =>
'39cb6e4acd679b574d3d3276f148213e935fc25f90403eb84fb1b836a806ef1e',
+ ]
+ ];
+
/* PHP 8.4 Release */
$data['8.4'] = [
'version' => '8.4.15',
diff --git a/releases/8_5_0.php b/releases/8_5_0.php
new file mode 100644
index 0000000000..eee873f794
--- /dev/null
+++ b/releases/8_5_0.php
@@ -0,0 +1,30 @@
+<?php
+$_SERVER['BASE_PAGE'] = 'releases/8_5_0.php';
+include_once __DIR__ . '/../include/prepend.inc';
+site_header('PHP 8.5.0 Release Announcement');
+?>
+<h1>PHP 8.5.0 Release Announcement</h1>
+
+<p>The PHP development team announces the immediate availability of PHP 8.5.0.
This release marks the latest minor release of the PHP language.</p>
+
+<p>PHP 8.5 comes with numerous improvements and new features such as:</p>
+<ul>
+ <li>New "URI" extension</li>
+ <li>New pipe operator (|>)</li>
+ <li>Clone With</li>
+ <li>New #[\NoDiscard] attribute</li>
+ <li>Support for closures, casts, and first class callables in constant
expressions</li>
+ <li>And much much more...</li>
+</ul>
+<p>
+ For source downloads of PHP 8.5.0 please visit our <a
href="https://www.php.net/downloads.php">downloads page</a>,
+ Windows source and binaries can be found on <a
href="https://windows.php.net/download/">windows.php.net/download/</a>.
+ The list of changes is recorded in the <a
href="https://www.php.net/ChangeLog-8.php#8.5.0">ChangeLog</a>.
+</p>
+<p>
+ The <a href="https://php.net/manual/en/migration85.php">migration guide</a>
is available in the PHP Manual.
+ Please consult it for the detailed list of new features and backward
incompatible changes.
+</p>
+<p>Kudos to all the contributors and supporters!</p>
+
+<?php site_footer();