forked from php/php-src
-
Notifications
You must be signed in to change notification settings - Fork 0
/
UPGRADING
525 lines (460 loc) · 19.3 KB
/
UPGRADING
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
PHP 8.2 UPGRADE NOTES
1. Backward Incompatible Changes
2. New Features
3. Changes in SAPI modules
4. Deprecated Functionality
5. Changed Functions
6. New Functions
7. New Classes and Interfaces
8. Removed Extensions and SAPIs
9. Other Changes to Extensions
10. New Global Constants
11. Changes to INI File Handling
12. Windows Support
13. Other Changes
14. Performance Improvements
========================================
1. Backward Incompatible Changes
========================================
- 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() returns an empty array for an empty string now. Previously it
returned an array with a single empty string entry. mb_str_split() is not
affected by this change since it was already behaving like that.
- SPL:
. The following methods now enforce their signature:
* SplFileInfo::_bad_state_ex()
* SplFileObject::getCsvControl()
* SplFileObject::fflush()
* SplFileObject::ftell()
* SplFileObject::fgetc()
* SplFileObject::fpassthru()
. 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
. GlogIterator returns empty array if all paths are restricted by
open_basedir. Previously the error was returned but that behavior was not
consistent and did not work correctly.
========================================
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
. 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
. Added support for Disjoint Normal Form (DNF) types.
RFC: https://wiki.php.net/rfc/dnf_types
. Added error_log_mode ini setting that allows setting of permissions for
error log file.
. Added support for fetching properties of enums in constant expressions.
RFC: https://wiki.php.net/rfc/fetch_property_in_const_expressions
- 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.
. Added new function curl_upkeep() to perform any connection upkeep checks.
- DBA:
. The LMDB Driver now accepts the DBA_LMDB_USE_SUB_DIR or DBA_LMDB_NO_SUB_DIR
flags to determine if it should create a sub directory or not when creating
a database file.
- OCI8:
. 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.
- 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.
- Random:
. New extension that organizes and consolidates existing implementations
related to random number generators. New, higher quality RNGs are available
and scope issues are eliminated.
RFC: https://wiki.php.net/rfc/rng_extension
RFC: https://wiki.php.net/rfc/random_extension_improvement
========================================
3. Changes in SAPI modules
========================================
========================================
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"].
RFC: https://wiki.php.net/rfc/deprecate_partially_supported_callables
RFC: https://wiki.php.net/rfc/partially-supported-callables-expand-deprecation-notices
. 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.
========================================
5. Changed Functions
========================================
- 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, ?int $flags = null)
. 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.
- SPL
. The $iterator parameter of iterator_to_array() and iterator_count() is
widened to iterable from Iterator, allowing arrays to be passed.
RFC: https://wiki.php.net/rfc/iterator_xyz_accept_array
========================================
6. New Functions
========================================
- Curl:
. curl_upkeep() (libcurl >= 7.62.0)
- 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().
. 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().
========================================
7. New Classes and Interfaces
========================================
========================================
8. Removed Extensions and SAPIs
========================================
========================================
9. Other Changes to Extensions
========================================
- 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.
- 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.
. The constant MYSQLI_IS_MARIADB has been deprecated.
- 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
========================================
10. New Global Constants
========================================
- COM_DOTNET:
. DISP_E_PARAMNOTFOUND
. 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)
- Filter
. FILTER_FLAG_GLOBAL_RANGE
- Sockets:
. SO_INCOMING_CPU
. SO_MEMINFO
. 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
. TCP_CONGESTION (Linux, FreeBSD)
. SO_ZEROCOPY (Linux)
. MSG_ZEROCOPY (Linux)
========================================
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
========================================
12. Windows Support
========================================
- Core:
. Windows specific error messages are no longer localized, but instead in
English to better match PHP error messages.
. Preliminary and highly experimental support for building on ARM64 has been
added.
- 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:
. The Zip extension upgraded to version 1.21.0
. The Zip extension is now built as shared library (DLL) by default.
========================================
13. Other Changes
========================================
- CLI:
. The STDOUT, STDERR and STDIN are no longer closed on resource destruction
which is mostly when the CLI finishes. It is however still possible to
explicitly close those streams using fclose and similar.
- 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
========================================