Core changes
Core
The high resolution timer (hrtime()) on macOS now
uses the recommended
clock_gettime_nsec_np(CLOCK_UPTIME_RAW) API instead of
mach_absolute_time().
CGI/CLI
The -z or --zend-extension option
has been removed as it was non-functional.
Use -d zend_extension=[path] instead.
PDO_ODBC
The fetch behaviour for larger columns has been changed. Rather than
fetching 256 byte blocks, PDO_ODBC will try to fetch a larger block size;
currently, this is the page size minus string overhead. Drivers that
return SQL_NO_TOTAL in SQLGetData are also better handled as well.
This should improve compatibility and performance.
Changes in SAPI Modules
CLI
Trying to set a process title that is too long with
cli_set_process_title() will now fail instead of
silently truncating the given title.
Added a new --ini=diff option to print INI settings
changed from the builtin default.
FPM
FPM with httpd ProxyPass optionally decodes the full script path. Added
fastcgi.script_path_encoded
INI setting to prevent this new behavior.
FPM access log limit now respects log_limit value.
Changed Functions
PCNTL
pcntl_exec() now has a formal return type of
false.
pcntl_waitid() takes an additional resource_usage
argument to gather various platform specific metrics about the child process.
Reflection
The output of ReflectionClass::__toString() for
enums has changed to better indicate that the class is an enum, and that
the enum cases are enum cases rather than normal class constants.
The output of ReflectionProperty::__toString() for
properties with hooks has changed to indicate what hooks the property has,
whether those hooks are final, and whether the property is virtual.
This also affects the output of ReflectionClass::__toString()
when a class contains hooked properties.
Other Changes to Extensions
Fileinfo
Upgraded file from 5.45 to 5.46.
The return type of finfo_close() has been changed to
true, rather than bool.
Intl
Intl's internal error mechanism has been modernized so that it
indicates more accurately which call site caused what error.
Moreover, some ext/date exceptions have been wrapped inside a
IntlException now.
Lexbor
An always enabled lexbor extension is added. It contains the lexbor
library that was separated from ext/dom
for being reused among other extensions.
The new extension is not directly exposed to userland.
PCRE
Upgraded pcre2lib from 10.44 to 10.46.
PDO_Sqlite
Increased minimum release version support from 3.7.7 to 3.7.17.
Changes to INI File Handling
Core
Added fatal_error_backtraces to
control whether fatal errors should include a backtrace.
Added startup-only max_memory_limit INI setting to control the maximum
memory_limit that may be configured at startup or runtime. Exceeding this
value emits a warning, unless set to -1, and sets memory_limit to the
current max_memory_limit instead.
Opcache
Added opcache.file_cache_read_only to support a read-only
opcache.file_cache directory,
for use with read-only file systems (e.g. read-only Docker containers).
Best used with opcache.validate_timestamps=0,
opcache.enable_file_override=1,
and opcache.file_cache_consistency_checks=0.
Note:
A cache generated with a different build of PHP, a different file
path, or different settings (including which extensions are loaded), may be
ignored.
The default value of
opcache.jit_hot_loop is
now 61 (a prime) to prevent it from being a multiple of loop iteration
counts.
It is recommended that this parameter is set to a prime number.
Changing opcache.memory_consumption
when OPcache SHM is already set up will now correctly report a failure
instead of silently doing nothing and showing misleading values in PHPInfo.
OpenSSL
Added openssl.libctx
to select the OpenSSL library context type.
Either custom libctx for each thread can be used or a single global (default)
libctx is used.