PHP 8.4.0alpha2: Downloads, Changelog, News

Release Information

Release
8.4.0alpha2
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.0beta4 is the latest QA release in PHP 8.4.

Downloads

Source Code

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

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

Debian-based ZTS Apache: Includes Apache web server integrating PHP as an Apache module.
docker pull php:8.4.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.4.0alpha2-fpm

ChangeLog

Core

  • Fixed bug GH-14801 (Fix build for armv7).
  • Implemented property hooks RFC.

DOM

  • Improve support for template elements.

GD

  • Check overflow/underflow for imagescale/imagefilter.

LibXML

  • Added LIBXML_NO_XXE constant.

Opcache

  • Fixed bug GH-14873 (PHP 8.4 min function fails on typed integer).

PDO

  • Fixed bug GH-14792 (Compilation failure on pdo_* extensions).

Standard

  • Change highlight_string() and print_r() return type to string|true.

Windows

  • Update the icon of the Windows executables, e.g. php.exe.

XML

  • Fixed bug #81481 (xml_get_current_byte_index limited to 32-bit numbers on 64-bit builds).

Commit List

Andy Postnikov

Arnaud Le Blanc

Ayesh Karunaratne

  • ext/standard: change highlight_string()/print_r stub return type from string|bool to string|true in GH-14959
  • Build/Windows: Update the Windows icon as svg and build derivatives from it in e7c16d2a6a

Calvin Buckley

  • Handle BSD checksum and file utilities in GH-14690
  • Declare that this test needs iconv extension in 43e3f577b9
  • Check for iODBC and unixODBC with pkg-config in PDO_ODBC in GH-14963
  • Update versions for PHP 8.4.0alpha2 in b0f97b872f

Christoph M. Becker

David Carlier

David CARLIER

  • ext/sockets: socket_get_option/socket_set_option SO_LINGER_SEC. in GH-14858
  • tsrm_realpath_r for win32 mountpoints copy little optimisations. in GH-14852
  • ext/gd minor corrections concerning image format id for errors. in GH-14887
  • sapi/apache2handler: function using char to const char . in GH-14925
  • sapi/apache: AP_MPMQ_MAX_THREADS is always available. in GH-14934

Denis Ryabov

  • Restore Warning instead of Fatal Error in gd_webp.c in b456ae8d34

Ilija Tovilo

  • Fix syntax error in SWITCH VM in bc32a6bd4e
  • [RFC] Property hooks in GH-13455
  • Add cachegrind support for php-cgi warmups in GH-14952
  • Extract obtaining of fake scope into function in GH-14960
  • Avoid duplicate code in zend_std_write_property() in GH-14966
  • Fix use-after-free in property coercion with __toString() in 8c312ba74b

Joe Cai

  • Fix GH-14930: Custom stream wrapper dir_readdir output truncated to 255 characters in PHP 8.3 in 38501ed48a

Jorg Adam Sowa

  • Check session_create_id() input for null byte in GH-14728
  • Added property hooks words in fuzzer parser dict in GH-14958

Julien Voisin

  • zend_alloc: remove duplicate zend_mm_alloc_large definition in GH-14880

Michael Orlitzky

  • ext/standard/tests: use %d instead of bytes in an overflow message in a8d1955348
  • ext/standard/tests: 32bit wordwrap tests aren't just for Windows in 68a0efedeb
  • ext/standard/tests: strings/wordwrap_memory_limit_32bit.phpt has two outputs in 27dd393be9
  • ext/gd/tests/gh10614.phpt: skip if no PNG support in 09957ab9a8

Niels Dossche

  • Add zend_hash_get_current_pos_ex() in GH-14770
  • Update Lexbor in 162e71e165
  • Implement Dom $innerHTML property in 768900b180
  • Implement Dom\TokenList in GH-13664
  • Fix compilation on libxml2 2.13 in 85705eda71
  • Fix tests for libxml2 2.13.2 in 173a4033a1
  • Fix double entity encoding in soap in ef80266d99
  • Stop relying on the deprecated xmlLastError global in d80be78efd
  • Remove unused code from xml/compat.c in 81cdb8caf2
  • Avoid pointless duplication in _end_element_handler in 87599717c9
  • Fix uninitialized (dummy) memory in php_strtr_array() in GH-14812
  • Implement PHP-specific extensions to Dom in GH-14754
  • Backport libxml2 2.13.2 fixes in GH-14816
  • Fix GH-14808: Unexpected null pointer in Zend/zend_string.h with empty output buffer in 89c3e0346a
  • NEWS for GH-14814 in 1006e1021e
  • Fix GH-13688: Test curl_basic_008 can fail in GH-13693
  • Fix GH-14553: Bug in phpdbg8.3 (also 8.1 and 8.2) echo output - trimmed at NULL byte (?) in 95889979f2
  • Fix test conflict between gzfile_basic.phpt and gzfile_basic2.phpt in 1e5f46fb20
  • ext/xml: Use zend_hash_find_ptr_lc() to avoid allocation in some cases in GH-14840
  • Port XML_GetCurrentByteIndex to public APIs in 8dc799aac7
  • Stop relying on the sax2 flag directly in 6490a18271
  • Stop relying on lastError directly in 823d0588f7
  • Stop setting parse options directly in e5e15fd229
  • NEWS for compatibility in XML in a66afbbe09
  • Fix GH-14834: Error installing PHP when --with-pear is used in 67259e451d
  • Add LIBXML_NO_XXE constant in GH-14844
  • Fix bug #81481 (xml_get_current_byte_index limited to 32-bit numbers on 64-bit builds) (#14845) in b41e90c6f9
  • Remove unused arguments from _external_entity_ref_handler() in 2ab24b0a94
  • Remove pointless const specifier on scalar argument in ec1998987b
  • Remove unused include from xml.c in be2d9fd80e
  • Fix grammar mistake in comment in xml.c in 335d6f023f
  • Stop using reserved names in 19358d638b
  • Handle invalid values better in PHP_XML_OPTION_SKIP_TAGSTART in 292e936ca8
  • Avoid pointless cast to prevent implementation-defined conversion warning in ff3e7679b1
  • Avoid function pointer cast to preserve ability to do CFI in 776939c3db
  • Fix GH-14639: Member access within null pointer in ext/spl/spl_observer.c in 0d4e0c013e
  • Place macro argument in parentheses in 0a1f1dd191
  • Remove unused argument in ac4ed1cca6
  • Stop using reserved name in php_xsl.h in f16590637c
  • Fix narrowing warning in c6d0181c75
  • Stop using reserved names in simplexml in acda7ed5c3
  • Fix typo in simplexml.c in 477c2afb48
  • Fix libxml test compatibility in xsl in f4af8f3837
  • Fix GH-14550: No warning message when Zend DTrace is enabled that opcache.jit is implictly disabled in b44ad27a78
  • Fix memory leak in tidy_repair_file() in c34def581a
  • Improve error message for too long file in ext/tidy in GH-14870
  • Remove unnecessary include statements from dom in dd795022fa
  • Make some pointers const in php_dom.h in 3303c15754
  • Add parenthesis to macro arguments in internal_helpers.h in ae0ba1a5c6
  • Add parenthesis to macro arguments in dom_properties.h in c98a7c1195
  • Stop using reserved names in dom in 013bc53f0c
  • Throw an exception when using the namespace axis in XPath in modern DOM in GH-14871
  • Revert "Stop using reserved names in dom" in dda96768ec
  • Revert "Remove unnecessary include statements from dom" in 33289dfa5c
  • Reapply "Stop using reserved names in dom" in 8825235348
  • Fix GH-14741: Segmentation fault in Zend/zend_types.h in eb8c3cb79a
  • Avoid reconciling when cloning into the same document in GH-14921
  • Fix GH-14873: PHP 8.4 min function fails on typed integer in 1a07bb9252
  • Split off private data from the ns mapper in 4ef7539144
  • Refactor XML serializer such that passing context is easier in 8ad5c64393
  • Support templated content in 6980eba863

Peter Kokot

  • Autotools: Sync PHP_ADD_MAKEFILE_FRAGMENT in GH-14766
  • Autotools: Refactor PCRE JIT checks in GH-14781
  • Autotools: Refactor IPv6 check in GH-14782
  • Refactor HAVE_GETIFADDRS checks in GH-14787
  • Autotools: Refactor getaddrinfo check in GH-14783
  • Autotools: Refactor cache variables in configure.ac and ext/ldap in GH-14784
  • Autotools: Refactor ext/standard cache variables in GH-14799
  • Autotools: Refactor ext/standard strptime check in GH-14800
  • Fix GH-14792: Compilation failure on pdo_* extensions in GH-14797
  • Autotools: Refactor PHP_TEST_WRITE_STDOUT check in GH-14819
  • Autotools: Refactor crypt_r style check in GH-14820
  • Remove HAVE_STRPTIME_DECL_FAILS in GH-14821
  • Autotools: Refactor PHP_FPM_LQ checks in GH-14828
  • Autotools: Refactor PHP_FPM_BUILTIN_ATOMIC in GH-14825
  • Autotools: Refactor PHP_TIME_R_TYPE check in GH-14823
  • Autotools: Refactor PHP_BROKEN_GCC_STRLEN_OPT in GH-14824
  • Fix GH-14798: Valgrind and address sanitizer are not compatible in GH-14826
  • Autotools: Add ZEND_ENABLE_STATIC_TSRMLS_CACHE to skeleton in GH-14827
  • Autotools: Move crypt_r check in GH-14832
  • Autotools: Refactor AVX-512 checks in GH-14831
  • Autotools: Refactor mach_vm_read check in FPM in GH-14830
  • Autotools: Sync CS in phpize and configure.ac in GH-14838
  • Remove unused SMART_STR_PREALLOC in GH-14848
  • Update http links to https and sync www.php.net URLs in GH-14854
  • Enable erase_empty_line in ext/readline in GH-14526
  • Autotools: Sync HAVE_ERASE_EMPTY_LINE help text in GH-14857
  • Autotools: Refactor crypt check in ext/standard in GH-14856
  • Autotools: Simplify POSIX Threads check in GH-14855
  • Autotools: Refactor dmalloc check in GH-14726
  • Remove support for EOL Apache 2.0 and 2.2 in favor of 2.4+ in GH-14664
  • Remove unused HAVE_PHPDBG in GH-14864
  • Autotools: Refactor phpdbg POSIX Threads checks in GH-14865
  • Fix ASVAR* checks in GH-14868
  • Autotools: Remove unused DEBUG_CFLAGS variable in GH-12659
  • Check Apache HTTP Server command-line utility in GH-14173
  • Autotools: Move Apache warning to SAPI's config.m4 in GH-14872
  • Autotools: Remove obsolete crypt link override due to OpenSSL in GH-14863
  • Autotools: Refactor builtin checks in GH-14835
  • Autotools: Use FPM_EXTRA_LIBS for ACL library in GH-14881
  • Autotools: Move php_shtool variable initialization to PHP_INIT_BUILD_SYSTEM in GH-14904
  • Autotools: Refactor ptrace check for PHP-FPM in GH-14907
  • Update config.guess to 2024-01-01 and config.sub to 2024-01-01 in GH-14898
  • Autotools: Fix config.status script syntax in GH-14929
  • Autotools: Sync CS for PHP_EBCDIC and PHP_C_BIGENDIAN in GH-14923
  • Autotools: Simplify the iconv not found error in GH-14931
  • Autotools: Refactor oniguruma invalid KOI8 check in GH-14928
  • Autotools: Enhance PHP_EVAL_LIBLINE M4 macro in GH-14924
  • Autotools: Use FPM_EXTRA_LIBS for systemd library in GH-14883
  • Autotools: Use FPM_EXTRA_LIBS for apparmor library in GH-14884
  • Autotools: Use FPM_EXTRA_LIBS for SELinux library in GH-14885
  • Autotools: Use LIBS for appending -lonig in GH-14936
  • Autotools: Refactor PDO_ODBC_CHECK_HEADER in GH-14935
  • Make ext/fileinfo/generate_patch.sh simpler to use in GH-14941
  • Autotools: Trim redundant newlines in PHP_ADD_BUILD_DIR in GH-14946
  • Autotools: Refactor curl config.m4 in GH-14948
  • Autotools: Quote all PHP_ADD_BUILD_DIR arguments in GH-14947
  • Autotools: Refactor PHP-FPM /proc/pid filename check in GH-14949
  • Autotools: Quote RE2C_FLAGS argument in GH-14950
  • Fix #78757: Enhance sendmail log notice (#14955) in 8e8dc40765
  • Autotools: Sync quotes in PHP_INSTALL_HEADERS in 1fe854ebfa
  • Autotools: Sync LIBS and LDFLAGS handling in GH-14956
  • Autotools: Add missing sigil in AC_CASE and fix Autoconf syntax in GH-14967

Saki Takamachi

  • Added scale to bc_compare argument in GH-14802

Tim Düsterhus

  • Replace @deprecated by #[\Deprecated] for internal functions / class constants in GH-14750

Vladimir Vrzić

  • ext/pcntl: Added new function pcntl_waitid in c2fd071db7
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.