PHP 8.1.0RC1: 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.0RC1 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.0RC1 tag from the PHP Git repository.
git clone --depth 1 --branch php-8.1.0RC1
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

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.0RC1-cli-alpine

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

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

Commit List

Alex Dowad

  • Output illegal character marker for 4-byte illegal characters > 0x7FFFFFFF in 97b7fc893c
  • Declare ARMSCII-8 conversion functions as 'static' in 9363b0b5a7
  • Simplify code for converting UHC to Unicode in 03392ecd50
  • Correct comment in mbfilter_ucs4.c in f6f0506c84
  • Test behavior of 'long' illegal character markers in 51b9d7a5e1
  • ISO-2022-JP-KDDI text conversion doesn't swallow PUA codepoints in 57a81af041
  • ISO-2022-JP-MS treats truncated multi-byte chars as error in 51e0d323e4
  • Add more tests for ISO-2022-JP-KDDI text conversion in ae4c956089
  • Add more tests for ISO-2022-JP-MS text conversion in b2be85d11a
  • Add more tests for ISO-2022-JP/JIS7/JIS8 text conversion in 299690a1cf
  • Add more tests for SJIS text conversion in c7d47cbb4c
  • Add more tests for SJIS-2004 text conversion in 0de4d6872e
  • Extraneous trailing UCS-4 bytes are treated as error in d4561894ea
  • Remove useless variable: mbfl_encoding_utf8_kddi_a_aliases in 6a693d2d33
  • Add test suite for EUC-JP-WIN (or EUC-JP-MS) text encoding (and fix bugs) in 1865576694
  • Add test suite for mobile variants of UTF-8 (and fix bugs) in e6f1a72235
  • UCS-4 conversion does not pass BOM through to output in 97f8495e0f
  • Add tests for '7bit' and '8bit' text encodings in mbstring in 34ef8f3ca2
  • Add tests for UCS-2 text encoding in 79015b23aa
  • Add tests for UCS-4 text conversion in 7472c82c45
  • Add another test for UTF-16LE in 51a32ccaf4
  • Add more tests for UTF-8 text conversion in 15ba73cee3
  • mbstring no longer provides 'long' substitutions for erroneous input bytes in 776296e12f
  • Use bool in mbfl_filt_conv_output_hex (rather than int) in f303fc8a9b
  • Add test for mb_str_split on UCS-2 text in 671dcee01e
  • CP5022{0,1,2} supports 'IBM extension' codes from ku 115-119 in e3f6a9fbfe
  • Add more tests for CP5022{0,1,2} text conversion in a0415b22ab
  • Add another test for GB18030 text conversion in 51b6c687db
  • Add another test for UTF-7 text conversion in 355464935d
  • In UTF7-IMAP, reject the 2nd part of surrogate pair if it appears unexpectedly in 16a1e0a219
  • Add more tests for UTF7-IMAP text conversion in df32267494

Alexey Zamorov

  • Avoid dangling pointer in curl header.str in 8c292a2f9d

Ben Ramsey

  • The master branch is now for 8.1.0RC1 in 90a6003835

Bob Weinand

  • Add missing zend_test requirement to ffi test for bug80847 in 1440d15e00

Christoph M. Becker


  • Enable getrandom() api on solaris-ish systems in GH-7417

Denis Ryabov

  • Fix/improve handling of escaping in ini parser in d3a6054d44

Derick Rethans

  • Backport speling fix in 3677db6386
  • Upgrade timelib to 2021.08, which address some defects and performance in 2bf451b925
  • Fixed test - the expected result was wrong in b0dd55b11c


  • Add haiku shared objects support in libtool in e4c23fa16b


  • Dispatch using LANG_NEUTRAL instead of LOCALE_SYSTEM_DEFAULT in bdf53cc91f

Dmitry Stogov

  • Reorder updates to avoid race conditions in 476c333a8e
  • Fixed ZEND_MAP_PTR_KIND_PTR (it is not used) in 116fa65482
  • JIT: Code generation for ROPE_INIT, ROPE_ADD and ROPE_END with STRING operands in c5ded13614
  • JIT/x86: Merge load and test of EX_CALL_INFO() into single instruction in 1c9f8eb7b9
  • Avoid redundand repeatable VM stack overflow checks in 0424ce0c15
  • JIT: Optimize zend_vm_stack_free_args() in 67d6c2db9f
  • Avoid redundand argument type verification in 66a4437c3b
  • JIT: Avoid redundand checks of number of passed arguments in c51b0d9702
  • JIT: Avoid reloading of EX(run_time_cache) in 1347d90a23
  • JIT: Eliminate load of op_array->run_time_cache__ptr and use immediate value for immutable op_arrays if it's known at compile time in 3565d02c6d
  • JIT: Avoid reloading of EX(run_time_cache) in 608d568686
  • JIT: Avoid useless EX(func) load in 96c3465513
  • JIT: Allow keeping result of FETCH_CONSTANT in a CPU register in 8f601be101
  • JIT: Better code for ADD/SUB/MUL and references in tracing JIT in 7690fa0bd8
  • Fixed register allocation when ADD/SUB/MUL two references in tracing JIT in f1f4403dc2
  • Rename ZREG_FCARG1x/ZREG_FCARG1a into ZREG_FCARG1 in dad5cfa868
  • Fix timelib_parse_zone() performance problem in 6871a49b66

Go Kudo

  • Fix nested namespaced typed property in gen_stub.php in GH-7418


  • Fix path printing in ext_skel in GH-7387

Ikko Ashimine


  • Use FastZPP for SQLite3Stmt/SQLite3Result in GH-7392
  • microptimization of SQLite3Result::fetchArray in f6d30cfba7

Kamil Tekiela

  • Implement mysqlnd_set_persistent_string in GH-7371

MARiA so cute

  • Improve the success rate when use mkdir() in multiprocessing environment in GH-7383

Máté Kocsis

  • Declare a few missing function return types in c58a9f2a57
  • Fix a few optimizer func info in 41ab369791
  • Add support for generating optimizer function info from stubs in GH-7367
  • Add more specific array type hints in 2141bee69d
  • Fix function map production in e35a7fe919
  • Clean up function map production slightly in d0897b3602
  • DOMCharacterData::$data and DOMAttr::$value are writable in cdf2f3eb16
  • Generate Zend, ext/spl and ext/json optimizer func info from stubs in bdfe0ab505
  • Fix callable and iterable handling in 4a7a414735
  • Generate a few missing optimizer function entries from stubs in d379044066
  • Generate optimizer func info from stubs for a few extensions - part 2 in GH-7401
  • Generate optimizer func info from stubs for ext/date in GH-7403
  • Make a few unuseful DOMEntity properties readonly in GH-7406
  • Generate optimizer func info from stubs for ext/sodium in GH-7404
  • Sync ext/mysqli optimizer func info entries with the stubs in 780293baec
  • Update property read handler comments for DOMEntity in 267c24e9ee
  • Fix a few ext/date return types in 5e424d2884
  • Generate optimizer func info from stubs for ext/curl, ext/mysqli, ext/pcre in GH-7407
  • Fix mysqli stub alias verification issues in 7d3cdb3681
  • Generate optimizer func info from stubs for ext/gd and ext/pgsql in GH-7408
  • Generate optimizer func info from stubs for various extensions in GH-7409
  • Fix func info for str_replace() and str_ireplace() in 492821a302
  • Generate optimizer func info from stubs for ext/standard - part 1 in GH-7413
  • Fix a few func info entries in cdf0550fe5
  • Generate optimizer func info from stubs for ext/standard - part 2 in GH-7414
  • Add support for generating MAY_BE_ARRAY_OF_REF func info flag in GH-7416
  • Use camelCase method names in OCICollection and OCILob in GH-7405
  • Specify a few array func info entries in GH-7425
  • Generate optimizer func info from stubs for ext/standard - part 3 in GH-7426
  • Fix typo in gen_stub.php in a57b713d66
  • Fix default value of $flags in oci_fetch_all() in GH-7429
  • Make default value more explicit in 70f516d3e8
  • Fix typo in method name in gen_stub.php in 39ede67e17
  • Remove unused variable from property generation code in edf2947a5d

Nikita Popov

  • Assert that file cache does not contain references in e86a0a905d
  • Backport Laravel test hack in 51147e2f18
  • Fix repeated file cache unserialization of zval string in de7ba3e737
  • Test file_cache prime shm + use file combination in 3454ea36a4
  • Test file cache mix (file -> shm) in a991fe51f8
  • Declare Directory properties in 29c6eb6cf5
  • Only assign $severity for ErrorException in 6cc4e3280e
  • Declare SoapParam properties in 030bb36ed7
  • Declare SoapVar properties in c58c926034
  • Declare SoapServer::$service property in bdf8b9ed2d
  • Declare SoapHeader properties in 7d4f2f5392
  • Simplify constructor invocation in ext/soap in e6d4b3077d
  • Simplify some strtolower operations in ext/soap in e861cb5c31
  • Declare some SoapClient properties in 018cb891cf
  • Don't convert Error exception to SoapFault in 44befbdc01
  • Declare SoapFault properties in 32d663e198
  • Use separate property to request digit auth in aa4898ef2e
  • Remove dead code in b3b1658492
  • Declare remaining SoapClient properties in e6c6abf6b4
  • Make internal SoapServer/SoapClient state private in 6b05d958aa
  • Move derefs into accessor macros in 50484b59cd
  • Fix missing string copy in de6cf68ac4
  • Slightly clean up cookies handling in 841d0b30eb
  • Remove php_user_filter::$filter property in 7f7a90b2bc
  • Declare php_user_filter::$stream property in 05a217927a
  • Handle resource table reallocation during shutdown in 2ff496e871
  • Mark PDO::setAttribute() $value as mixed in 2e343fcb42
  • Drop gz aliases from func info in 8c67abb67f
  • Fixed bug #81377 in a40ccd758c
  • Don't use sentinel value for unicode property lookup in 3be94217f4
  • Return bool from php_unicode_is_prop() in d2073179e3
  • Combine punctuation into one character group in f458b16041
  • Combine control into one character group in 425c2e3ba1
  • Add comments to grouped character properties in 2dafb0e30f
  • Mark private compiler functions as static in 07984435ae
  • Fix AST print of first class callable in anon class expr in b964d007e3
  • Explicitly store real map ptr base in 6434c93a27
  • Initialize method_lcname to suppress maybe-uninitialized warning in fa032764db
  • Limit internal function calls in execute fuzzer in cae80ef552
  • Limit internal function args during fuzzing in 93a88a1d4c
  • imagecolorsforindex() cannot return false in cba166469d
  • Fix use after free when rebinding __call closure in 4fcf0db649
  • Fix Closure::call() on internal method closure in eda9f5f740
  • Remove incorrect refcount info for addcslashes() in 9d70946b16
  • Flush filter during non-strict encoding detection in 43cb2548f7
  • Avoid string copy in get_cfg_var() in 51a504c8be
  • str_replace() can return the original string in 0f7e0cf34b
  • Ensure stub files are processed in predictable order in fab1222128
  • Fix strict-prototypes warning in 0f926815ca
  • Don't expose wchar encoding to users in GH-7415
  • Use HAVE_SYS_PARAM_H in d16992afe2
  • Add UPGRADING for ini parser changes in a968055b77
  • Fix type hint in gen_stub.php in c1c1822e8c
  • Error on resource ID space overflow in 501f1a45f5
  • Use array_set_zval_key() in zend_ast_add_array_element() in 7d6a7e78fc
  • Export zend_use_resource_as_offset() in 5b2ddf5a17
  • Minor cleanup in gen_stubs in 52d3af1790
  • Add missing const qualitier in zend_register_internal_enum() in c03f97cd1c
  • Support generating internal enum decl from stubs in 32d48212ea
  • Mark private function as static in 9b170a41a7
  • Use zend_long for resource ID in 14f599ea7d
  • Make it easier to run curl tests standalone in 992b5f2e08
  • Fix curl_copy_handle() with CURLINFO_HEADER_OUT in 30e791ed56
  • Restore dev version in 27901e0f6a
  • Add PHP-8.1 to azure pipelines in c4d72cea5c
  • Add PHP-8.1 to scheduled builds as well in 16112a54fa
  • Fix bug #81405: Restore old PDO::PARAM_* values in 1e012ecb3f

Patrick Allaert

Peter Cowburn

  • Use &Properties; entity in xpointer for inherited properties in class synopses in GH-7400

Stanislav Malyshev

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.