PHP 8.4.0beta4: Downloads, Changelog, News

Release Information

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

Downloads

Source Code

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

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

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

ChangeLog

Core

  • Fixed bug GH-15408 (MSan false-positve on zend_max_execution_timer).
  • Fixed bug GH-15438 (Hooks on constructor promoted properties without visibility are ignored).
  • Fixed bug GH-15419 (Missing readonly+hook incompatibility check for readonly classes).
  • Fixed bug GH-15187 (Various hooked object iterator issues).
  • Fixed bug GH-15456 (Crash in get_class_vars() on virtual properties).
  • Fixed bug GH-15501 (Windows HAVE_<header>_H macros defined to 1 or undefined).
  • Fixed bug GH-15565 (--disable-ipv6 during compilation produces error EAI_SYSTEM not found).
  • Implemented asymmetric visibility for properties.

Curl

  • Added CURLOPT_PREREQFUNCTION Curl option to set a custom callback after the connection is established, but before the request is performed.
  • Added CURLOPT_SERVER_RESPONSE_TIMEOUT, which was formerly known as CURLOPT_FTP_RESPONSE_TIMEOUT.

Date

  • Fixed bug GH-13773 (DatePeriod not taking into account microseconds for end date).

DOM

  • Fixed bug GH-15551 (Segmentation fault (access null pointer) in ext/dom/xml_common.h).
  • Fixed bug GH-15570 (Segmentation fault (access null pointer) in ext/dom/html5_serializer.c).

FPM

  • Added memory peak to the scoreboard / status page.

MySQLnd

  • Fixed bug GH-15432 (Heap corruption when querying a vector).

Opcache

  • Fixed bug GH-15490 (Building of callgraph modifies preloaded symbols).
  • Fixed bug GH-15178 (Assertion in tracing JIT on hooks).

PDO_MYSQL

  • mysqlnd: support ER_CLIENT_INTERACTION_TIMEOUT.

Session

  • Emit warnings for non-positive values of session.gc_divisor and negative values of session.gc_probability.

Standard

  • The "allowed_classes" option for unserialize() now throws TypeErrors and ValueErrors if it is not an array of class names.

Streams

  • Fixed bug GH-14930 (Custom stream wrapper dir_readdir output truncated to 255 characters in PHP 8.3).

Commit List

Ayesh Karunaratne

  • ext/curl: Add CURLOPT_PREREQFUNCTION in GH-13255

Bernd Kuhls

Christoph M. Becker

David CARLIER

David Carlier

Derick Rethans

Flavio Heleno

  • Add PHP-FPM memory peak to the scoreboard in 67aac59cfc

Florian Engelhardt

  • Export opcache shared globals in GH-15543

Gina Peter Banyard

  • ext/opcache/ZendAccelerator.c: Restrict MD5 header include to Windows in GH-15418
  • ext/standard: Throw a RequestParseBodyException instead of InvalidArgumentException in GH-15468
  • ext/standard: Improve checking of allowed_classes option in GH-15267
  • ext/mysqli: Minor clean-up in GH-15526
  • main/network: Use more appropriate types in GH-15511
  • Zend: Voidify virtualcwd(de)activate() in GH-15554
  • Phar offset exist issue with entry classes not based on PharFileInfo in GH-14503

Gina Peter Bnayard

  • Zend/zend_object_handlers.c: Remove unused include in 4a4aae540b
  • ext/phar: Use standard C types in 04320d2fba
  • ext/standard: Remove deprecated php_uint32 and php_int32 typedefs in 3e05c86c35
  • Remove unused ext/standard/basic_functions.h header inclusions in 3813ad10dc
  • ext/standard/mail.c: Reduce scope of some variable declarations in 962aba3b12
  • ext/standard/mail.c: change return type of php_mail() to bool in 312c919a2d
  • ext/standard/mail.c: Move macros out of the header in a171b20c7c
  • ext/standard/mail.c: Move php_mail_header_value_error_type enum out of header in ebfef2505d
  • ext/standard/crc32: Use zend_result return type and remove unused header in 775ca03eb8
  • ext/standard/file.c: Use RETURN_BOOL() instead of if-else in 369eeb73ca
  • ext/standard/file.c: Use more appropriate types in 9147687b6d
  • Zend: Add helper for "cannot be empty" ValueError in 96d572a18e
  • Use new helper function for "cannot be empty" ValueErrors in e7c4d54d65
  • ext/standard/exec.c: Use ZPP path modifier to check for nul bytes in 10738141d7
  • ext/gettext: Remove duplicate domain length checks in f6c464fee5
  • ext/dba: Remove duplicate check for empty mode in ad8480304d
  • ext/dom: Use standard wording for ValueError in 6d9a74cde0
  • ext/standard/string.c: use standard wording for ValueError in str_pad() in 997199e938
  • ext/mbstring: Use standard wording for ValueError in 9a2fdbec48
  • ext/pcntl: Use standard wording for ValueError in c811d58953
  • Use "must not" instead of "cannot" wording in 5853cdb73d
  • ext/hash: Specialize copy function typedef in c26e77c4c5
  • ext/hash: Make return type zend_result for serialize function typedef in 937c4e4ac6
  • ext/phar: Use standard naming for PHP functions in 947f72c181
  • ext/phar: Use size_t for string lenghts in 009039d447
  • ext/phar: Refactor part of tar.c in 03be1ac0ad
  • ext/phar: Adjust return types for methods that always return true in d015af60df
  • ext/phar: Move some header functions into util.c in 81d232fed5
  • ext/phar: Use more specialized types instead of int in 20f7e08687
  • ext/phar: Simplify a return condition in Phar::offsetExists() in 6f986837ec
  • ext/phar: Add some const qualifiers in 51bb8cfcb5
  • ext/phar: Use zend_string instead of char* len pair in d55074ede4
  • ext/phar: Reorganise some headers in f9c69bc392

Go Kudo

  • libtool: Don't remove gcov *.gcno files in GH-15441
  • Fix MSan false-positive in zend_max_execution_timer in GH-15408
  • zend_max_execution_timer: fix gcc compatibility in GH-15447
  • zend_max_execution_timer: fix gcc compatibility in GH-15447
  • Update extension skeleton .gitignore in GH-15542

Ilija Tovilo

Jakub Zelenka

Jorg Adam Sowa

  • ext/session: session_create_id() now throws a ValueError for large prefix in GH-15338
  • ext/session: Warn when providing invalid values for session.gc_probability and session.gc_divisor in ff69f334f1

Juliette

  • PHP 8.4 | Exit as function: fix incorrect parameter name in GH-15433

Kamil Tekiela

  • Remove PHP 6 leftovers and fix mysqli tests in GH-15464
  • Clean up mysqli tests in GH-15473
  • Remove mysqli_change_user_get_lock.phpt in GH-15482
  • Remove MYSQLI_STMT_ATTR_PREFETCH_ROWS constant in GH-15485
  • Drop mysqli_stmt_result_metadata_sqltests.phpt in GH-15488
  • Fix error message and add UPGRADING entry in 4baf6a643b
  • Drop MYSQLI_CURSOR_TYPE_FOR_UPDATE & MYSQLI_CURSOR_TYPE_SCROLLABLE in GH-15486
  • Fix a mistake in mysqli test in 144c086c46
  • MySQL 9: Add support for VECTOR type in GH-15431
  • Update UPGRADING in c5ae122b2f
  • Fix mysqli_stmt_get_result.phpt in GH-15495
  • Remove MYSQLI_TYPE_INTERVAL constant in c290996db6
  • Fix mysqli_fetch_field_types.phpt in 0775b99d5e
  • Deprecate disabling use_only_cookies in GH-13578
  • Remove ifdefs from stub file in 082b964dfa
  • Remove unsupported mysqlnd options in 2446500d97
  • Remove dead code in 195d59a83c

Marc Bennewitz

Máté Kocsis

  • Suppress deprecation notices when ext/dom properties are accessed by the get_debug_info handler in GH-15530
  • Fix registration of internal readonly child classes in GH-15459

Niels Dossche

  • Fix NULL pointer dereference with NULL content in legacy nodes in GH-15546
  • Correctly specify secret instead of seed in ext/hash deprecation message in GH-15557
  • Fix NULL pointer dereference with NULL content in legacy nodes in title getting in GH-15558
  • Fix GH-15551: Segmentation fault (access null pointer) in ext/dom/xml_common.h in 9af574c26e
  • Fix GH-15565: --disable-ipv6 during compilation produces error EAI_SYSTEM not found in 4b6575a1f9
  • Update Lexbor in GH-15573
  • Fix GH-15570: Segmentation fault (access null pointer) in ext/dom/html5_serializer.c in 690ce6d5d4
  • Allow ZEND_ACC_VIRTUAL to be used to not have property backing storage without resorting to hooks in f78d5cfcd2
  • Use virtual annotation in XMLReader in 6c63c48a7e
  • Improve virtual property error message in baac01f594

Orlando Thöny

  • FPM: Remove usage of non-existing MAX_LINE_LENGTH constant in GH-5634

Peter Kokot

  • Autotools: Sync CS in sapi/fuzzer in GH-15417
  • Autotools: Sync CS in fpm SAPI in GH-15412
  • Autotools: Fix PHP_EMBED_TYPE variable substitution in GH-15414
  • Autotools: Add note about PHP_ADD_EXTENSION_DEP usage in 8853cf3ae9
  • Autotools: Sync CS in sapi/cgi in GH-15407
  • Autotools: Use AS_* macros in apache2handler SAPI in GH-15423
  • Autotools: Fix external PCRE JIT check in GH-15430
  • Autotools: Simplify PHP_SELECT_SAPI in apache2handler SAPI in GH-15444
  • Add hash extension to soap dependencies in GH-15449
  • Autotools: Remove redundant SAPI_SHARED assignment in GH-15453
  • Remove php_win32_init_gettimeofday declaration in GH-15451
  • Autotools: Replace obsolete backticks with $(...) in apache2handler in GH-15454
  • Autotools: Simplify PHP_PDO_DBLIB conditions in 0064c42215
  • Autotools: Sync CS in pdo_odbc in GH-15466
  • Autotools: Remove PHP_LIBDIR adjustment in pdo_dblib in GH-15463
  • Update ext/mbstring and ext/snmp dependencies in GH-15469
  • Autotools: Move AWK finder to PHP_INIT_BUILD_SYSTEM in GH-15478
  • Add date extension to dependencies in GH-15475
  • Autotools: Move auto_cflags marker to PHP_INIT_BUILD_SYSTEM in GH-15487
  • Fix GH-15501: Windows HAVE_<header>_H macros defined to 1 or undefined in GH-15508
  • Fix GH-15515: Configure error grep illegal option q in GH-15516
  • Fix bug GH-15514 (Configure error: genif.sh: syntax error) in 48a18e5be7
  • Autotools: Fix stack direction check in GH-15528
  • Autotools: Move Zend/zend_config.h to AC_CONFIG_COMMANDS in GH-15538
  • Autotools: Move abs_srcdir and abs_builddir to init macro in GH-15537
  • Autotools: Add min-version argument to PHP_PROG_PHP macro in GH-15477
  • Autotools: Check re2c version with AS_VERSION_COMPARE in GH-15465
  • Fix Solaris 10 build: missing libproc.h in GH-15525
  • Remove unused buffer variables in GH-15550
  • Autotools: Remove obsolete compiler reset in GH-15549
  • Autotools: Sync CS in ext/standard in GH-15560
  • Autotools: Use a no-op command in PKG_CHECK_MODULES in GH-15562
  • Fix GH-15534: Bump minimum libxml2 version to 2.9.4 in GH-15536
  • Autotools: Replace break 2 with break in GH-15563
  • Autotools: Sync CS in ext/tidy in GH-15561
  • Autotools: Simplify adding tidy cflags in GH-15577
  • Autotools: Sync CS in ext/phar in GH-15586
  • Autotools: Fix tidy library checks in GH-15576

Remi Collet

  • exit_as_funtion RFC follow-up: ensure default INI settings used in status test in GH-15420

Saki Takamachi

  • ext/bcmath: Optimize bcdiv processing in GH-14660
  • Update versions for PHP 8.4.0beta4 in 80c0a4323d

Simonov Denis

^_^

  • mysqlnd: support ER_CLIENT_INTERACTION_TIMEOUT in GH-13618
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.