Release Information
- 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 (
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.4.0alpha2-x64NTS.zip (31.24 MiB)
php-8.4.0alpha2-x86NTS.zip (28.07 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.4.0alpha2-x64TS.zip (31.39 MiB)
php-8.4.0alpha2-x86TS.zip (28.14 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.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()
andprint_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
- Fix build for armv7 in GH-14801
Arnaud Le Blanc
- Fix test race condition in 070779c874
- Fix stack limit on ASAN/MSAN in GH-14771
- Fix stack limit on MSAN in GH-14829
- Fix stack limit under valgrind in GH-14818
Ayesh Karunaratne
ext/standard
: changehighlight_string()
/print_r
stub return type fromstring|bool
tostring|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
- Make
bug49278.phpt
more resilient in de354683a0 - Update MSVC compiler version detection in GH-14810
- Add test case for GH-13774 in 6d0db52896
- Fix skip condition of
gh13082.phpt
in 02a60be24d
David Carlier
- Fix GH-14775: range overflow on negative step in 15bea9ed74
- Fix GH-14774 time_sleep_until overflow in 237518763f
ext/gd
: checking imagescale/imagefilter invalid values in 23a55babb4ext/pcntl
adding Pcntl namespace for Qos class in 17cf7b381a
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 duplicatezend_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
andgzfile_basic2.phpt
in 1e5f46fb20 ext/xml
: Usezend_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 toPHP_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
andPHP_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