Other ChangesCore changesFFIFFI::load is now allowed during preloading when opcache.preload_user is the current system user. Previously, calling FFI::load was not possible during preloading if the opcache.preload_user directive was set. FPMFPM CLI test now fails if the socket path is longer than supported by the OS. OpcacheIn the CLI and phpdbg SAPIs, preloading does not require the opcache.preload_user directive to be set anymore when running as root. In other SAPIs, this directive is required when running as root because preloading is done before the SAPI switches to an unprivileged user. StreamsBlocking fread on a socket connection returns immediately if there are any buffered data instead of waiting for more data. A memory stream no longer fails if the seek offset is past the end. Instead, the memory will be increased on the next write and the data between the old end and the offset is filled with zero bytes, similar to how files work. stat access operations like file_exists and similar will now use real path instead of the actual stream path. This is consistent with stream opening. Changes in SAPI ModulesCLI
The Changed FunctionsCoregc_status has added the following 8 fields:
class_alias now supports creating an alias of an internal class.
Setting open_basedir at runtime
using User exception handlers now catch exceptions during shutdown.
The resultant HTML of highlight_string and
highlight_file has changed.
Whitespace between outer HTML tags is removed. Newlines and spaces
are no longer converted to HTML entities. The whole HTML is now wrapped in a
Calendareaster_date now supports years from 1970 to 2,000,000,000 on 64-bit systems, previously it only supported years in the range from 1970 to 2037. Curl
curl_getinfo now supports two new constants:
DOMChanged DOMCharacterData::appendData tentative return type to true.
DOMDocument::loadHTML,
DOMDocument::loadHTMLFile, and
DOMDocument::loadXML now have a tentative
return type of bool. Previously, this was documented as having a return
type of Gd
The signature of imagerotate has changed.
The Intl
datefmt_set_timezone (and its alias
IntlDateformatter::setTimeZone)
now returns
IntlBreakiterator::setText now returns
IntlChar::enumCharNames is now returning a boolean.
Previously it returned
IntlDateFormatter::__construct throws an MBString
mb_strtolower and mb_convert_case
implement conditional casing rules for the Greek letter sigma.
For mb_convert_case,
conditional casing only applies to
mb_decode_mimeheader interprets underscores in
QPrint-encoded MIME encoded words as required by RFC 2047; they are
converted to spaces.
Underscores must be encoded as In rare cases, mb_encode_mimeheader will transfer-encode its input string where it would pass it through as raw ASCII in PHP 8.2. mb_encode_mimeheader no longer drops NUL (zero) bytes when QPrint-encoding the input string. This previously caused strings in certain text encodings, especially UTF-16 and UTF-32, to be corrupted by mb_encode_mimeheader.
mb_detect_encoding's "non-strict" mode now behaves
as described in the documentation.
Previously, it would return mysqli
mysqli_fetch_object now raises a
ValueError instead of an Exception
when the
mysqli_poll now raises a ValueError
when neither the mysqli_field_seek and mysqli_result::field_seek now specify the return type as true instead of bool. ODBC
odbc_autocommit now accepts PGSQL
pg_fetch_object now raises a
ValueError instead of an Exception
when the
pg_insert now raises a ValueError
instead of a
pg_insert and pg_convert raises
a ValueError or a TypeError
instead of a
The Random
Changed mt_srand and srand to
not check the number of arguments to determine whether a random seed should
be used. Passing ReflectionReturn type of ReflectionClass::getStaticProperties is no longer nullable. Standard
unserialize now emits a new array_pad is now only limited by the maximum number of elements an array can have. Before, it was only possible to add at most 1048576 elements at a time.
strtok raises an
password_hash will now chain the underlying
Random\RandomException
as the ValueError's
If using an array as the
proc_open returns array_sum and array_product now warn when values in the array cannot be converted to int/float. Previously arrays and objects where ignored whilst every other value was cast to int. Moreover, objects that define a numeric cast (e.g. GMP) are now casted instead of ignored.
The
A new str_getcsv and fgetcsv now return an empty string instead of a string with a single null byte for the last field which only contains an unterminated enclosure. Other Changes to ExtensionsCore
Using the increment/decrement
operators (
Using the decrement
operator (
Internal objects that implement an _IS_NUMBER cast but not a do_operator
handler that overrides addition and subtraction now can be incremented
and decrement as if one would do DOMThe DOM lifetime mechanism has been reworked such that implicitly removed nodes can still be fetched. Previously this resulted in an exception. SQLite3The SQLite3 class now throws SQLite3Exception (extends Exception) instead of Exception. The SQLite error code is now passed in the exception error code instead of being included in the error message. Changes to INI File Handling
PerformanceDOMLooping over a DOMNodeList now uses caching. Therefore requesting items no longer takes quadratic time by default. Getting text content from nodes now avoids an allocation, resulting in a performance gain. DOMChildNode::remove now runs in O(1) performance. StandardThe file flags error check is now about 7% faster. SPLRecursiveDirectoryIterator now performs less I/O when looping over a directory. |