PHP 8.1.0beta3: Downloads, Changelog, News

Release Information

PHP Version
PHP 8.1
Release Date
Release Type
Bug Fix Release
Release Status
Use PHP 8.1.29 instead
Branch Status
Security-Fixes Only

PHP 8.1 is currently only receiving security fixes. PHP 8.1.0beta3 is not the latest version in the series, and using this release is not recommended. PHP 8.1.29 is the latest in the series.


Source Code

Git Clone
Use Git to clone the 8.1.0beta3 tag from the PHP Git repository.
git clone --depth 1 --branch php-8.1.0beta3
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 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.1.0beta3-cli-alpine

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

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

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

Commit List

Ben Morss

  • Disable strict pixi requirement for libavif >= 0.9.1 in e0e2e9a547
  • Lossless conversion for webp in eb6c9eb936

Ben Ramsey

  • The master branch is now for 8.1.0beta3 in d23e601286
  • Update versions for PHP 8.1.0beta3 in 3edd1087c7

Calvin Buckley

  • AIX/XCOFF support for fibers in GH-7338

Christoph M. Becker


  • Fix dns resolv linkage issue on haiku in GH-7350

Derick Rethans

  • Upgrade timelib to version 2020.03 in 4aeff60f34
  • Fake merge timelib upgrade to 2020.03 into master, which will get a 2021.x upgrade very soon in f094ee245a
  • Upgrade timelib to 2021.06 in 8426623521
  • Import timelib 2021.07 in 66ea59e38e
  • Fixed bug #80963: DateTimeZone::getTransitions() truncated in d9c8e5a42e
  • Fixed test by adding echo and expected string in 69fb3efe80
  • Prepare for 7.4.24 in 79d564a8cc

Dmitry Stogov

  • Improve Range Inference in df6ffa806c
  • Optimize "$x * 2" into "$x + $x" in 14c103d7c5
  • Make private functions "static" and remove unused zend_inference_check_recursive_dependencies() in aaa14501f8
  • Implement range inference for traces in 865b096890
  • Use ZEND_HASH_FILL_* API in 2e8904fee0
  • Eliminate "h < ht->nNumUsed" check in zend_hash_next_index_insert_new() in 6729276684
  • JIT: Use zend_hash_index_lookup() instead of zend_hash_index_add_new(EG(uninitialized_zval)) in 57e2241cbc
  • Fixed incorrect condition in c39332d740
  • Fixed conditional jump on uninitialised value (Zend/tests/match/028.phpt failure with function JIT) in 94b800182d
  • Better specialization for packed/hash arrays in 1ffbb7372a

Gabriel Caruso

George Peter Banyard

  • Refactor proc_open() implementation in GH-7255

Jakub Zelenka

  • Make CertificateGenerator not dependent on external config in OpenSSL 3.0 in c90c9c7545

Jeremy Mikola

  • Include class name in Serializable deprecation message in 858d0c0916

Joe Watkins

Kamil Tekiela

  • Replace macro with inline function in GH-7365

Michael Voříšek

Máté Kocsis

  • Fix DOMNameSpaceNode casing in ee11a6065c
  • Fix another DOMNameSpaceNode casing issue in da2cd931e5
  • Add support for replacing class synopses based on stubs in GH-7340

Nikita Popov

  • Optimize openssl memory leak test in 6249172ae3
  • Reduce security level in some OpenSSL tests in 3ea57cf838
  • Adjust some tests for whitespace differences in OpenSSL 3 in 0a530d7650
  • Use different cipher in openssl_seal() test in 046b36bcf8
  • Don't test legacy algorithms in SPKI tests in 9695936341
  • Only report provided ciphers in openssl_get_cipher_methods() in a80ae97d31
  • Avoid RC4 use in another test in 503146aa87
  • Use EVP_PKEY API for openssl_public_encrypt/private_decrypt in 0233afae27
  • Use EVP_PKEY APIs for openssl_private_encrypt/public_decrypt in 384ad6e224
  • Use EVP_PKEY APIs for key generation in 13313d9b1b
  • Relax error check in cd8bf0b6bd
  • Store whether pkey object contains private key in f878bbd96b
  • Add test for openssl_dh_compute_key() in 7168f71e00
  • Extract php_openssl_pkey_derive() function in c6542b2a1e
  • Avoid DH_compute_key() with OpenSSL 3 in cb48260fdd
  • Use different algorithm in pkcs7 tests in 563b3e3472
  • Use different algorithm in cms tests in ec4d926a80
  • Use larger key size for DSA/DH tests in 1cf4fb739f
  • Skip some tests if cipher not available in d23a8b33ab
  • Use different cipher in one more CMS test in a2c201351b
  • Generate pkcs12_read test inputs on the fly in 5843ba518c
  • Do not special case export of EC keys in f2d3e75933
  • Switch manual DH key generation to param API in a7740a0bf0
  • Switch manual DSA key generation to param API in 2bf316fdfc
  • Use OpenSSL NCONF APIs in GH-7337
  • Extract EC key initialization in 14d7c7e9ae
  • Test calculation of EC public key from private key in 246698671f
  • Use param API for creating EC keys in f9e701cde8
  • Extract public key portion via PEM roundtrip in 26a51e8d7a
  • Use param API for openssl_pkey_get_details() in 6db2c2dbe7
  • Add missing unsigned qualifier in ff2a39e6fc
  • Use param API to create RSA key in 3724b49aa9
  • Remove special self/parent handling in get_class_name_map_ptr() in GH-7330
  • Fix ristretto255 tests in 9168aab381
  • Add missing parts of previous commit in f31db20956
  • Improve ristretto255 scalarmult exception messages in 98184afd92
  • Fork openssl_error_string() test for OpenSSL in e5f53e1ca1
  • Comment out ristretto255 scalar invert test in 2addab1561
  • Switch dh_param handling to EVP_PKEY API in ef787bae24
  • Switch mysqlnd auth to EVP_PKEY API in 1c675b9d0d
  • Mark DOM classes as not serializable in ca94d55a19
  • Use zend_string_equals_literal_ci() in a4e206808c
  • Fixed bug #81342 in 607be654fd
  • Fix openssl memory leaks in 7d2a2c7dc0
  • Always use CE_CACHE, remove TYPE_HAS_CE in GH-7336
  • Fixed bug #81349 in 28500fe4ef
  • Add EXTENSIONS section in 14173186db
  • Clear ce cache when persisting for file cache only in 02b5660c0f
  • Fix bug #81142 by adding zend_string_init_existing_interned() in 4a4ae45a0b
  • Fix port clash in socket tests in 78cbe56e68
  • Fixed bug #81192 in 1c6df2dffd
  • Remove mysqlnd local_tx functionality in 277e169ef3
  • Remove unused mysqlnd portability macros in 8f5555605a
  • Remove MYSQLND_SZ_T_SPEC in b80767e219
  • Fix directory clash in zip test in 96f9501b3a
  • Don't use custom object handlers for enum properties in caefc6a507
  • Fix message in test in a027247289
  • Fix func info for constant()/get_defined_constants() in a4c2fb1462
  • Returned interned string from fgetc() in 6e20f0f3a2
  • Fix arginfo/zpp consistency check for call_user_func from strict_types scope in 8755976315
  • Switch default PKCS7/CMS cipher to AES-128-CBC in 7b34db0659
  • Fixed bug #81353 in d1e956ff31
  • Discard constants before preload_load() in 99ddc806dc
  • Set EG(active)=0 during preloading shutdown in 4bb66ddc76
  • Reuse parts of normal executor shutdown for preloading in cecea72a10
  • Add test for getClass() error conditions in fc6f3d155b
  • Fix COMPILER_HALT_OFFSET preservation during preloading in 97b6a364b3
  • Prevent bailout during imap shutdown error reporting in bcc2f0705d
  • Run other RSHUTDOWN handlers if one fails in cf6c354e1f
  • Use system allocator for putenv value in b56699b8f0
  • Reduce nesting in mkdir implementation in 3c7ff25fbe
  • Fix maybe-uninitialized warning in b66168e86b
  • Use zend_string for putenv key in GH-7379
  • Clean up recursive mkdir logic in 9574627552
  • Fix phar test in ddc21b0902

Philip Hofstetter

Radosław Kowalewski

  • Require sqlite >= 3.7.7 for URI in DSN in GH-7347

Remi Collet

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.