Release Information
- Release Type
- Bug Fix Release
- Release Status
- QA Release
- Branch Status
- Upcoming Release
PHP 8.5 is a development version, and is not recommended for production use. PHP 8.5 is scheduled to reach General Availability on 2025-11-20.
PHP 8.5.0beta1 is the latest QA release in PHP 8.5.
Downloads
Source Code
Git Clone
Use Git to clone the 8.5.0alpha2 tag from the PHP Git repository.
git clone https://github.com/php/php-src.git --depth 1 --branch php-8.5.0alpha2
How to compile PHP
PHP can be compiled by setting up the dependencies, building the configure script (
Detailed articles on how to compile PHP are available for Ubuntu/Debian based systems and Fedora/RHEL based systems.
./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.
Windows binaries
Non-Thread Safe Builds
Non-Thread Safe (NTS) builds are single-threaded PHP builds. They can be used on web servers that integrate PHP over FastCGI protocol, such as Nginx, Caddy, and IIS.
php-8.5.0alpha2-x64NTS.zip (32.33 MiB)
php-8.5.0alpha2-x86NTS.zip (29.01 MiB)
Thread-Safe Builds
Thread-Safe (TS) builds are multi-thread PHP builds, often used to integrate PHP as a Server API for multithreaded servers. The most common use case is using PHP as an Apache module.
php-8.5.0alpha2-x64TS.zip (32.46 MiB)
php-8.5.0alpha2-x86TS.zip (29.02 MiB)
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.5.0alpha2-cli-alpine
Debian-based: More compatible with other components, complete, and are widely used.
docker pull php:8.5.0alpha2-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.5.0alpha2-fpm-alpine
Debian-based ZTS Apache: Includes Apache web server integrating PHP as an Apache module.
docker pull php:8.5.0alpha2-apache
Debian-based NTS FPM: PHP-FPM, can be integrated with Nginx, Caddy, and other web servers over Fast CGI.
docker pull php:8.5.0alpha2-fpm
ChangeLog
Core
- Fix OSS-Fuzz #427814452 (pipe compilation fails with assert).
DOM
- Make cloning DOM node lists, maps, and collections fail.
- Added Dom`Element::getElementsByClassName()`.
PDO_ODBC
- Fetch larger block sizes and better handle SQL_NO_TOTAL when calling SQLGetData.
Standard
- Optimized pack().
- Fixed bug GH-19070 (setlocale($type, NULL) should not be deprecated).
URI
- Return the singleton UrlValidationErrorType instances from Uri\WhatWg\Url instead of creating new objects that are different from the singleton.
Commit List
Calvin Buckley
- Use C23
unreachable()
when possible in GH-19077 - pdo_odbc: Don't fetch 256 byte blocks for long columns in GH-10809
DanielEScherzer
- release-process: update based on 8.5.0alpha1 in GH-19004
- release-process: update based on 8.5.0alpha1 announcement in GH-19028
- Remove broken
zend_get_zendleng()
declaration in GH-19032 ext/standard/string.c
: don't useSTR_EMPTY_ALLOC()
in GH-19033- Remove old exception class getters in GH-19043
- Make
zend_register_*_constant()
functions return pointers, use them in GH-19029 - Deprecate returning non-string values from a user output handler in GH-18932
- Remove old
zend_string
compatibility aliases in GH-19034 - Deprecate producing output in a user output handler in GH-19067
Daniel Scherzer
- gen_stub: add StringBuilder class for managing known strings in ecdff3b563
- gen_stub: use StringBuilder for attribute strings in 0c920ecb07
- Arginfo: add and use known strings for attribute values in 142e378618
David CARLIER
ext/sockets
:socket_addrinfo_lookup
narrowing down socket family check to AF_INET/AF_INET6 only. in GH-19040
Demon
- Zend: fix undefined symbol 'execute_ex' on Windows ARM64 GH-19064;
ext/gd
: fixemmintrin.h
not found on Windows ARM64 in 2be3aa86f0 ext/gd
: Drop useless and doubtful MSVC specific code (libgd/libgd@f1480ab) in 12fa8c637fext/gd
: Drop useless and doubtful MSVC specific code (libgd/libgd@f1480ab) in 974526b244
Dmitry Stogov
- Update IR in e8ae27bf8a
- Revert "Update IR" in 9abb0fb0c4
Gina Peter Banyard
- Zend: Return anonymous closure names in
zend_get_callable_name_ex()
in GH-19011 ext/spl
: Add tests for disabled sort functions in faef004250ext/spl
: Refactor ArrayObject sort methods in 50ddf6a68f- sapi/fuzzer: Fetch function and call it directly instead of using a zval to hold the name in GH-19030
- ext/standard/stream: Use FCC instead of zval for notification callback in GH-19024
ext/session
: convert some globals tozend_string
in 43fe9fd171ext/session
: copy zstr instead of initializing a new one in 9c68853023ext/session
: Concert save_path to zstr in eaee504c4dext/session
: Use smart_str_append when possible in c529e2f85bext/session
: UseZEND_STRL()
in ac3807ee8dext/session
: Use is_numeric_str helper in b83484df97ext/session
: convert global session_name to zstr in f5166b3bb6ext/session
: Usezend_string
for some session globals in 766ccc2210ext/session
: Initialize variable with default value in db01dbc4eeext/session
: Minor code cleanups in c3dac0f8b6ext/session
: get rid of sname_len field in 36358bad84ext/pcntl
: Use bool type for some module globals in 89e4de8d7bext/pcntl
: Use uint8_t type for num_signals module global in 3de6695ae8ext/pcntl
: Pack module globals struct in 22f2a1d47bext/soap/php_http.c
: Fix memory leak of header value in 85a49d4198
Ilija Tovilo
- Disable JIT on Apple Silicon + ZTS in b6660634b4
- Fix lineno for constructor property promotion errors in 9460dbe906
Jakub Zelenka
- Introduce OpenSSL INI for selecting libctx in GH-18768
- Use custom OpenSSL libctx for NCONF in GH-19130
- Fix bug #80770: openssl cafile not used in SNI SSL_CTX in 6b2b60f683
Kasey Jenkins
- Fix empty_fcall_info C++ missing-field-initializers warning (GH-19084) in cea0918352
Máté Kocsis
- Update uriparser to commit 8c06d in 8bb6b81c60
- Add the Uri\Rfc3986\Uri class to
ext/uri
without wither support in GH-18836
Niels Dossche
- curl: Remove incorrect string release on error in 11ea995ff3
- Fix leak when path is too long in
ZipArchive::extractTo()
in 09c223de00 - Fix GH-18990, bug #81029, bug #47314: SOAP HTTP socket not closing on object destruction in 69328ba304
- soap: Get decompression function directly from function table and call it in 32f0d24e1f
- soap: Avoid redundant copying of http body string in e6e0887005
- Don't deref soap private properties in 8fdd434bb5
- Use ZVAL_NULL() directly for Z_CLIENT_USE_PROXY_P() in aa0e8bf568
- Fix OSS-Fuzz #428983568 and #428760800 in 4aac98f145
- Fix stream double free in phar in 32344c4dc4
- Fix phar crash and file corruption with SplFileObject in 405be1c940
- Optimize
pack()
in 6cc21c4ee6 - Fix GH-19070: setlocale($type, NULL) should not be deprecated in c4183fba00
- Make cloning DOM node lists, maps, and collections fail in e013b4a91e
- dom: Remove unnecessary objmap ptr null checks in GH-19092
- Fix GH-19094: Attaching class with no Iterator implementation to MultipleIterator causes crash in 71472268c0
- dom: Rename get_named_item -> get_ns_named_item, and has_named_item -> has_ns_named_item in a2d65354a0
- Refactor
dom_html_collection_named_item()
in f11ea2ae13 - Fix OSS-Fuzz #427814452 in 8712f4bf19
- Implement GH-18550: Implement getElementsByClassName() in GH-19108
Peter Kokot
- Remove conditional checks for ssize_t type in GH-18996
- Update re2c minimum versions in Windows checks and docs in GH-19039
- Use <
winsock2.h
> instead of legacy <winsock.h
> in GH-19037 - Fix -Wuseless-escape warnings emitted by re2c in GH-19050
- Autoconf: Move getlogin check for HAVE_GETLOGIN to
ext/posix
in GH-19058 ext/gd
: Make TGA always available in GH-19105ext/gd
: Make BMP always available in GH-19115- Autotools,
ext/gd
: Ensure test program compiles without warnings in GH-19116 - GitHub: Remove
ext/phar/php_phar.h
in GH-19124 - Fix missing strnlen symbol on Solaris 10 in GH-19109
Remi Collet
SakiTakamachi
Tim Düsterhus
- uri: Do not create new
UrlValidationErrorType
objects in GH-19009 - random: Fix error message formatting for
Randomizer::getFloat()
in GH-19008 - random: Remove useless
zend_string
allocation inrandomizer_common_init()
in GH-19007 - Zend:
const
ify various parameters inzend_object_handlers
andzend_lazy_objects
in GH-19019 - uri: Do not overwrite
defaultMemoryManager
in GH-19042 - Zend: Add
zend_check_method_accessible()
to DRY method visibility checks in GH-18995 - Zend: Make
EG(fake_scope)
aconst
zend_class_entry*`` in GH-19060 ext/xml
: Suppress libxml deprecation for_xmlParserCtxt.inState
in GH-19131
Volker Dusch
- Update Version to 8.5.0alpha2 in 24b32f6a89
Yudai Takada
- Fix typo in SAPI and ADD_SOURCES description in upgrade notes in GH-19095
- Remove unnecessary semicolon in match rule in GH-19096
- Refactor newline handling in
zend_scan_escape_string
to use HANDLE_NEWLINE macro in GH-19112
Zheng Yu
- Fix unreachable code in URL output handler in GH-19056