PHP 8.4.0alpha3: Downloads, Changelog, News

Release Information

Release
8.4.0alpha3
PHP Version
PHP 8.4
Release Date
Release Type
Bug Fix Release
Release Status
QA Release
Branch Status
Upcoming Release

PHP 8.4 is a development version, and is not recommended for production use. PHP 8.4 is scheduled to reach General Availability on 2024-11-21.
PHP 8.4.1 is the latest QA release in PHP 8.4.

Downloads

Source Code

Git Clone
Use Git to clone the 8.4.0alpha3 tag from the PHP Git repository.
git clone https://github.com/php/php-src.git --depth 1 --branch php-8.4.0alpha3
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.

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.
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.

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.4.0alpha3-cli-alpine

Debian-based: More compatible with other components, complete, and are widely used.
docker pull php:8.4.0alpha3-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.4.0alpha3-fpm-alpine

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

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

Commit List

Arnaud Le Blanc

  • Use zend_std_build_properties() to access zend_object.properties in 1fbb666545
  • Followup GH-14996 in GH-15062
  • Hint the opcache shm mapping location only when JIT is enabled in 929536b697
  • Fix build on platforms without JIT support in GH-15069
  • Fix test on alpine/musl in GH-15072
  • Fix destruction of generator running in fibers during shutdown in GH-15158

Bob Weinand

Calvin Buckley

  • Gate SOCK_DCCP behind its own ifdef in GH-15031

Christoph M. Becker

  • Drop support for OpenSSL < 1.1.0 on Windows in f590b34530
  • Revert "Skip bug45161.phpt on Windows" in 355baf982e
  • Update the php-sdk-binary-tools to php-sdk-2.3.0 in 93a9a9b4a4
  • Port "gd2: use existing overflow2() rather than ad-hoc version" in GH-15090
  • Fix GH-15087 IntlChar::foldCase()'s $option is not optional in 5fbda73099
  • Fix GH-15094: php_random_default_engine() is not C++ conforming in da72ac11f6
  • Add missing cstddef include for C++ builds in ab449a7e46
  • Fix type incompatibility in assignment in af789afbe8

David CARLIER

  • main: update Winsock api version to 2.2 in GH-14909
  • zend build making sigjmp_buf and api check as mandatory. in GH-14942
  • ext/pgsql: db metadata simplification for table names. in GH-15036
  • Fix GH-15102: ext/pgsql use after free on persistent connection renewal. in GH-15115

David Carlier

  • ext/curl: curl_error using curl_easy_strerror if CURLOPT_ERRORBUFFER in efd00b8ff0
  • ext/pgsql: pg_convert/pg_insert/pg_update/pg_delete caching regexes in ba54cebb44
  • sapi/fpm: retiring solaris /dev/poll support proposal in 3713c02803
  • ext/intl: SpoofChecker::setAllowedChars support in 21418b5bb5
  • Fix GH-14780: p(f)sockopen overflow on timeout argument in ba909d7c43
  • fix GH-14785 pedantic error in 350c10d985
  • ext/readline: fix global readline vars when updating rl_line_buffer in a7d856d9bf

Dmitry Stogov

Gina Peter Banyard

  • ext/spl: Add ArrayObject test with property hooks in GH-15005
  • ext/gmp: Make GMP class final in GH-15121

Ilija Tovilo

  • De-duplicate readonly property modification error message in GH-14972
  • Fix indirect readonly error messages in GH-14979
  • Fix comments between -> and keyword in b368db204f
  • Throw error for recursive comparison, instead of fatal in GH-14989
  • Compile in opcache without COMPILE_IGNORE_INTERNAL_CLASSES in GH-15025
  • Fix throw in IS_IDENTICAL in JIT in GH-15103

Julien Voisin

  • Add a check for required extensions in benchmark.php in GH-14811

Levi Morrison

LoongT4o

  • Fix the JIT buffer relocation failure at the corner case in GH-11266

lwlinux

  • sapi/cli/php_cli.c: fix typos in GH-15057

Michael Orlitzky

  • ext/dba/tests: sort expected test output in GH-14962

Niels Dossche

  • Fix references in request_parse_body() options array in f58a3c392f
  • Use fast ZPP for ParentNode manipulation methods in GH-14981
  • Delete bug78987.phpt test in GH-14982
  • Fix bug #55639: Digest autentication dont work in 911dc5b46c
  • Resolve TODOs in ext/dom around nullable content in GH-14999
  • Optimize ext/dom $wholeText in GH-15001
  • Don't open-code string value accesses in xpath in GH-15007
  • Fix trampoline leak in xpath callables in a59103feed
  • Avoid duplicating the filename string when profiling in XSL in GH-15010
  • Convert forgotten efree to zend_string_release in 81da53fccd
  • Cleanup DOMAttr::isId() in GH-15016
  • Deduplicate NULL checks in ext/dom in GH-15015
  • Add assertion to error path in streams.c in GH-15027
  • Fix GH-15020: Memory leak in Zend/Optimizer/escape_analysis.c in 03d73182d9
  • Fix GH-15023: Memory leak in Zend/zend_ini.c in 8c19efdc97
  • Fix GH-15028: Memory leak in ext/phar/stream.c in 5996227f88
  • Remove impossible condition in 74116a4ade
  • Move stricterror fetch to dom_child_removal_preconditions() body in 29466223d0
  • Convert more common methods in dom/node.c to fast ZPP in GH-15043
  • Remove bogus tree setting code from parentnode/tree.c in GH-15044
  • Fix memory leaks in ext/tidy basedir restriction code in 8de7ccb29b
  • Use OBJ_RELEASE instead of ZVAL_OBJ + zval_ptr_dtor in php_dom.c in GH-15052
  • Factor out object creation code in ext/tidy in c4e1f2b4e8
  • Throw instead of silently failing when creating a too long text node in 9435f4d55b
  • Update Lexbor in c952f5625a
  • Make more pointers const in ext/tidy in e736d7cd8a
  • Consistently check zend_result in the same way in 09c0455f64
  • Use RETVAL_BOOL or RETURN_BOOL in ext/tidy in 1d045a5c97
  • Fix error handling in tidy constructor in 186788f149
  • Remove useless return in 9b78e5ff1c
  • Fix GH-15034: Integer overflow on stream_notification_callback byte_max parameter with files bigger than 2GB in cfcc2a3fda
  • Fix GH-14286 (ffi enum type (when enum has no name) make memory leak) in c0de7214aa
  • Fix passing non-finite timeout values in stream functions in fdcfd62b9b
  • Fix bogus fallthrough path in firebird_handle_get_attribute() in b8e9c5ba6a
  • Fix uninitialized memory in network.c in 40551dd74b
  • Add tidyNode::getNextSibling() and tidyNode::getPreviousSibling() in ad452086d9
  • Fix CI failure after Curl update in GH-15124
  • Avoid string duplications in simplexml in GH-15122
  • Fix nightly failure in test variation due to number of temp variables varying when observers are enabled in 4df858602a
  • Fix GH-15137: Unexpected null pointer in Zend/zend_smart_str.h in GH-15138
  • Fix CI failure on macOS after Curl update in fdae7c23f0
  • Fix GH-15123: var_dump doesn't actually work on XMLReader in GH-15130

Peter Kokot

  • Fix xmlreader extension phpize build in 71c520c74f
  • Autotools: Fix Autoconf syntax (erroneous dnl) in GH-14987
  • Autotools: Expand m4_normalize sooner in GH-15018
  • Autotools: Quote M4 arguments in GH-15033
  • Autotools: Quote M4 arguments in GH-15045
  • Autotools: Sync CS in ext/standard process check in GH-15049
  • Add upgrading note about Autoconf cache variables in GH-14985
  • Append -Wno-implicit-fallthrough flag conditionally in GH-13331
  • Autotools: Fix unused result and variables warnings in flush IO check in GH-15056
  • Autotools: Append rt library to FPM_EXTRA_LIBS in GH-15059
  • Sync required phar dependencies in GH-15058
  • Autotools: Check for crypt and cryptr with AC* macros in GH-15060
  • Autotools: Normalize ext/dom sources in GH-15073
  • Autotools: Normalize ext/gd sources in GH-15086
  • Autotools: Normalize pcre sources in GH-15085
  • Autotools: Normalize ext/opcache sources in GH-15083
  • Autotools: Sync CS in opcache Capstone check in GH-15084
  • Autotools: Quote PHP_NEW_EXTENSION arguments in GH-15081
  • Autotools: Normalize ext/fileinfo sources in GH-15082
  • Autotools: Normalize ext/mbstring installed headers in GH-15097
  • Add pcre dependency as required to ext/filter in GH-15099
  • Autotools: Quote PHP_CONFIG_NICE arguments in fa7ee84f0b
  • Autotools: Quote PHP_ADD_LIB* arguments in GH-15112
  • Autotools: Fix rl_erase_empty_line check in GH-15109
  • Autotools: Normalize DTrace sources argument in GH-15111
  • Autotools: Quote macro arguments in a7f0fe1f33
  • Autotools: Quote AC_CHECK_LIB arguments in GH-15116
  • Autotools: Sync PHP_SETUP_* M4 macros in GH-15117
  • Autotools: Quote M4 macro arguments in ef8e792962
  • Autotools: Replace PHP_DEF_HAVE with AC_DEFINE_UNQUTED in GH-15119
  • Autotools: Quote and fix PHP_SELECT_SAPI arguments in GH-15118
  • Autotools: Sync CS in XML related extensions in GH-15110
  • Autotools: Remove dead code in GH-15128
  • Autotools: Simplify PHP_ALWAYS_SHARED macro in GH-15129
  • Autotools: Replace PHP_EXT_DIR with $ext_dir in GH-15133
  • Autotools: Sync PHP_EXT_* M4 macros in GH-15134
  • Autotools: Fix ext/standard sources in GH-15131
  • Autotools: Quote PHP_CHECK_LIBRARY arguments in GH-15136
  • Autotools: Normalize and quote all PHP_NEW_EXTENSION arguments in GH-15144
  • Autotools: Append hash and opcache build directories in GH-15132
  • Autotools: Normalize headers arguments in GH-15149
  • Autotools: Quote PHP_ADD_SOURCES* macros arguments in GH-15146
  • Autotools: Sync shared argument CS in GH-15141
  • Sync HAVE_ICONV preprocessor macro usage in GH-15148
  • Remove duplicate ZEND_ENABLE_STATIC_TSRMLS_CACHE flag in GH-15080
  • Autotools: Update skeleton extension config.m4 template in GH-15147
  • Autotools: Move HAVE_DTRACE to configure.ac in GH-15160
  • Autotools: Sync CS in bz2 extension in GH-15163
  • Autotools: Sync CS in enchant extension in 0970fd439a
  • Autotools: Fix xml extension dependency in GH-15162
  • Autotools: Remove unused variable FREETYPE2_FOUND in 79af1b5280

Pol Dellaiera

Saki Takamachi

  • Updated firebird version in windows ci in GH-14912
  • ext/pdo_firebird: Added Pdo`Firebird::ATTR_API_VERSION` in GH-14916
  • Fixed parent class of stub in GH-14990
  • ext/bcmath: Moved macros and added a test in 3c9ab6eb71
  • ext/pdo_firebird: Do not implement new constants in PDO core in GH-14995
  • ext/pdo_firebird: Added getApiVersion() and removed from getAttribute in GH-15004
  • random: Optimize Randomizer::getBytesFromString() in GH-14894
  • Zend: Add ZEND_BYTES_SWAP32/ZEND_BYTES_SWAP64 in GH-14910
  • Fixed segmentation fault when attribute value was not set in GH-15065
  • round(): Corrected test name and fixed UPGRADING in GH-14943
  • Update versions for PHP 8.4.0alpha3 in 5e0c372de0

Simonov Denis

  • PDO_Firebird: Supported Firebird 4.0 datatypes in GH-14897

Tim Düsterhus

  • zend_compile: Fully remove ZEND_DIM_ALTERNATIVE_SYNTAX in GH-14974
  • RFC: Add the RoundingMode enum in GH-14833
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.

Support PHP.Watch — If you find the articles, version information, Codex, and other PHP.Watch contributions useful, consider supporting through GitHub Sponsors. Your sponsorship helps dedicate more time to creating valuable content and improving the PHP community. Together, we can keep the momentum going — thank you for your support!

Thanks to the highest tier sponsor: @TomasVotruba for your generous support to keep PHP.Watch moving 💜