php-src/UPGRADING

486 lines
18 KiB
Plaintext
Raw Normal View History

2021-08-31 17:13:49 +00:00
PHP 8.2 UPGRADE NOTES
1. Backward Incompatible Changes
2. New Features
2014-05-01 10:27:38 +00:00
3. Changes in SAPI modules
4. Deprecated Functionality
5. Changed Functions
6. New Functions
7. New Classes and Interfaces
2015-02-10 07:56:18 +00:00
8. Removed Extensions and SAPIs
2014-05-01 10:27:38 +00:00
9. Other Changes to Extensions
10. New Global Constants
11. Changes to INI File Handling
2014-08-22 11:35:07 +00:00
12. Windows Support
13. Other Changes
14. Performance Improvements
2010-03-24 16:23:50 +00:00
========================================
1. Backward Incompatible Changes
2010-03-24 16:23:50 +00:00
========================================
- Date:
. DateTime::createFromImmutable() now has a tentative return type of static,
previously it was DateTime.
. DateTimeImmutable::createFromMutable() now has a tentative return type of static,
previously it was DateTimeImmutable.
- ODBC:
. The ODBC extension now escapes the username and password for the case when
both a connection string and username/password are passed, and the string
must be appended to. Before, user values containing values needing escaping
could have created a malformed connection string, or injected values from
user-provided data. The escaping rules should be identical to the .NET BCL
DbConnectionOptions behaviour.
- PDO_ODBC:
. The PDO_ODBC extension also escapes the username and password when a
connection string is passed. See the change to the ODBC extension for
further details.
- Standard:
. strtolower() and strtoupper() are no longer locale-sensitive. They now
perform ASCII case conversion, as if the locale were "C". Use
mb_strtolower() if you want localized case conversion. Similarly, stristr,
stripos, strripos, lcfirst, ucfirst, ucwords, str_ireplace,
array_change_key_case and sorting with SORT_FLAG_CASE use ASCII case
conversion.
. str_split no longer returns an empty array on empty string.
- SPL:
. The following methods now enforce their signature:
* SplFileInfo::_bad_state_ex()
* SplFileObject::getCsvControl()
* SplFileObject::fflush()
* SplFileObject::ftell()
* SplFileObject::fgetc()
* SplFileObject::fpassthru()
2022-04-20 16:43:10 +00:00
. SplFileObject::hasChildren() now has a tentative return type of false,
previously it was bool
. SplFileObject::getChildren() now has a tentative return type of null,
previously it was ?RecursiveIterator
========================================
2. New Features
========================================
- Core:
. Added the #[\SensitiveParameter] attribute to redact sensitive data in
backtraces.
RFC: https://wiki.php.net/rfc/redact_parameters_in_back_traces
2022-04-20 16:43:10 +00:00
. It is now possible to use null and false as standalone types.
RFC: https://wiki.php.net/rfc/null-false-standalone-types
. Added support for readonly classes.
RFC: https://wiki.php.net/rfc/readonly_classes
. Added support for true type.
RFC: https://wiki.php.net/rfc/true-type
- Curl:
. Added CURLINFO_EFFECTIVE_METHOD option and returning the effective
HTTP method in curl_getinfo() return value.
. Exposed multiple new constants from libcurl 7.62 to 7.80.
2022-06-08 05:32:32 +00:00
. Added new function curl_upkeep() to perform any connection upkeep checks.
2021-11-12 06:59:22 +00:00
- OCI8:
2021-11-28 01:06:25 +00:00
. Added an oci8.prefetch_lob_size directive and oci_set_prefetch_lob()
function to tune LOB query performance by reducing the number of
round-trips between PHP and Oracle Database when fetching LOBS. This is
usable with Oracle Database 12.2 or later.
2021-11-12 06:59:22 +00:00
- ODBC:
. Added odbc_connection_string_is_quoted, odbc_connection_string_should_quote,
and odbc_connection_string_quote. These are primarily used behind the scenes
in the ODBC and PDO_ODBC extensions, but is exposed to userland for easier
unit testing, and for user applications and libraries to perform quoting
themselves.
- PCRE:
. Added support for the "n" (NO_AUTO_CAPTURE) modifier, which makes simple
`(xyz)` groups non-capturing. Only named groups like `(?<name>xyz)` are
capturing. This only affects which groups are capturing, it is still
possible to use numbered subpattern references, and the matches array will
still contain numbered results.
========================================
2014-05-01 10:27:38 +00:00
3. Changes in SAPI modules
========================================
========================================
2014-05-01 10:27:38 +00:00
4. Deprecated Functionality
========================================
- Core:
. Creation of dynamic properties is deprecated, unless the class opts in by
using the #[AllowDynamicProperties] attribute. stdClass allows dynamic
properties. Usage of __get()/__set() is not affected by this change. A
dynamic properties deprecation warning can be addressed by:
- Declaring the property (preferred).
- Adding the #[AllowDynamicProperties] attribute to the class (which also
applies to all child classes).
- Using a WeakMap if you wish to associate additional data with an object
you do not own.
. Callables that are not accepted by the $callable() syntax (but are accepted
by call_user_func) are deprecated. In particular:
"self::method"
"parent::method"
"static::method"
["self", "method"]
["parent", "method"]
["static", "method"]
["Foo", "Bar::method"]
[new Foo, "Bar::method"]
This does not affect normal method callables like "A::method" or
["A", "method"]. A deprecation notice is only emitted on call. Both
is_callable() and the callable type will silently accept these callables
until support for them is removed entirely.
RFC: https://wiki.php.net/rfc/deprecate_partially_supported_callables
. The "${var}" and "${expr}" style string interpolations are deprecated and
will be removed in PHP 9. Use "$var"/"{$var}" or "{${expr}}", respectively.
RFC: https://wiki.php.net/rfc/deprecate_dollar_brace_string_interpolation
- Mbstring:
. Use of QPrint, Base64, Uuencode, and HTML-ENTITIES 'text encodings' is
deprecated for all Mbstring functions. Unlike all the other text
encodings supported by Mbstring, these do not encode a sequence of
Unicode codepoints, but rather a sequence of raw bytes. It is not
clear what the correct return values for most Mbstring functions should
be when one of these non-encodings is specified. Further, PHP has
separate, built-in implementations of all of them; for example, UUencoded
data can be handled using convert_uuencode/convert_uudecode.
- SPL:
. The SplFileInfo::_bad_state_ex() internal method has been deprecated.
- Standard:
. utf8_encode() and utf8_decode() have been deprecated.
========================================
2014-05-01 10:27:38 +00:00
5. Changed Functions
========================================
2009-06-23 19:40:31 +00:00
- Core
. str*cmp, str*pos, substr_compare functions, using binary safe string
comparison now return -1, 0 and 1.
- DBA
. dba_open() and dba_popen() now have the following enforced function signature
dba_open(string $path, string $mode, ?string $handler = null, int $permission = 0o644, int $map_size = 0)
. dba_fetch()'s optional skip argument is now at the end in line with
PHP userland semantics its signature now is:
dba_fetch(string|array $key, $dba, int $skip = 0): string|false
The overloaded signature
dba_fetch(string|array $key, $skip, $dba): string|false
is still accepted, but it is recommended to use the new standard variant.
========================================
2014-05-01 10:27:38 +00:00
6. New Functions
========================================
2015-04-24 15:19:58 +00:00
2022-06-08 05:32:32 +00:00
- Curl:
. curl_upkeep() (libcurl >= 7.62.0)
2022-07-06 11:28:54 +00:00
- mysqli:
. mysqli_execute_query()
- Reflection:
. ReflectionFunction::isAnonymous()
. ReflectionMethod::hasPrototype()
- Sodium:
. sodium_crypto_stream_xchacha20_xor_ic()
- Standard:
. The peak memory usage can now be reset to the current usage thanks to
memory_reset_peak_usage().
2022-07-10 13:18:51 +00:00
. ini_parse_quantity(): Parses "shorthand bytes" quantities returned by
ini_get(). The function is suitable for parsing quantities whose int value
is in the range [PHP_INT_MIN, PHP_INT_MAX].
Parsing and interpretation is consistent with ini_set() (see also the
"Changes to INI File Handling" section).
Caveats: Some ini settings may apply additional constraints to the resuling
int value, such as a smaller range, that will not be reflected by
ini_parse_quantity(). The `memory_limit` setting accepts values higher than
PHP_INT_MAX, than can not be parsed by ini_parse_quantity().
========================================
2014-05-01 10:27:38 +00:00
7. New Classes and Interfaces
========================================
========================================
2015-02-10 07:56:18 +00:00
8. Removed Extensions and SAPIs
========================================
========================================
2014-05-01 10:27:38 +00:00
9. Other Changes to Extensions
========================================
2016-07-03 10:43:30 +00:00
- Date:
. DatePeriod properties are now properly declared.
- Intl:
. IntlBreakIterator, IntlRuleBasedBreakIterator, IntlCodePointBreakIterator,
IntlPartsIterator, IntlCalendar, IntlCalendar, Collator, IntlIterator,
UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter,
ResourceBundle, Spoofchecker, IntlTimeZone and Transliterator instances are
no longer serializable. Previously, they could be serialized, but
unserialization yielded unusable objects or failed.
2022-05-30 15:22:48 +00:00
- mysqli:
. The support for libmysql has been removed. It's no longer possible to compile
mysqli with libmysql and all relevant functionality has been removed.
. The reconnect property of mysqli_driver has been removed. It was supported only by libmysql.
. The INI directive mysqli.reconnect has been removed.
- OCI8:
. The minimum Oracle Client library version required is now 11.2.
- PCRE:
. NUL characters (\0) in pattern strings are now supported.
- SQLite3:
. sqlite3.defensive is now PHP_INI_USER.
- Standard:
. getimagesize() now reports the actual image dimensions, bits and channels
of AVIF images. Previously, the dimensions have been reported as 0x0, and
bits and channels have not been reported at all.
- Tidy:
. tidy properties are now properly declared.
. tidyNode properties are now properly declared as readonly.
- Zip:
. extension updated to 1.20.0 with new methods:
ZipArchive::clearError, getStreamName and getStreamIndex
========================================
2014-05-01 10:27:38 +00:00
10. New Global Constants
========================================
2010-03-24 16:23:50 +00:00
- COM_DOTNET:
. LOCALE_NEUTRAL
- Curl:
. CURLALTSVC_H1 (libcurl >= 7.64.1)
. CURLALTSVC_H2 (libcurl >= 7.64.1)
. CURLALTSVC_H3 (libcurl >= 7.64.1)
. CURLALTSVC_READONLYFILE (libcurl >= 7.64.1)
. CURLAUTH_AWS_SIGV4 (libcurl >= 7.75.0)
. CURLE_PROXY (libcurl >= 7.73.0)
. CURLFTPMETHOD_DEFAULT
. CURLHSTS_ENABLE (libcurl >= 7.74.0)
. CURLHSTS_READONLYFILE (libcurl >= 7.74.0)
. CURLINFO_PROXY_ERROR (libcurl >= 7.73.0)
. CURLINFO_REFERER (libcurl >= 7.76.0)
. CURLINFO_RETRY_AFTER (libcurl >= 7.66.0)
. CURLMOPT_MAX_CONCURRENT_STREAMS (libcurl >= 7.67.0)
. CURLOPT_ALTSVC_CTRL (libcurl >= 7.64.1)
. CURLOPT_ALTSVC (libcurl >= 7.64.1)
. CURLOPT_AWS_SIGV4 (libcurl >= 7.75.0)
. CURLOPT_CAINFO_BLOB (libcurl >= 7.77.0)
. CURLOPT_DOH_SSL_VERIFYHOST (libcurl >= 7.76.0)
. CURLOPT_DOH_SSL_VERIFYPEER (libcurl >= 7.76.0)
. CURLOPT_DOH_SSL_VERIFYSTATUS (libcurl >= 7.76.0)
. CURLOPT_HSTS_CTRL (libcurl >= 7.74.0)
. CURLOPT_HSTS (libcurl >= 7.74.0)
. CURLOPT_MAIL_RCPT_ALLLOWFAILS (libcurl >= 7.69.0)
. CURLOPT_MAXAGE_CONN (libcurl >= 7.65.0)
. CURLOPT_MAXFILESIZE_LARGE
. CURLOPT_MAXLIFETIME_CONN (libcurl >= 7.80.0)
. CURLOPT_PROXY_CAINFO_BLOB (libcurl >= 7.77.0)
. CURLOPT_SASL_AUTHZID (libcurl >= 7.66.0)
. CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 (libcurl >= 7.80.0)
. CURLOPT_SSL_EC_CURVES (libcurl >= 7.73.0)
. CURLOPT_UPKEEP_INTERVAL_MS (libcurl >= 7.62.0)
. CURLOPT_UPLOAD_BUFFERSIZE (libcurl >= 7.62.0)
. CURLOPT_XFERINFOFUNCTION (libcurl >= 7.32.0)
. CURLPROTO_MQTT (libcurl >= 7.71.0)
. CURLPX_BAD_ADDRESS_TYPE (libcurl >= 7.73.0)
. CURLPX_BAD_VERSION (libcurl >= 7.73.0)
. CURLPX_CLOSED (libcurl >= 7.73.0)
. CURLPX_GSSAPI (libcurl >= 7.73.0)
. CURLPX_GSSAPI_PERMSG (libcurl >= 7.73.0)
. CURLPX_GSSAPI_PROTECTION (libcurl >= 7.73.0)
. CURLPX_IDENTD_DIFFER (libcurl >= 7.73.0)
. CURLPX_IDENTD (libcurl >= 7.73.0)
. CURLPX_LONG_HOSTNAME (libcurl >= 7.73.0)
. CURLPX_LONG_PASSWD (libcurl >= 7.73.0)
. CURLPX_LONG_USER (libcurl >= 7.73.0)
. CURLPX_NO_AUTH (libcurl >= 7.73.0)
. CURLPX_OK (libcurl >= 7.73.0)
. CURLPX_RECV_ADDRESS (libcurl >= 7.73.0)
. CURLPX_RECV_AUTH (libcurl >= 7.73.0)
. CURLPX_RECV_CONNECT (libcurl >= 7.73.0)
. CURLPX_RECV_REQACK (libcurl >= 7.73.0)
. CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED (libcurl >= 7.73.0)
. CURLPX_REPLY_COMMAND_NOT_SUPPORTED (libcurl >= 7.73.0)
. CURLPX_REPLY_CONNECTION_REFUSED (libcurl >= 7.73.0)
. CURLPX_REPLY_GENERAL_SERVER_FAILURE (libcurl >= 7.73.0)
. CURLPX_REPLY_HOST_UNREACHABLE (libcurl >= 7.73.0)
. CURLPX_REPLY_NETWORK_UNREACHABLE (libcurl >= 7.73.0)
. CURLPX_REPLY_NOT_ALLOWED (libcurl >= 7.73.0)
. CURLPX_REPLY_TTL_EXPIRED (libcurl >= 7.73.0)
. CURLPX_REPLY_UNASSIGNED (libcurl >= 7.73.0)
. CURLPX_REQUEST_FAILED (libcurl >= 7.73.0)
. CURLPX_RESOLVE_HOST (libcurl >= 7.73.0)
. CURLPX_SEND_AUTH (libcurl >= 7.73.0)
. CURLPX_SEND_CONNECT (libcurl >= 7.73.0)
. CURLPX_SEND_REQUEST (libcurl >= 7.73.0)
. CURLPX_UNKNOWN_FAIL (libcurl >= 7.73.0)
. CURLPX_UNKNOWN_MODE (libcurl >= 7.73.0)
. CURLPX_USER_REJECTED (libcurl >= 7.73.0)
. CURLSSLOPT_AUTO_CLIENT_CERT (libcurl >= 7.77.0)
. CURLSSLOPT_NATIVE_CA (libcurl >= 7.71.0)
. CURLSSLOPT_NO_PARTIALCHAIN (libcurl >= 7.68.0)
. CURLSSLOPT_REVOKE_BEST_EFFORT (libcurl >= 7.70.0)
. CURL_VERSION_GSASL (libcurl >= 7.76.0)
. CURL_VERSION_HSTS (libcurl >= 7.74.0)
. CURL_VERSION_HTTP3 (libcurl >= 7.66.0)
. CURL_VERSION_UNICODE (libcurl >= 7.72.0)
. CURL_VERSION_ZSTD (libcurl >= 7.72.0)
- Sockets:
. SO_INCOMING_CPU
. SO_MEMINFO
2022-05-27 12:06:53 +00:00
. SO_RTABLE (OpenBSD)
. TCP_KEEPALIVE (MacOS)
. TCP_KEEPCNT (Linux, others)
. TCP_KEEPIDLE (Linux, others)
. TCP_KEEPINTVL (Linux, others)
. TCP_NOTSENT_LOWAT
. LOCAL_CREDS_PERSISTENT (FreeBSD)
. SCM_CREDS2 (FreeBSD)
. LOCAL_CREDS (NetBSD)
. SO_BPF_EXTENSIONS
. SO_SETFIB
2022-07-03 05:16:53 +00:00
. TCP_CONGESTION (Linux, FreeBSD)
2022-07-10 20:30:08 +00:00
. SO_ZEROCOPY (Linux)
. MSG_ZEROCOPY (Linux)
========================================
2014-05-01 10:27:38 +00:00
11. Changes to INI File Handling
========================================
- Parsing of some ill-formatted values will now trigger a warning when this was
silently ignored before. Interpretation of these values is not changed, for
backwards compatibility. This affects the following settings:
. bcmath.scale
. com.code_page
. default_socket_timeout
. fiber.stack_size
. hard_timeout
. intl.error_level
. ldap.max_links
. max_input_nesting_level
. max_input_vars
. mbstring.regex_retry_limit
. mbstring.regex_stack_limit
. mysqli.allow_local_infile
. mysqli.allow_persistent
. mysqli.default_port
. mysqli.max_links
. mysqli.max_persistent
. mysqli.reconnect
. mysqli.rollback_on_cached_plink
. mysqlnd.log_mask
. mysqlnd.mempool_default_size
. mysqlnd.net_read_buffer_size
. mysqlnd.net_read_timeout
. oci8.default_prefetch
. oci8.max_persistent
. oci8.persistent_timeout
. oci8.ping_interval
. oci8.prefetch_lob_size
. oci8.privileged_connect
. oci8.statement_cache_size
. odbc.allow_persistent
. odbc.check_persistent
. odbc.defaultbinmode
. odbc.default_cursortype
. odbc.defaultlrl
. odbc.max_links
. odbc.max_persistent
. opcache.consistency_checks
. opcache.file_update_protection
. opcache.force_restart_timeout
. opcache.interned_strings_buffer
. opcache.jit_bisect_limit
. opcache.jit_blacklist_root_trace
. opcache.jit_blacklist_side_trace
. opcache.jit_debug
. opcache.jit_hot_func
. opcache.jit_hot_loop
. opcache.jit_hot_return
. opcache.jit_hot_side_exit
. opcache.jit_max_exit_counters
. opcache.jit_max_loop_unrolls
. opcache.jit_max_polymorphic_calls
. opcache.jit_max_recursive_calls
. opcache.jit_max_recursive_returns
. opcache.jit_max_root_traces
. opcache.jit_max_side_traces
. opcache.log_verbosity_level
. opcache.max_file_size
. opcache.opt_debug_level
. opcache.optimization_level
. opcache.revalidate_freq
. output_buffering
. pcre.backtrack_limit
. pcre.recursion_limit
. pgsql.max_links
. pgsql.max_persistent
. post_max_size
. realpath_cache_size
. realpath_cache_ttl
. session.cache_expire
. session.cookie_lifetime
. session.gc_divisor
. session.gc_maxlifetime
. session.gc_probability
. soap.wsdl_cache_limit
. soap.wsdl_cache_ttl
. unserialize_max_depth
. upload_max_filesize
. user_ini.cache_ttl
. xmlrpc_error_number
. zend.assertions
. zlib.output_compression_level
2014-08-22 11:35:07 +00:00
========================================
12. Windows Support
========================================
- Core:
. Windows specific error messages are no longer localized, but instead in
English to better match PHP error messages.
- OCI8:
. Since building against Oracle Client 10g is no longer supported anyway,
the configuration option --with-oci8 has been dropped. --with-oci8-11g,
--with-oci8-12c and --with-oci8-19 are still supported.
- Zip:
2022-06-28 13:19:56 +00:00
. The Zip extension upgraded to version 1.21.0
. The Zip extension is now built as shared library (DLL) by default.
========================================
13. Other Changes
========================================
- Core:
. The iterable type is now a built-in compile time alias for array|Traversable.
Error messages relating to iterable will therefore now use array|Traversable.
Type Reflection is preserved for single iterable (and ?iterable) to produce
a ReflectionNamedType with name iterable, however usage of iterable in
union types will be converted to array|Traversable
========================================
14. Performance Improvements
========================================