mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Prepare for PHP 8.4
This commit is contained in:
parent
f612a72de4
commit
ad2ac6f05f
7 changed files with 9 additions and 749 deletions
|
@ -352,7 +352,8 @@ Currently, we have the following branches in use:
|
||||||
|
|
||||||
| Branch | |
|
| Branch | |
|
||||||
| --------- | --------- |
|
| --------- | --------- |
|
||||||
| master | Active development branch for PHP 8.3, which is open for backwards incompatible changes and major internal API changes. |
|
| master | Active development branch for PHP 8.4, which is open for backwards incompatible changes and major internal API changes. |
|
||||||
|
| PHP-8.3 | Is used to release the PHP 8.3.x series. This is a current stable version and is open for bugfixes only. |
|
||||||
| PHP-8.2 | Is used to release the PHP 8.2.x series. This is a current stable version and is open for bugfixes only. |
|
| PHP-8.2 | Is used to release the PHP 8.2.x series. This is a current stable version and is open for bugfixes only. |
|
||||||
| PHP-8.1 | Is used to release the PHP 8.1.x series. This is a current stable version and is open for bugfixes only. |
|
| PHP-8.1 | Is used to release the PHP 8.1.x series. This is a current stable version and is open for bugfixes only. |
|
||||||
| PHP-8.0 | Is used to release the PHP 8.0.x series. This is an old stable version and is open for security fixes only. |
|
| PHP-8.0 | Is used to release the PHP 8.0.x series. This is an old stable version and is open for security fixes only. |
|
||||||
|
|
607
UPGRADING
607
UPGRADING
|
@ -1,4 +1,4 @@
|
||||||
PHP 8.3 UPGRADE NOTES
|
PHP 8.4 UPGRADE NOTES
|
||||||
|
|
||||||
1. Backward Incompatible Changes
|
1. Backward Incompatible Changes
|
||||||
2. New Features
|
2. New Features
|
||||||
|
@ -19,434 +19,26 @@ PHP 8.3 UPGRADE NOTES
|
||||||
1. Backward Incompatible Changes
|
1. Backward Incompatible Changes
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Core:
|
|
||||||
. Programs that were very close to overflowing the call stack may now throw an
|
|
||||||
Error when using more than
|
|
||||||
`zend.max_allowed_stack_size-zend.reserved_stack_size` bytes of stack
|
|
||||||
(`fiber.stack_size-zend.reserved_stack_size` for fibers).
|
|
||||||
. Executing proc_get_status() multiple times will now always return the right
|
|
||||||
value on posix systems. Previously, only the first call of the function
|
|
||||||
returned the right value. Executing proc_close() after proc_get_status()
|
|
||||||
will now also return the right exit code. Previously this would return -1.
|
|
||||||
Internally, this works by caching the result on posix systems. If you want
|
|
||||||
the old behaviour, you can check the "cached" key in the array returned by
|
|
||||||
proc_get_status() to check whether the result was cached.
|
|
||||||
. Zend Max Execution Timers is now enabled by default for ZTS builds on
|
|
||||||
Linux.
|
|
||||||
. Uses of traits with static properties will now redeclare static properties
|
|
||||||
inherited from the parent class. This will create a separate static
|
|
||||||
property storage for the current class. This is analogous to adding the
|
|
||||||
static property to the class directly without traits.
|
|
||||||
. Assigning a negative index n to an empty array will now make sure that the
|
|
||||||
next index is n+1 instead of 0.
|
|
||||||
. Class constant visibility variance is now correctly checked when inherited
|
|
||||||
from interfaces.
|
|
||||||
. WeakMaps entries whose key maps to itself (possibly transitively) may now
|
|
||||||
be removed during cycle collection if the key is not reachable except by
|
|
||||||
iterating over the WeakMap (reachability via iteration is considered weak).
|
|
||||||
Previously, such entries would never be automatically removed.
|
|
||||||
|
|
||||||
- DOM:
|
|
||||||
. DOMChildNode::after(), DOMChildNode::before(), DOMChildNode::replaceWith()
|
|
||||||
on a node that has no parent is now a no-op instead of a hierarchy
|
|
||||||
exception, which is the behaviour spec demands.
|
|
||||||
. Using the DOMParentNode and DOMChildNode methods without a document now
|
|
||||||
works instead of throwing a HIERARCHY_REQUEST_ERR DOMException. This is in
|
|
||||||
line with the behaviour spec demands.
|
|
||||||
. createAttributeNS() without specifying a prefix would incorrectly create
|
|
||||||
a default namespace, placing the element inside the namespace instead of
|
|
||||||
the attribute. This bug is now fixed.
|
|
||||||
. createAttributeNS() would previously incorrectly throw a NAMESPACE_ERR
|
|
||||||
when the prefix was already used for a different uri. It now correctly
|
|
||||||
chooses a different prefix when there's a prefix name conflict.
|
|
||||||
|
|
||||||
- FFI:
|
|
||||||
. C functions that have a return type of void now return null instead of
|
|
||||||
returning the following object object(FFI\CData:void) { }
|
|
||||||
|
|
||||||
- Opcache:
|
|
||||||
. The opcache.consistency_checks INI directive was removed. This feature was
|
|
||||||
broken with the tracing JIT, as well as with inheritance cache, and has
|
|
||||||
been disabled without a way to enable it since PHP 8.1.18 and PHP 8.2.5.
|
|
||||||
Both the tracing JIT and inheritance cache may modify shm after the script
|
|
||||||
has been persisted by invalidating its checksum. The attempted fix skipped
|
|
||||||
over the modifiable pointers but was rejected due to complexity. For this
|
|
||||||
reason, it was decided to remove the feature instead.
|
|
||||||
|
|
||||||
- Phar:
|
|
||||||
. The type of Phar class constants are now declared.
|
|
||||||
|
|
||||||
- Standard:
|
|
||||||
. The range() function has had various changes:
|
|
||||||
* A TypeError is now thrown when passing objects, resources, or arrays
|
|
||||||
as the boundary inputs
|
|
||||||
* A more descriptive ValueError is thrown when passing 0 for $step
|
|
||||||
* A ValueError is now thrown when using a negative $step for increasing ranges
|
|
||||||
* If $step is a float that can be interpreted as an int, it is now done so
|
|
||||||
* A ValueError is now thrown if any argument is infinity or NAN
|
|
||||||
* An E_WARNING is now emitted if $start or $end is the empty string.
|
|
||||||
The value continues to be cast to the value 0.
|
|
||||||
* An E_WARNING is now emitted if $start or $end has more than one byte,
|
|
||||||
only if it is a non-numeric string.
|
|
||||||
* An E_WARNING is now emitted if $start or $end is cast to an integer
|
|
||||||
because the other boundary input is a number. (e.g. range(5, 'z');)
|
|
||||||
* An E_WARNING is now emitted if $step is a float when trying to generate
|
|
||||||
a range of characters, except if both boundary inputs are numeric strings
|
|
||||||
(e.g. range('5', '9', 0.5); does not produce a warning)
|
|
||||||
* range() now produce a list of characters if one of the boundary inputs is
|
|
||||||
a string digit instead of casting the other input to int
|
|
||||||
(e.g. range('5', 'z');)
|
|
||||||
. The file() flags error check now catches all invalid flags. Notably
|
|
||||||
FILE_APPEND was previously silently accepted.
|
|
||||||
|
|
||||||
- SNMP:
|
|
||||||
. The type of SNMP class constants are now declared.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
2. New Features
|
2. New Features
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Core
|
|
||||||
. Anonymous classes may now be marked as readonly.
|
|
||||||
. Readonly properties can now be reinitialized during cloning.
|
|
||||||
RFC: https://wiki.php.net/rfc/readonly_amendments
|
|
||||||
. Class, interface, trait, and enum constants now support type
|
|
||||||
declarations. RFC: https://wiki.php.net/rfc/typed_class_constants
|
|
||||||
. Closures created from magic methods can now accept named arguments.
|
|
||||||
. The final modifier may now be used when using a method from a trait.
|
|
||||||
. Added the #[\Override] attribute to check that a method exists
|
|
||||||
in a parent class or implemented interface.
|
|
||||||
RFC: https://wiki.php.net/rfc/marking_overriden_methods
|
|
||||||
. Class constants can now be accessed dynamically using the C::{$name}
|
|
||||||
syntax.
|
|
||||||
RFC: https://wiki.php.net/rfc/dynamic_class_constant_fetch
|
|
||||||
. Static variable initializers can now contain arbitrary expressions.
|
|
||||||
RFC: https://wiki.php.net/rfc/arbitrary_static_variable_initializers
|
|
||||||
|
|
||||||
- CLI
|
|
||||||
. It is now possible to lint multiple files.
|
|
||||||
|
|
||||||
- FFI
|
|
||||||
. It is now possible to assign CData to other CData. This means you can
|
|
||||||
now assign CData to structs and fields.
|
|
||||||
|
|
||||||
- Opcache
|
|
||||||
. opcache_get_status()['scripts'][n]['revalidate'] now contains a Unix
|
|
||||||
timestamp of when the next revalidation of the scripts timestamp is due,
|
|
||||||
dictated by the opcache.revalidate_freq INI directive.
|
|
||||||
|
|
||||||
- Posix
|
|
||||||
. posix_getrlimit() now takes an optional $res parameter to allow fetching a
|
|
||||||
single resource limit.
|
|
||||||
. posix_isatty() now raises type warnings for integers following the usual
|
|
||||||
ZPP semantics.
|
|
||||||
. posix_ttyname() now raises type warnings for integers following the usual
|
|
||||||
ZPP semantics and value warnings for invalid file descriptor integers.
|
|
||||||
|
|
||||||
- Streams
|
|
||||||
. Streams can now emit the STREAM_NOTIFY_COMPLETED notification. This was
|
|
||||||
previously not implemented.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
3. Changes in SAPI modules
|
3. Changes in SAPI modules
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- $_SERVER['SERVER_SOFTWARE'] value from the built-in CLI server changed to
|
|
||||||
make it compliant with RFC3875.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
4. Deprecated Functionality
|
4. Deprecated Functionality
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Core
|
|
||||||
. Using the ++ operator on empty, non-numeric, or non-alphanumeric strings
|
|
||||||
is now deprecated. Moreover, incrementing non-numeric strings is soft
|
|
||||||
deprecated and the new str_increment() function should be used instead.
|
|
||||||
RFC: https://wiki.php.net/rfc/saner-inc-dec-operators
|
|
||||||
. Using the -- operator on empty or non-numeric strings is now deprecated.
|
|
||||||
RFC: https://wiki.php.net/rfc/saner-inc-dec-operators
|
|
||||||
. Calling get_class() and get_parent_class() without arguments is now
|
|
||||||
deprecated.
|
|
||||||
|
|
||||||
- DBA
|
|
||||||
. Calling dba_fetch() with $dba as the 3rd argument is now deprecated.
|
|
||||||
|
|
||||||
- FFI
|
|
||||||
. Calling FFI::cast(), FFI::new(), and FFI::type() statically is now
|
|
||||||
deprecated.
|
|
||||||
|
|
||||||
- Intl
|
|
||||||
. The U_MULTIPLE_DECIMAL_SEP*E*RATORS constant had been deprecated, using
|
|
||||||
the U_MULTIPLE_DECIMAL_SEP*A*RATORS instead is recommended.
|
|
||||||
. The NumberFormatter::TYPE_CURRENCY has been deprecated.
|
|
||||||
|
|
||||||
- LDAP
|
|
||||||
. Calling ldap_connect() with separate hostname and port is deprecated.
|
|
||||||
RFC: https://wiki.php.net/rfc/deprecations_php_8_3#deprecate_calling_ldap_connect_with_2_parameters
|
|
||||||
|
|
||||||
- MBString
|
|
||||||
. Passing a negative $width to mb_strimwidth() is now deprecated.
|
|
||||||
|
|
||||||
- Phar
|
|
||||||
. Calling Phar::setStub() with a resource and a length is now deprecated.
|
|
||||||
Such calls should be replaced by:
|
|
||||||
$phar->setStub(stream_get_contents($resource));
|
|
||||||
|
|
||||||
- Random
|
|
||||||
. The MT_RAND_PHP Mt19937 variant is deprecated.
|
|
||||||
RFC: https://wiki.php.net/rfc/deprecations_php_8_3#mt_rand_php
|
|
||||||
|
|
||||||
- Standard:
|
|
||||||
. The assert_options() function is now deprecated.
|
|
||||||
. The ASSERT_ACTIVE, ASSERT_BAIL, ASSERT_CALLBACK, ASSERT_EXCEPTION, and
|
|
||||||
ASSERT_WARNING constants have been deprecated.
|
|
||||||
RFC: https://wiki.php.net/rfc/assert-string-eval-cleanup
|
|
||||||
|
|
||||||
- SQLite3
|
|
||||||
. Using exceptions is now preferred, warnings will be removed in the future.
|
|
||||||
Calling SQLite3::enableExceptions(false) will trigger a depreciation
|
|
||||||
warning in this version.
|
|
||||||
|
|
||||||
- Zip:
|
|
||||||
. The ZipArchive::FL_RECOMPRESS constant is deprecated and will be removed
|
|
||||||
in a future version of libzip
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
5. Changed Functions
|
5. Changed Functions
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Core:
|
|
||||||
. gc_status() has added the following 8 fields:
|
|
||||||
"running" => bool
|
|
||||||
"protected" => bool
|
|
||||||
"full" => bool
|
|
||||||
"buffer_size" => int
|
|
||||||
"application_time" => float: Total application time, in seconds (including
|
|
||||||
collector_time)
|
|
||||||
"collector_time" => float: Time spent collecting cycles, in seconds
|
|
||||||
(including destructor_time and free_time)
|
|
||||||
"destructor_time" => float: Time spent executing destructors during
|
|
||||||
cycle collection, in seconds
|
|
||||||
"free_time" => float: Time spent freeing values during cycle collection, in
|
|
||||||
seconds
|
|
||||||
See GH-9336, GH-11523
|
|
||||||
. class_alias() now supports creating an alias of an internal class.
|
|
||||||
. Setting `open_basedir` at runtime using `ini_set('open_basedir', ...);` no
|
|
||||||
longer accepts paths containing the parent directory (`..`). Previously,
|
|
||||||
only paths starting with `..` were disallowed. This could easily be
|
|
||||||
circumvented by prepending `./` to the path.
|
|
||||||
. 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
|
|
||||||
<pre> tag. The outer <span> has been merged with <code>.
|
|
||||||
|
|
||||||
- Calendar
|
|
||||||
. easter_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: CURLINFO_CAPATH and
|
|
||||||
CURLINFO_CAINFO. If option is null, the following two additional keys are
|
|
||||||
present: "capath" and "cainfo".
|
|
||||||
|
|
||||||
- Dom:
|
|
||||||
. Changed DOMCharacterData::appendData() tentative return type to true.
|
|
||||||
. DOMDocument::loadHTML(), DOMDocument::loadHTMLFile(),
|
|
||||||
DOMDocument::loadXML() and DOMDocument::loadXMLFile() now have a tentative
|
|
||||||
return type of bool. Previously, this was documented as having a return
|
|
||||||
type of DOMDocument|bool, but DOMDocument cannot be returned since PHP 8.0
|
|
||||||
as it is no longer statically callable.
|
|
||||||
|
|
||||||
- Gd:
|
|
||||||
. Changed imagerotate signature, removed the `ignore_transparent` argument
|
|
||||||
as it was not used internally anyway from PHP 7.x.
|
|
||||||
|
|
||||||
- Intl:
|
|
||||||
. datefmt_set_timezone (and its alias IntlDateformatter::setTimeZone)
|
|
||||||
now returns true on success, previously null was returned.
|
|
||||||
. IntlBreakiterator::setText() now returns false on failure, previously
|
|
||||||
null was returned.
|
|
||||||
now returns true on success, previously null was returned.
|
|
||||||
. IntlChar::enumCharNames is now returning a boolean.
|
|
||||||
Previously it returned null on success and false on failure.
|
|
||||||
|
|
||||||
- MBString:
|
|
||||||
. mb_strtolower, mb_strtotitle, and mb_convert_case implement conditional
|
|
||||||
casing rules for the Greek letter sigma. For mb_convert_case, conditional
|
|
||||||
casing only applies to MB_CASE_LOWER and MB_CASE_TITLE modes, not to
|
|
||||||
MB_CASE_LOWER_SIMPLE and MB_CASE_TITLE_SIMPLE.
|
|
||||||
. 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 "=5F" in such MIME encoded words.
|
|
||||||
. 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 false if the same byte
|
|
||||||
(for example, the first byte) of the input string was invalid in all
|
|
||||||
candidate encodings. More generally, it would eliminate candidate
|
|
||||||
encodings from consideration when an invalid byte was seen, and if the
|
|
||||||
same input byte eliminated all remaining encodings still under
|
|
||||||
consideration, it would return false. On the other hand, if all candidate
|
|
||||||
encodings but one were eliminated from consideration, it would return the
|
|
||||||
last remaining one without regard for how many encoding errors might be
|
|
||||||
encountered later in the string. This is different from the behavior
|
|
||||||
described in the documentation, which says: "If strict is set to false,
|
|
||||||
the closest matching encoding will be returned."
|
|
||||||
|
|
||||||
- mysqli:
|
|
||||||
. mysqli_fetch_object now raises a ValueError instead of an Exception when
|
|
||||||
the constructor_args argument is non empty with the class not having
|
|
||||||
constructor.
|
|
||||||
. mysqli_poll now raises a ValueError when the read nor error arguments are
|
|
||||||
passed.
|
|
||||||
. mysqli_field_seek and mysqli_result::field_seek now specify return type
|
|
||||||
as true instead of bool.
|
|
||||||
|
|
||||||
- ODBC
|
|
||||||
. odbc_autocommit() now accepts null for the $enable parameter.
|
|
||||||
Passing null has the same behaviour as passing only 1 parameter,
|
|
||||||
namely indicating if the autocommit feature is enabled or not.
|
|
||||||
|
|
||||||
- PGSQL:
|
|
||||||
. pg_fetch_object now raises a ValueError instead of an Exception when the
|
|
||||||
constructor_args argument is non empty with the class not having
|
|
||||||
constructor.
|
|
||||||
. pg_insert now raises a ValueError instead of a WARNING when the table
|
|
||||||
specified is invalid.
|
|
||||||
. pg_insert and pg_convert raises a ValueError or a TypeError instead of a
|
|
||||||
WARNING when the value/type of a field does not match properly with a
|
|
||||||
PostGreSQL's type.
|
|
||||||
. The $row param of pg_fetch_result(), pg_field_prtlen() and
|
|
||||||
pg_field_is_null() is now nullable.
|
|
||||||
|
|
||||||
- Random:
|
|
||||||
. Changed mt_srand() and srand() to not check the number of arguments to
|
|
||||||
determine whether a random seed should be used. Passing null will generate
|
|
||||||
a random seed, 0 will use zero as the seed. The functions are now
|
|
||||||
consistent with Mt19937::__construct().
|
|
||||||
|
|
||||||
- Reflection:
|
|
||||||
. Return type of ReflectionClass::getStaticProperties() is no longer nullable.
|
|
||||||
. Calling ReflectionProperty::setValue() with only one parameter is deprecated.
|
|
||||||
To set static properties, pass null as the first parameter.
|
|
||||||
|
|
||||||
- Standard:
|
|
||||||
. E_NOTICEs emitted by unserialize() have been promoted to E_WARNING.
|
|
||||||
RFC: https://wiki.php.net/rfc/improve_unserialize_error_handling
|
|
||||||
. unserialize() now emits a new E_WARNING if the input contains unconsumed
|
|
||||||
bytes.
|
|
||||||
RFC: https://wiki.php.net/rfc/unserialize_warn_on_trailing_data
|
|
||||||
. 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 a warning in the case token is not provided when starting
|
|
||||||
tokenization.
|
|
||||||
. password_hash() will now chain the underlying Random\RandomException
|
|
||||||
as the ValueError’s $previous Exception when salt generation fails.
|
|
||||||
. proc_open() $command array must now have at least one non empty element.
|
|
||||||
. 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.
|
|
||||||
RFC: https://wiki.php.net/rfc/saner-array-sum-product
|
|
||||||
. number_format() $decimal parameter handles rounding to negative places. It
|
|
||||||
means that when $decimals is negative, $num is rounded to $decimals
|
|
||||||
significant digits before the decimal point. Previously negative $decimals
|
|
||||||
got silently ignored and the number got rounded to zero decimal places.
|
|
||||||
. The $before_needle argument added to strrchr() which works in the same way
|
|
||||||
like its counterpart in strstr() or stristr().
|
|
||||||
. str_getcsv() and fgetcsv() return empty string instead of a string with
|
|
||||||
a single zero byte for the last field which contains only unterminated
|
|
||||||
enclosure.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
6. New Functions
|
6. New Functions
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Date:
|
|
||||||
. Added DatePeriod::createFromISO8601String() as a replacement for the
|
|
||||||
overloaded constructor of DatePeriod.
|
|
||||||
|
|
||||||
- DOM:
|
|
||||||
. Added DOMNode::contains() and DOMNameSpaceNode::contains().
|
|
||||||
. Added DOMElement::getAttributeNames().
|
|
||||||
. Added DOMNode::getRootNode(). The $options argument does nothing at the
|
|
||||||
moment because it only influences the shadow DOM, which we do not support
|
|
||||||
yet.
|
|
||||||
. Added DOMElement::className and DOMElement::id.
|
|
||||||
This is not binary-safe at the moment because of underlying limitations of
|
|
||||||
libxml2.
|
|
||||||
. Added DOMParentNode::replaceChildren().
|
|
||||||
. Added DOMNode::isConnected and DOMNameSpaceNode::isConnected.
|
|
||||||
. Added DOMNode::parentElement and DOMNameSpaceNode::parentElement.
|
|
||||||
. Added DOMNode::isEqualNode().
|
|
||||||
. Added DOMElement::insertAdjacentElement() and
|
|
||||||
DOMElement::insertAdjacentText().
|
|
||||||
. Added DOMElement::toggleAttribute().
|
|
||||||
|
|
||||||
- Intl:
|
|
||||||
. Added IntlCalendar::setDate() and IntlCalendar::setDateTime()
|
|
||||||
as partial replacements for the overloaded IntlCalendar::set() method.
|
|
||||||
. Added IntlGregorianCalendar::createFromDate() and
|
|
||||||
IntlGregorianCalendar::createFromDateTime()
|
|
||||||
as partial replacements for the overloaded IntlGregorianCalendar
|
|
||||||
constructor.
|
|
||||||
|
|
||||||
- JSON:
|
|
||||||
. Added json_validate(), which returns whether the json is valid for
|
|
||||||
the given $depth and $options.
|
|
||||||
RFC: https://wiki.php.net/rfc/json_validate
|
|
||||||
|
|
||||||
- LDAP:
|
|
||||||
. Added ldap_connect_wallet().
|
|
||||||
. Added ldap_exop_sync().
|
|
||||||
|
|
||||||
- MBString:
|
|
||||||
. Added mb_str_pad(), which is the mbstring equivalent of str_pad().
|
|
||||||
RFC: https://wiki.php.net/rfc/mb_str_pad
|
|
||||||
|
|
||||||
- Posix:
|
|
||||||
. Added posix_sysconf call to get runtime informations.
|
|
||||||
. Added posix_pathconf call to get configuration value from a directory/file.
|
|
||||||
. Added posix_fpathconf call to get configuration value from a file
|
|
||||||
descriptor.
|
|
||||||
. Added posix_eaccess call to check the effective user id's permission for
|
|
||||||
a path.
|
|
||||||
|
|
||||||
- PGSQL:
|
|
||||||
. Added pg_set_error_context_visibility to set the visibility of the context
|
|
||||||
in error messages (with libpq >= 9.6).
|
|
||||||
. Added pg_enter_pipeline_mode().
|
|
||||||
. Added pg_exit_pipeline_mode().
|
|
||||||
. Added pg_pipeline_sync().
|
|
||||||
. Added pg_pipeline_status().
|
|
||||||
|
|
||||||
- Random:
|
|
||||||
. Added Randomizer::getBytesFromString().
|
|
||||||
RFC: https://wiki.php.net/rfc/randomizer_additions
|
|
||||||
. Added Randomizer::nextFloat(), ::getFloat(), and IntervalBoundary.
|
|
||||||
RFC: https://wiki.php.net/rfc/randomizer_additions
|
|
||||||
|
|
||||||
- Reflection:
|
|
||||||
. Added ReflectionMethod::createFromMethodName().
|
|
||||||
|
|
||||||
- Sockets:
|
|
||||||
. Added socket_atmark to checks if the socket is OOB marked.
|
|
||||||
|
|
||||||
- Standard:
|
|
||||||
. Added the str_increment() and str_decrement() functions.
|
|
||||||
RFC: https://wiki.php.net/rfc/saner-inc-dec-operators
|
|
||||||
. Added stream_context_set_options() as a replacement for
|
|
||||||
stream_context_set_option() when passed an array of options.
|
|
||||||
|
|
||||||
- Zip:
|
|
||||||
. Added ZipArchive::setArchiveFlag and ZipArchive::getArchiveFlag methods.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
7. New Classes and Interfaces
|
7. New Classes and Interfaces
|
||||||
========================================
|
========================================
|
||||||
|
@ -459,220 +51,23 @@ PHP 8.3 UPGRADE NOTES
|
||||||
9. Other Changes to Extensions
|
9. Other Changes to Extensions
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Core:
|
|
||||||
. WeakMaps now have ephemeron-like behavior: Entries whose key maps to itself
|
|
||||||
(possibly transitively) may be removed during cycle collection if the key
|
|
||||||
is not reachable except by iterating over the WeakMap (reachability via
|
|
||||||
iteration is considered weak). Previously, such entries would never be
|
|
||||||
automatically removed. (See GH-10932.)
|
|
||||||
. The ++ and -- operators now emit warnings when attempting to increment
|
|
||||||
values of type bool as this will change in the next major version.
|
|
||||||
A warning is emitted when trying to decrement values of type null, as
|
|
||||||
this will change in the next major version.
|
|
||||||
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 $o += 1 or $o -= 1
|
|
||||||
|
|
||||||
- DOM:
|
|
||||||
. The DOM lifetime mechanism has been reworked such that implicitly removed
|
|
||||||
nodes can still be fetched. Previously this resulted in an exception.
|
|
||||||
|
|
||||||
- SQLite3
|
|
||||||
. The 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.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
10. New Global Constants
|
10. New Global Constants
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Curl:
|
|
||||||
. CURLINFO_CAPATH
|
|
||||||
. CURLINFO_CAINFO
|
|
||||||
. CURLOPT_MIME_OPTIONS
|
|
||||||
. CURLMIMEOPT_FORMESCAPE
|
|
||||||
. CURLOPT_WS_OPTIONS
|
|
||||||
. CURLWS_RAW_MODE
|
|
||||||
. CURLOPT_SSH_HOSTKEYFUNCTION
|
|
||||||
. CURLOPT_PROTOCOLS_STR
|
|
||||||
. CURLOPT_REDIR_PROTOCOLS_STR
|
|
||||||
. CURLOPT_CA_CACHE_TIMEOUT
|
|
||||||
. CURLOPT_QUICK_EXIT
|
|
||||||
. CURLKHMATCH_OK
|
|
||||||
. CURLKHMATCH_MISMATCH
|
|
||||||
. CURLKHMATCH_MISSING
|
|
||||||
. CURLKHMATCH_LAST
|
|
||||||
|
|
||||||
- Intl:
|
|
||||||
. MIXED_NUMBERS (Spoofchecker).
|
|
||||||
. HIDDEN_OVERLAY (Spoofchecker).
|
|
||||||
|
|
||||||
- OpenSSL:
|
|
||||||
. OPENSSL_CMS_OLDMIMETYPE
|
|
||||||
. PKCS7_NOOLDMIMETYPE
|
|
||||||
|
|
||||||
- PCNTL:
|
|
||||||
. SIGINFO
|
|
||||||
|
|
||||||
- PDO_ODBC
|
|
||||||
. PDO_ODBC_TYPE
|
|
||||||
|
|
||||||
- PGSQL:
|
|
||||||
. PGSQL_TRACE_SUPPRESS_TIMESTAMPS
|
|
||||||
. PGSQL_TRACE_REGRESS_MODE
|
|
||||||
. PGSQL_ERRORS_SQLSTATE
|
|
||||||
. PGSQL_PIPELINE_SYNC
|
|
||||||
. PGSQL_PIPELINE_ON
|
|
||||||
. PGSQL_PIPELINE_OFF
|
|
||||||
. PGSQL_PIPELINE_ABORTED
|
|
||||||
. PGSQL_SHOW_CONTEXT_NEVER
|
|
||||||
. PGSQL_SHOW_CONTEXT_ERRORS
|
|
||||||
. PGSQL_SHOW_CONTEXT_ALWAYS
|
|
||||||
|
|
||||||
- Posix:
|
|
||||||
. POSIX_SC_ARG_MAX
|
|
||||||
. POSIX_SC_PAGESIZE
|
|
||||||
. POSIX_SC_NPROCESSORS_CONF
|
|
||||||
. POSIX_SC_NPROCESSORS_ONLN
|
|
||||||
. POSIX_PC_LINK_MAX
|
|
||||||
. POSIX_PC_MAX_CANON
|
|
||||||
. POSIX_PC_MAX_INPUT
|
|
||||||
. POSIX_PC_NAME_MAX
|
|
||||||
. POSIX_PC_PATH_MAX
|
|
||||||
. POSIX_PC_PIPE_BUF
|
|
||||||
. POSIX_PC_CHOWN_RESTRICTED
|
|
||||||
. POSIX_PC_NO_TRUNC
|
|
||||||
. POSIX_PC_ALLOC_SIZE_MIN
|
|
||||||
. POSIX_PC_SYMLINK_MAX
|
|
||||||
|
|
||||||
- Sockets:
|
|
||||||
. SO_ATTACH_REUSEPORT_CBPF (Linux only).
|
|
||||||
. SO_DETACH_BPF (Linux only).
|
|
||||||
. SO_DETACH_FILTER (Linux only).
|
|
||||||
. TCP_QUICKACK (Linux only).
|
|
||||||
. IP_DONTFRAG (FreeBSD only).
|
|
||||||
. IP_MTU_DISCOVER (Linux only).
|
|
||||||
. IP_PMTUDISC_DO (Linux only).
|
|
||||||
. IP_PMTUDISC_DONT (Linux only).
|
|
||||||
. IP_PMTUDISC_WANT (Linux only).
|
|
||||||
. IP_PMTUDISC_PROBE (Linux only).
|
|
||||||
. IP_PMTUDISC_INTERFACE (Linux only).
|
|
||||||
. IP_PMTUDISC_OMIT (Linux only).
|
|
||||||
. AF_DIVERT (FreeBSD only).
|
|
||||||
. SOL_UDPLITE.
|
|
||||||
. UDPLITE_RECV_CSCOV.
|
|
||||||
. UDPLITE_SEND_CSCOV.
|
|
||||||
. SO_RERROR (NetBSD only).
|
|
||||||
. SO_ZEROIZE (OpenBSD only).
|
|
||||||
. SO_SPLICE (OpenBSD only).
|
|
||||||
. TCP_REPAIR (Linux only).
|
|
||||||
. SO_REUSEPORT_LB (FreeBSD only).
|
|
||||||
. IP_BIND_ADDRESS_NO_PORT (Linux only).
|
|
||||||
|
|
||||||
- Zip:
|
|
||||||
. ZipArchive::ER_DATA_LENGTH (libzip >= 1.10)
|
|
||||||
. ZipArchive::ER_NOT_ALLOWED (libzip >= 1.10)
|
|
||||||
. ZipArchive::AFL_RDONLY (libzip >= 1.10)
|
|
||||||
. ZipArchive::AFL_IS_TORRENTZIP (libzip >= 1.10)
|
|
||||||
. ZipArchive::AFL_WANT_TORRENTZIP (libzip >= 1.10)
|
|
||||||
. ZipArchive::AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE (libzip >= 1.10)
|
|
||||||
. ZipArchive::FL_OPEN_FILE_NOW
|
|
||||||
. ZipArchive::LENGTH_TO_END as default value for addFile and replaceFile
|
|
||||||
. ZipArchive::LENGTH_UNCHECKED (libzip >= 1.10.1)
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
11. Changes to INI File Handling
|
11. Changes to INI File Handling
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- assert.*
|
|
||||||
. The assert.* INI settings have been deprecated.
|
|
||||||
This comprises the following INI settings:
|
|
||||||
- assert.active
|
|
||||||
- assert.bail
|
|
||||||
- assert.callback
|
|
||||||
- assert.exception
|
|
||||||
- assert.warning
|
|
||||||
If the value of the setting is equal to the default value, no deprecation
|
|
||||||
notice is emitted.
|
|
||||||
The zend.assertions INI setting should be used instead.
|
|
||||||
|
|
||||||
- zend.max_allowed_stack_size
|
|
||||||
. New INI directive to set the maximum allowed stack size. Possible
|
|
||||||
values are `0` (detect the process or thread maximum stack size), `-1`
|
|
||||||
(no limit), or a positive number of bytes. The default is `0`. When it
|
|
||||||
is not possible to detect the the process or thread maximum stack size,
|
|
||||||
a known system default is used. Setting this value too high has the same
|
|
||||||
effect as disabling the stack size limit. Fibers use fiber.stack_size
|
|
||||||
as maximum allowed stack size. An Error is thrown when the process call
|
|
||||||
stack exceeds `zend.max_allowed_stack_size-zend.reserved_stack_size`
|
|
||||||
bytes, to prevent stack-overflow-induced segmentation faults, with
|
|
||||||
the goal of making debugging easier. The stack size increases during
|
|
||||||
uncontrolled recursions involving internal functions or the magic methods
|
|
||||||
__toString, __clone, __sleep, __destruct. This is not related to stack
|
|
||||||
buffer overflows, and is not a security feature.
|
|
||||||
|
|
||||||
- zend.reserved_stack_size
|
|
||||||
. New INI directive to set the reserved stack size, in bytes. This is
|
|
||||||
subtracted from the max allowed stack size, as a buffer, when checking the
|
|
||||||
stack size.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
12. Windows Support
|
12. Windows Support
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Minimum supported Windows version has been bumped to Windows 8 or
|
|
||||||
Windows Server 2012
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
13. Other Changes
|
13. Other Changes
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- Core:
|
|
||||||
. An Error is now thrown when the process call stack exceeds a certain size,
|
|
||||||
to prevent stack-overflow-induced segmentation faults, with the goal of
|
|
||||||
making debugging easier. The maximum allowed stack size is controlled
|
|
||||||
by the INI directives zend.max_allowed_stack_size,
|
|
||||||
zend.reserved_stack_size and fiber.stack_size.
|
|
||||||
|
|
||||||
- FFI:
|
|
||||||
. FFI::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.
|
|
||||||
|
|
||||||
- FPM:
|
|
||||||
. FPM CLI test now fails if the socket path is longer than supported by OS.
|
|
||||||
|
|
||||||
- Opcache:
|
|
||||||
. In 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.
|
|
||||||
|
|
||||||
- Streams:
|
|
||||||
. Blocking fread() on socket connection returns immediately if there are
|
|
||||||
any buffered data instead of waiting for more data.
|
|
||||||
. Memory stream no longer fails if seek offset is past the end. Instead
|
|
||||||
the memory is increase on the next write and date between the old end and
|
|
||||||
offset is filled with zero bytes in the same way how it works for files.
|
|
||||||
. 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.
|
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
14. Performance Improvements
|
14. Performance Improvements
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
- DOM:
|
|
||||||
. Looping 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.
|
|
||||||
|
|
||||||
- Standard:
|
|
||||||
. The file() flags error check is now about 7% faster.
|
|
||||||
|
|
||||||
- SPL:
|
|
||||||
. RecursiveDirectoryIterator now performs less I/O when looping over a
|
|
||||||
directory.
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
PHP 8.3 INTERNALS UPGRADE NOTES
|
PHP 8.4 INTERNALS UPGRADE NOTES
|
||||||
|
|
||||||
1. Internal API changes
|
1. Internal API changes
|
||||||
|
|
||||||
|
@ -14,147 +14,14 @@ PHP 8.3 INTERNALS UPGRADE NOTES
|
||||||
1. Internal API changes
|
1. Internal API changes
|
||||||
========================
|
========================
|
||||||
|
|
||||||
* zend_class_entry now possesses a default_object_handlers field, which
|
|
||||||
provides a default object handler when create_object() is not overriding it.
|
|
||||||
* Custom Fiber implementations have to initialize EG(stack_limit) and
|
|
||||||
EG(stack_base).
|
|
||||||
* EG(opline_before_exception) may now be null if the VM throws an exception
|
|
||||||
before executing any opline.
|
|
||||||
* Many C header files have been cleaned up and include dependencies
|
|
||||||
have been reduced. Many headers which used to be always included by
|
|
||||||
Zend headers (e.g. "errno.h") are no longer implied, and this may
|
|
||||||
break the build of third-party extensions which relied on this
|
|
||||||
implementation detail. Those extensions may need to add the missing
|
|
||||||
#include lines.
|
|
||||||
* Since version 8, PHP requires a C99 compiler. Configure-time checks
|
|
||||||
for C99 features have been removed and therefore macro definitions
|
|
||||||
from php_config.h have disappeared. Do not use those feature
|
|
||||||
macros.
|
|
||||||
* Internal class aliases created during request time can now exist in
|
|
||||||
the class table. zend_register_class_alias_ex() will not increase
|
|
||||||
the refcount for class aliases and the cleanup function takes this
|
|
||||||
into account.
|
|
||||||
* The return types of the following functions have been changed from
|
|
||||||
`bool` to `zend_result`:
|
|
||||||
- zend_fiber_init_context()
|
|
||||||
* The fast_add_function() has been removed, use add_function() that will
|
|
||||||
call the static inline add_function_fast() instead.
|
|
||||||
* The order of members of zend_op_array, zend_ssa_var, zend_ssa_var_info,
|
|
||||||
zend_executor_globals and php_core_globals have changed to improve
|
|
||||||
struct packing which reduces their size.
|
|
||||||
* Many calls to zend_assign_to_variable have been replaced with
|
|
||||||
zend_assign_to_variable_ex which allows delaying the releasing of the old
|
|
||||||
variable value. This avoids side-effects through destructors between the
|
|
||||||
assignment of the variable and the assignment to the result zval in the VM
|
|
||||||
(i.e. it may free the new value). See GH-10168 for details.
|
|
||||||
* The return types of the following functions were changed from int to
|
|
||||||
zend_result:
|
|
||||||
- open_file_for_scanning
|
|
||||||
- php_rfc1867_callback
|
|
||||||
- virtual_chdir
|
|
||||||
- zend_execute_scripts
|
|
||||||
- zend_get_module_started
|
|
||||||
- zend_handle_undef_args
|
|
||||||
- zend_list_delete
|
|
||||||
- zend_multibyte_parse_encoding_list
|
|
||||||
- zend_multibyte_set_internal_encoding
|
|
||||||
- zend_parse_ini_file
|
|
||||||
- zend_parse_ini_string
|
|
||||||
- zend_set_user_opcode_handler
|
|
||||||
- zend_ssa_inference
|
|
||||||
* Removed unused macros PHP_FNV1_32A_INIT and PHP_FNV1A_64_INIT. See GH-11114.
|
|
||||||
* ext/standard/hrtime.h was moved to Zend/zend_hrtime.h
|
|
||||||
* The prefix of the PHP_HRTIME_ macros was changed to ZEND_HRTIME_
|
|
||||||
* The HRTIME_AVAILABLE macro was renamed to ZEND_HRTIME_AVAILABLE
|
|
||||||
* The php_hrtime_current() function was renamed to zend_hrtime()
|
|
||||||
* _php_stream_dirent now has an extra d_type field that is used to store the
|
|
||||||
directory entry type. This can be used to avoid additional stat calls for
|
|
||||||
types when the type is already known.
|
|
||||||
|
|
||||||
========================
|
========================
|
||||||
2. Build system changes
|
2. Build system changes
|
||||||
========================
|
========================
|
||||||
|
|
||||||
* PHP_EXTRA_VERSION can be passed to configure script to control custom PHP
|
|
||||||
build versions: ./configure PHP_EXTRA_VERSION="-acme"
|
|
||||||
|
|
||||||
* LDFLAGS are not unset anymore allowing them to be adjusted e.g.
|
|
||||||
LDFLAGS="..." ./configure
|
|
||||||
|
|
||||||
* Removed the HAVE_DEV_URANDOM compile time check. HAVE_DEV_URANDOM will
|
|
||||||
now never be defined. Any checks relying on HAVE_DEV_URANDOM should be
|
|
||||||
removed. Even with HAVE_DEV_URANDOM it was not guaranteed that
|
|
||||||
/dev/urandom is actually available at run time and thus a runtime
|
|
||||||
check needs to happen in all cases.
|
|
||||||
|
|
||||||
========================
|
========================
|
||||||
3. Module changes
|
3. Module changes
|
||||||
========================
|
========================
|
||||||
|
|
||||||
a. ext/json
|
|
||||||
- A new function php_json_validate_ex has been added to check if the
|
|
||||||
provided C string is valid for the given depth and options.
|
|
||||||
|
|
||||||
b. ext/standard
|
|
||||||
- The PHPAPI php_url_encode_hash_ex() function has had its signature change
|
|
||||||
from:
|
|
||||||
PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
|
|
||||||
const char *num_prefix, size_t num_prefix_len,
|
|
||||||
const char *key_prefix, size_t key_prefix_len,
|
|
||||||
const char *key_suffix, size_t key_suffix_len,
|
|
||||||
zval *type, const char *arg_sep, int enc_type);
|
|
||||||
to:
|
|
||||||
PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
|
|
||||||
const char *num_prefix, size_t num_prefix_len,
|
|
||||||
const zend_string *key_prefix,
|
|
||||||
zval *type, const zend_string *arg_sep, int enc_type);
|
|
||||||
The change to use zend_string prevent the computation of the arg_sep
|
|
||||||
length at each call. The key_suffix parameter was dropped as it was a
|
|
||||||
constant value and depended on the key_prefix parameter to not be NULL.
|
|
||||||
|
|
||||||
c. ext/mysqlnd
|
|
||||||
- The function mysqlnd_shutdown and its corresponding internal methods
|
|
||||||
mysqlnd_command::shutdown & mysqlnd_conn_data::shutdown have been removed.
|
|
||||||
These functions are deprecated by MySQL in favour of SHUTDOWN SQL statement.
|
|
||||||
|
|
||||||
d. ext/pcre
|
|
||||||
- The function pcre_get_compiled_regex_ex has been removed.
|
|
||||||
Use pcre_get_compiled_regex instead.
|
|
||||||
|
|
||||||
e. ext/spl
|
|
||||||
- The PHPAPI spl_iterator_apply() function now returns zend_result instead of int.
|
|
||||||
There are no functional changes.
|
|
||||||
- The field _spl_filesystem_object->is_recursive has been removed.
|
|
||||||
|
|
||||||
f. ext/dom
|
|
||||||
- A new function dom_get_doc_props_read_only() is added to gather the document
|
|
||||||
properties in a read-only way. This function avoids allocation when there are
|
|
||||||
no document properties changed yet.
|
|
||||||
- The node list returned by DOMNode::getElementsByTagName() and
|
|
||||||
DOMNode::getElementsByTagNameNS() now caches the length and the last requested item.
|
|
||||||
This means that the length and the last requested item are not recalculated
|
|
||||||
when the node list is iterated over multiple times.
|
|
||||||
If you do not use the internal PHP dom APIs to modify the document, you need to
|
|
||||||
manually invalidate the cache using php_libxml_invalidate_node_list_cache_from_doc().
|
|
||||||
Furthermore, the following internal APIs were added to handle the cache:
|
|
||||||
. php_dom_is_cache_tag_stale_from_doc_ptr()
|
|
||||||
. php_dom_is_cache_tag_stale_from_node()
|
|
||||||
. php_dom_mark_cache_tag_up_to_date_from_node()
|
|
||||||
- The function dom_get_elements_by_tag_name_ns_raw() has an additional parameter to indicate
|
|
||||||
the base node of the node list. This function also no longer accepts -1 as the index argument.
|
|
||||||
- The function dom_namednode_iter() has additional arguments to avoid recomputing the length of
|
|
||||||
the strings.
|
|
||||||
- The functions dom_parent_node_prepend(), dom_parent_node_append(), dom_parent_node_after(), and
|
|
||||||
dom_parent_node_before() now use an uint32_t argument for the number of nodes instead of int.
|
|
||||||
- There is now a helper function php_dom_get_content_into_zval() to get the contents of a node.
|
|
||||||
This avoids allocation if possible.
|
|
||||||
- The function dom_set_old_ns() has been moved into ext/libxml as php_libxml_set_old_ns() and
|
|
||||||
is now publicly exposed as an API.
|
|
||||||
|
|
||||||
g. ext/libxml
|
|
||||||
- Two new functions: php_libxml_invalidate_node_list_cache_from_doc() and
|
|
||||||
php_libxml_invalidate_node_list_cache() were added to invalidate the cache of a node list.
|
|
||||||
|
|
||||||
========================
|
========================
|
||||||
4. OpCode changes
|
4. OpCode changes
|
||||||
========================
|
========================
|
||||||
|
@ -162,6 +29,3 @@ PHP 8.3 INTERNALS UPGRADE NOTES
|
||||||
========================
|
========================
|
||||||
5. SAPI changes
|
5. SAPI changes
|
||||||
========================
|
========================
|
||||||
|
|
||||||
* SAPIs that may execute in alternative stacks have to set EG(stack_limit) and
|
|
||||||
EG(stack_base)
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ You can use the following macro to check the extension API version for compatibi
|
||||||
|
|
||||||
/* The first number is the engine version and the rest is the date (YYYYMMDD).
|
/* The first number is the engine version and the rest is the date (YYYYMMDD).
|
||||||
* This way engine 2/3 API no. is always greater than engine 1 API no.. */
|
* This way engine 2/3 API no. is always greater than engine 1 API no.. */
|
||||||
#define ZEND_EXTENSION_API_NO 420230831
|
#define ZEND_EXTENSION_API_NO 420230901
|
||||||
|
|
||||||
typedef struct _zend_extension_version_info {
|
typedef struct _zend_extension_version_info {
|
||||||
int zend_extension_api_no;
|
int zend_extension_api_no;
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
|
#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
|
||||||
#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module
|
#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module
|
||||||
|
|
||||||
#define ZEND_MODULE_API_NO 20230831
|
#define ZEND_MODULE_API_NO 20230901
|
||||||
#ifdef ZTS
|
#ifdef ZTS
|
||||||
#define USING_ZTS 1
|
#define USING_ZTS 1
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <dmalloc.h>
|
#include <dmalloc.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PHP_API_VERSION 20230831
|
#define PHP_API_VERSION 20230901
|
||||||
#define PHP_HAVE_STREAMS
|
#define PHP_HAVE_STREAMS
|
||||||
#define YYDEBUG 0
|
#define YYDEBUG 0
|
||||||
#define PHP_DEFAULT_CHARSET "UTF-8"
|
#define PHP_DEFAULT_CHARSET "UTF-8"
|
||||||
|
|
|
@ -95,10 +95,10 @@ if (typeof(CWD) == "undefined") {
|
||||||
if (!MODE_PHPIZE) {
|
if (!MODE_PHPIZE) {
|
||||||
/* defaults; we pick up the precise versions from configure.ac */
|
/* defaults; we pick up the precise versions from configure.ac */
|
||||||
var PHP_VERSION = 8;
|
var PHP_VERSION = 8;
|
||||||
var PHP_MINOR_VERSION = 3;
|
var PHP_MINOR_VERSION = 4;
|
||||||
var PHP_RELEASE_VERSION = 0;
|
var PHP_RELEASE_VERSION = 0;
|
||||||
var PHP_EXTRA_VERSION = "";
|
var PHP_EXTRA_VERSION = "";
|
||||||
var PHP_VERSION_STRING = "8.3.0";
|
var PHP_VERSION_STRING = "8.4.0";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get version numbers and DEFINE as a string */
|
/* Get version numbers and DEFINE as a string */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue