PHP 8.1.15: Downloads, Changelog, News

Release Information

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

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

Downloads

Source Code

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

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

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

ChangeLog

Apache

  • Fixed bug GH-9949 (Partial content on incomplete POST request).

Core

  • Fixed bug GH-10072 (PHP crashes when execute_ex is overridden and a __call trampoline is used from internal code).
  • Fix GH-10251 (Assertion `(flag & (1<<3)) == 0' failed).
  • Fix wrong comparison in block optimisation pass after opcode update.
  • Fix GH-10248 (Assertion `!(zval_get_type(&(*(property))) == 10)' failed).

Date

  • Fixed bug GH-9891 (DateTime modify with unixtimestamp (@) must work like setTimestamp).
  • Fixed bug GH-10218 (DateTimeZone fails to parse time zones that contain the "+" character).

Fiber

  • Fix assertion on stack allocation size.

FPM

  • Fixed bug GH-9981 (FPM does not reset fastcgi.error_header).
  • Fixed bug #67244 (Wrong owner:group for listening unix socket).

Hash

  • Handle exceptions from __toString in XXH3's initialization

LDAP

  • Fixed bug GH-10112 (LDAP\Connection::__construct() refers to ldap_create()).

MBString

  • Fixed: mb_strlen (and a couple of other mbstring functions) would wrongly treat 0x80, 0xFD, 0xFE, 0xFF, and certain other byte values as the first byte of a 2-byte SJIS character.

Opcache

  • Fix inverted bailout value in zend_runtime_jit()
  • Fix access to uninitialized variable in accel_preload().
  • Fix zend_jit_find_trace() crashes.
  • Added missing lock for EXIT_INVALIDATE in zend_jit_trace_exit.

Phar

  • Fix wrong flags check for compression method in phar_object.c

PHPDBG

  • Fix undefined behaviour in phpdbg_load_module_or_extension().
  • Fix NULL pointer dereference in phpdbg_create_conditional_breal().
  • Fix GH-9710: phpdbg memory leaks by option "-h"
  • Fix phpdbg segmentation fault in case of malformed input

Posix

  • Fix memory leak in posix_ttyname()

Standard

  • Fix GH-10187 (Segfault in stripslashes() with arm64).
  • Fix substr_replace with slots in repl_ht being UNDEF.

TSRM

  • Fixed Windows shmget() wrt. IPC_PRIVATE.

XMLWriter

  • Fix missing check for xmlTextWriterEndElement

Commit List

Alex Dowad

  • Support Microsoft's "Best Fit" mappings for Windows-1252 text encoding in a1a69c3734
  • Correct entry for 0x80,0xFD-FF in SJIS multi-byte character length table in d104481af8
  • Use different mblen_table for different SJIS variants in 3152b7b26f

Arnaud Le Blanc

  • GC fiber unfinished executions in GH-9810
  • Reduce HT_MAX_SIZE to account for the max load factor of 0.5 in GH-10242
  • Fix run-tests.php hanging when a worker process dies without notice in GH-9931
  • Handle non-INDIRECT symbol table entries in zend_fiber_object_gc() in GH-10386

Ben Ramsey

Christoph M. Becker

Daniel Black

  • ext/mysqli tests "using password" optional in error messages (part 2) in c21a5920ac

Derick Rethans

  • Fix GH-9891: DateTime modify with unixtimestamp (@) must work like setTimestamp in d19a70c9a0
  • Fix GH-10072: PHP crashes when execute_ex is overridden and a __call trampoline is used from internal code in 233ffccc35
  • Make sure to disable JIT when overriding execute_ex in b489e0f2b8
  • Fixed GH-10218: DateTimeZone fails to parse time zones that contain the "+" character in d12ba111e0

Dmitry Stogov

  • Fix memory leak in 683285165e
  • Fix incorrect optimization of ASSIGN_OP may lead to incorrect result (sub assign -> pre dec conversion for null values) in 4d4a53beee
  • Revert "Merge branch 'PHP-8.0' into PHP-8.1" in 0d011e4626
  • Fix GH-10271: Incorrect arithmetic calculations when using JIT in 42eed7bb4e

Gabriel Caruso

  • Revert "Make build work with newer OpenSSL" in 255e08ac56

George Peter Banyard

  • Add secondary test that registers a trampoline as a shutdown function in 44add3c791
  • Fix memory leak in posix_ttyname() in c2b0be5570

Jakub Zelenka

Kévin Dunglas

  • fix: indirect_return compilation warning in 55514a1119

Max Kellermann

  • ext/opcache/jit/zend_jit: fix inverted bailout value in zend_runtime_jit() in GH-10144
  • ext/opcache/jit: handle zend_jit_find_trace() failures in b26b758952
  • ext/opcache/jit/zend_jit_trace: add missing lock for EXIT_INVALIDATE in e217138b40
  • ext/opcache/jit/zend_jit_trace: fix memory leak in _compile_root_trace() in GH-10146

Niels Dossche

  • Initialize ping_auto_globals_mask to prevent undefined behaviour in c4487b7a12
  • Add a regression test for auto_globals_jit=0 with preloading on in bbad29b9c1
  • Fix undefined behaviour in phpdbg_load_module_or_extension in 5f1311a92c
  • Fix null pointer dereference of param in 3a44c78f14
  • Fix GH-10187: Segfault in stripslashes() with arm64 in 4c9375e504
  • Fix GH-10202: posix_getgr(gid|nam)_basic.phpt fail in d5f0362e59
  • Fix GH-9710: phpdbg memory leaks by option "-h" in 8ff2b6abb2
  • Fix GH-10251: Assertion `(flag & (1<<3)) == 0' failed in d03025bf59
  • Fix GH-10249: Assertion `size >= page_size + 1 * page_size' failed in 833b45ac44
  • Fix substr_replace with slots in repl_ht being UNDEF in 4bbbe6d652
  • Fix missing check for xmlTextWriterEndElement in 11a1feb0d7
  • Fix wrong flags check for compression method in phar_object.c in 347b7c3628
  • Fix incorrect comparison in block optimization pass in dfe9c2af19
  • Fix phpdbg segmentation fault in case of malformed input in 398a10a58a
  • Handle exceptions from __toString in XXH3's initialization in 7463e70b1e

Patrick Allaert

Stanislav Malyshev

Thomas Gerbet

  • Use absolute paths in OPCache tests when calling opcache_compile_file() in 1f715f5658

Tyson Andre

  • Fix Windows shmget() wrt. IPC_PRIVATE in 7a983e281c
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.

Support PHP.Watch — If you find the articles, version information, Codex, and other PHP.Watch contributions useful, consider supporting through GitHub Sponsors. Your sponsorship helps dedicate more time to creating valuable content and improving the PHP community. Together, we can keep the momentum going — thank you for your support!

Thanks to the highest tier sponsor: @TomasVotruba for your generous support to keep PHP.Watch moving 💜