1PHP 7.3 UPGRADE NOTES 2 31. Backward Incompatible Changes 42. New Features 53. Changes in SAPI modules 64. Deprecated Functionality 75. Changed Functions 86. New Functions 97. New Classes and Interfaces 108. Removed Extensions and SAPIs 119. Other Changes to Extensions 1210. New Global Constants 1311. Changes to INI File Handling 1412. Windows Support 1513. Other Changes 16 17 18======================================== 191. Backward Incompatible Changes 20======================================== 21 22Core: 23 . The ext_skel utility has been completely redesigned with new options and 24 some old options removed. This is now written in PHP and has no external 25 dependencies. 26 . Support for BeOS has been dropped. 27 . Exceptions thrown due to automatic conversion of warnings into exceptions 28 in EH_THROW mode (e.g. some DateTime exceptions) no longer populate 29 error_get_last() state. As such, they now work the same way as manually 30 thrown exceptions. 31 . TypeError now reports wrong types as `int` and `bool` instead of `integer` 32 and `boolean`. 33 . Due to the introduction of flexible heredoc/nowdoc syntax (see New Features 34 section), doc strings that contain the ending label inside their body may 35 cause syntax errors or change in interpretation. For example in 36 37 $str = <<<FOO 38 abcdefg 39 FOO 40 FOO; 41 42 the indented occurrence of "FOO" did not previously have any special 43 meaning. Now it will be interpreted as the end of the heredoc string and 44 the following "FOO;" will cause a syntax error. This issue can always be 45 resolved by choosing an ending label that does not occur within the contents 46 of the string. 47 . "continue" statements targeting "switch" control flow structures will now 48 generate a warning. In PHP such "continue" statements are equivalent to 49 "break", while they behave as "continue 2" in other languages. 50 51 while ($foo) { 52 switch ($bar) { 53 case "baz": 54 continue; 55 // Warning: "continue" targeting switch is equivalent to 56 // "break". Did you mean to use "continue 2"? 57 } 58 } 59 60 . Array accesses of type $obj["123"], where $obj implements ArrayAccess and 61 "123" is an integer string literal will no longer result in an implicit 62 conversion to integer, i.e., $obj->offsetGet("123") will be called instead 63 of $obj->offsetGet(123). This matches existing behavior for non-literals. 64 The behavior of arrays is not affected in any way, they continue to 65 implicitly convert integeral string keys to integers. 66 . In PHP, static properties are shared between inheriting classes, unless the 67 static property is explicitly overridden in a child class. However, due to 68 an implementation artifact it was possible to separate the static properties 69 by assigning a reference. This loophole has been fixed. 70 71 class Test { 72 public static $x = 0; 73 } 74 class Test2 extends Test { } 75 76 Test2::$x = &$x; 77 $x = 1; 78 79 var_dump(Test::$x, Test2::$x); 80 // Previously: int(0), int(1) 81 // Now: int(1), int(1) 82 83 . References returned by array and property accesses are now unwrapped as 84 part of the access. This means that it is no longer possible to modify the 85 reference between the access and the use of the accessed value: 86 87 $arr = [1]; 88 $ref =& $arr[0]; 89 var_dump($arr[0] + ($arr[0] = 2)); 90 // Previously: int(4), Now: int(3) 91 92 This makes the behavior of references and non-references consistent. Please 93 note that reading and writing a value inside a single expression remains 94 undefined behavior and may change again in the future. 95 96 . Argument unpacking stopped working with Traversables with non-integer keys. 97 The following code worked in PHP 7.0-7.2 by accident. 98 99 function foo(...$args) { 100 var_dump($args); 101 } 102 function gen() { 103 yield 1.23 => 123; 104 } 105 foo(...gen()); 106 107 Now it generates an exception. 108 109BCMath: 110 . All warnings thrown by BCMath functions are now using PHP's error handling. 111 Formerly some warnings have directly been written to stderr. 112 . bcmul() and bcpow() now return numbers with the requested scale. Formerly, 113 the returned numbers may have omitted trailing decimal zeroes. 114 115DOM: 116 . As of PHP 7.3.16, the value of the $childNodes property of DOMDocument, 117 DOMNode, DOMProcessingInstruction, DOMComment, DOMText, DOMCdataSection and 118 DOMNotation is now an empty DOMNodeList instead of NULL, according to the 119 W3C and WHATWG standards and the PHP manual. 120 121IMAP: 122 rsh/ssh logins are disabled by default. Use imap.enable_insecure_rsh if you want 123 to enable them. Note that the IMAP library does not filter mailbox names before 124 passing them to rsh/ssh command, thus passing untrusted data to this function 125 with rsh/ssh enabled is insecure. 126 127MBString: 128 . Due to added support for named captures, mb_ereg_*() patterns using named 129 captures will behave differently. In particular named captures will be part 130 of matches and mb_ereg_replace() will interpret additional syntax. See 131 "New Features" section for more information. 132 133mysqli: 134 . Prepared statements now properly report the fractional seconds for DATETIME/ 135 TIME/TIMESTAMP columns with decimals specifier (e.g. TIMESTAMP(6) when using 136 microseconds). Formerly, the fractional seconds part was simply omitted from 137 the returned values. 138 139PDO/MySQL: 140 . Prepared statements now properly report the fractional seconds for DATETIME/ 141 TIME/TIMESTAMP columns with decimals specifier (e.g. TIMESTAMP(6) when using 142 microseconds). Formerly, the fractional seconds part was simply omitted from 143 the returned values. 144 Please note that this only affects the usage of PDO_MYSQL with emulated 145 prepares turned off (e.g. using the native preparation functionality). 146 Statements using connections having PDO::ATTR_EMULATE_PREPARES=true (which 147 is the default) were not affected by the bug fixed and have already been 148 getting the proper fractional seconds values from the engine. 149 150Reflection: 151 . Reflection export to string now uses `int` and `bool` instead of `integer` 152 and `boolean`. 153 154- SAPI: 155 . Starting with 7.3.23, incoming cookie names are not url-decoded. This was never 156 required by the standard, outgoing cookie names aren't encoded and this leads 157 to security issues (CVE-2020-7070). 158 159SPL: 160 . If an SPL autoloader throws an exception, following autoloaders will not be 161 executed. Previously all autoloaders were executed and exceptions were 162 chained. 163 164SimpleXML: 165 . Mathematic operations involving SimpleXML objects will now treat the text as 166 an integer or float, whichever is more appropriate. Previously values were 167 treated as integers unconditionally. 168 169Standard: 170 . Undefined variables passed to compact() will now be reported as a notice. 171 . getimagesize() and related functions now report the mime type of BMP images 172 as image/bmp instead of image/x-ms-bmp, since the former has been registered 173 with the IANA (see RFC 7903). 174 . stream_socket_get_name() will now return IPv6 addresses wrapped in brackets. 175 For example "[::1]:1337" will be returned instead of "::1:1337". 176 177======================================== 1782. New Features 179======================================== 180 181Core: 182 . Implemented flexible heredoc and nowdoc syntax: The closing marker for doc 183 strings is no longer required to be followed by a semicolon or newline. 184 Additionally the closing marker may be indented, in which case the 185 indentation will be stripped from all lines in the doc string. 186 (RFC: https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes) 187 . Array destructuring now supports reference assignments using the syntax 188 [&$a, [$b, &$c]] = $d. The same is also supported for list(). 189 (RFC: https://wiki.php.net/rfc/list_reference_assignment) 190 . instanceof now allows literals as the first operand, 191 in which case the result is always FALSE. 192 . A new CompileError exception has been added, from which ParseError inherits. 193 A small number of compilation errors will now throw a CompileError instead 194 of generating a fatal error. Currently this only affects compilation errors 195 that may be thrown by token_get_all() in TOKEN_PARSE mode, but more errors 196 may be converted in the future. 197 . Trailing commas in function and method calls are now allowed. 198 (RFC: https://wiki.php.net/rfc/trailing-comma-function-calls) 199 200BCMath: 201 . bcscale() can now also be used as getter to retrieve the current scale in use. 202 203MBString: 204 . Support for full case-mapping and case-folding has been added. Unlike simple 205 case-mapping, full case-mapping may change the length of the string. For 206 example: 207 208 mb_strtoupper("Straße") 209 // Produces STRAßE on PHP 7.2 210 // Produces STRASSE on PHP 7.3 211 212 The different casing mapping and folding modes are available through 213 mb_convert_case(): 214 215 . MB_CASE_LOWER (used by mb_strtolower) 216 . MB_CASE_UPPER (used by mb_strtoupper) 217 . MB_CASE_TITLE 218 . MB_CASE_FOLD 219 . MB_CASE_LOWER_SIMPLE 220 . MB_CASE_UPPER_SIMPLE 221 . MB_CASE_TITLE_SIMPLE 222 . MB_CASE_FOLD_SIMPLE (used by case-insensitive operations) 223 224 Only unconditional, language agnostic full case-mapping is performed. 225 . Case-insensitive string operations now use case-folding instead of case- 226 mapping during comparisons. This means that more characters will be 227 considered (case insensitively) equal now. 228 . mb_convert_case() with MB_CASE_TITLE now performs title-case conversion 229 based on the Cased and CaseIgnorable derived Unicode properties. In 230 particular this also improves handling of quotes and apostophes. 231 . Data tables have been updated for Unicode 11. 232 . Mbstring now correctly supports strings larger than 2GB. 233 . Performance of the mbstring extension has been significantly improved 234 across the board. The largest improvements are in case conversion functions. 235 . mb_ereg_*() functions now support named captures. Matching functions like 236 mb_ereg() will now return named captures both using their group number and 237 their name, similar to PCRE: 238 239 mb_ereg('(?<word>\w+)', '国', $matches); 240 // => [0 => "国", 1 => "国", "word" => "国"]; 241 242 Additionally, mb_ereg_replace() now supports the \k<> and \k'' notations 243 to reference named captures in the replacement string: 244 245 mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo '); 246 // => "_foo_foo_" 247 248 \k<> and \k'' can also be used for numbered references, which also works 249 with group numbers greater than 9. 250 251readline: 252 . Support for the completion_append_character and completion_suppress_append 253 options has been added to readline_info(). These options are only available 254 if PHP is linked against libreadline (rather than libedit). 255 256Standard: 257 . The --with-password-argon2[=dir] configure argument now provides support for 258 both Argon2i and Argon2id hashes in the password_hash(), password_verify(), 259 password_get_info(), and password_needs_rehash() functions. Passwords may be 260 hashed and verified using the PASSWORD_ARGON2ID constant. 261 Support for both Argon2i and Argon2id in the password_* functions now requires 262 PHP be linked against libargon2 reference library >= 20161029. 263 (RFC: https://wiki.php.net/rfc/argon2_password_hash_enhancements). 264 265LDAP: 266 . Full support for LDAP Controls has been added to LDAP querying functions 267 and ldap_parse_result 268 269======================================== 2703. Changes in SAPI modules 271======================================== 272 273phpdbg: 274 . The unused constants PHPDBG_FILE, PHPDBG_METHOD, PHPDBG_LINENO and 275 PHPDBG_FUNC have been removed. 276 277FPM: 278 . A new global option log_limit has been added. It can be used for setting 279 log limit for logged line which allows to log messages longer than 1024 280 characters without wrapping. It also fixes various wrapping issues. 281 . A new global option log_buffering has been added. It allows an experimental 282 logging without extra buffering. 283 . A new pool option decorate_workers_output has been added. It allows 284 disabling output decoration for workers output when catch_workers_output 285 enabled. 286 . The getallheaders() function is now also available. 287 . In PHP 7.3.11 a new pool option 288 request_terminate_timeout_track_finished has been added. When enabled, 289 request_terminate_timeout will also apply after fastcgi_finish_request() 290 has been called, as well as during execution of shutdown functions. 291 292======================================== 2934. Deprecated Functionality 294======================================== 295 296Core: 297 . The declaration of case-insensitive constants has been deprecated. Passing 298 true as the third argument to define() will now generate a deprecation 299 warning. The use of case-insensitive constants with a case that differs from 300 the declaration is also deprecated. 301 (RFC: https://wiki.php.net/rfc/case_insensitive_constant_deprecation) 302 . Declaring a function called assert() inside a namespace is deprecated. 303 The assert() function is subject to special handling by the engine, which 304 may lead to inconsistent behavior when defining a namespaced function with 305 the same name. 306 307Filter: 308 . The explicit usage of the constants FILTER_FLAG_SCHEME_REQUIRED and 309 FILTER_FLAG_HOST_REQUIRED is now deprecated; both are implied for 310 FILTER_VALIDATE_URL anyway. 311 312GD: 313 . image2wbmp() has been deprecated. 314 315Intl: 316 . Usage of the Normalizer::NONE form throws a deprecation warning, if PHP is 317 linked with ICU >= 56. 318 319Mbstring: 320 . The following undocumented mbereg_*() aliases have been deprecated. Use the 321 corresponding mb_ereg_*() variants instead. 322 . mbregex_encoding() 323 . mbereg() 324 . mberegi() 325 . mbereg_replace() 326 . mberegi_replace() 327 . mbsplit() 328 . mbereg_match() 329 . mbereg_search() 330 . mbereg_search_pos() 331 . mbereg_search_regs() 332 . mbereg_search_init() 333 . mbereg_search_getregs() 334 . mbereg_search_getpos() 335 . mbereg_search_setpos() 336 337PDO ODBC: 338 . The pdo_odbc.db2_instance_name ini setting has been formally deprecated. It 339 has already been deprecated in the documentation since PHP 5.1.1. 340 341Standard: 342 . Passing a non-string needle to string search functions is deprecated. In the 343 future the needle will be interpreted as a string instead of an ASCII codepoint. 344 Depending on the intended behavior, you should either explicitly cast the 345 needle to string or perform an explicit call to chr(). The following functions 346 are affected: 347 . strpos() 348 . strrpos() 349 . stripos() 350 . strripos() 351 . strstr() 352 . strchr() 353 . strrchr() 354 . stristr() 355 . The fgetss() function and the string.strip_tags stream filter have been deprecated. 356 This also affects the SplFileObject::fgetss() method and gzgetss() function. 357 358======================================== 3595. Changed Functions 360======================================== 361 362JSON: 363 . A new flag has been added, JSON_THROW_ON_ERROR, which can be used with 364 json_decode() or json_encode() and causes these functions to throw a 365 JsonException upon an error, instead of setting the global error state that 366 is retrieved with json_last_error(). JSON_PARTIAL_OUTPUT_ON_ERROR takes 367 precedence over JSON_THROW_ON_ERROR. 368 (RFC: https://wiki.php.net/rfc/json_throw_on_error) 369 370Session: 371 . session_set_cookie_params() now also supports the following signature: 372 session_set_cookie_params(array $options) 373 where $options is an associative array which may have any of the keys 374 "lifetime", "path", "domain", "secure", "httponly" and "samesite". 375 Accordingly, the return value of session_get_cookie_params() now also has an 376 element with the key "samesite". 377 378Standard: 379 . debug_zval_dump() was changed to display recursive arrays and objects 380 in the same way as var_dump(). Now, it doesn't display them twice. 381 . array_push() and array_unshift() can now also be called with a single 382 argument, which is particularly convenient wrt. the spread operator. 383 . setcookie() and setrawcookie() now also support the following signature: 384 set(raw)cookie(string $name, [string $value, [array $options]]) 385 where $options is an associative array which may have any of the keys 386 "expires", "path", "domain", "secure", "httponly" and "samesite". 387 388PCRE: 389 . preg_quote() now also escapes the '#' character. 390 391LDAP: 392 . Added a serverctrls parameter to send controls to the server in ldap_add, 393 ldap_mod_replace, ldap_mod_add, ldap_mod_del, ldap_rename, 394 ldap_compare, ldap_delete, ldap_modify_batch, 395 ldap_search, ldap_list, ldap_read 396 . Added an out parameter to get controls from the server in ldap_parse_result 397 . Fixed support for LDAP_OPT_SERVER_CONTROLS and LDAP_OPT_CLIENT_CONTROLS in 398 ldap_get_option and ldap_set_option. 399 400 401======================================== 4026. New Functions 403======================================== 404 405Core: 406 . Added monotonic timer function hrtime([bool get_as_num]). It returns an 407 array of the form [seconds, nanoseconds] with the timestamp starting at 408 an unspecified point in the past. If the optional argument is passed as 409 true, the return value is an integer on 64-bit systems or float on 410 32-bit systems, representing the nanoseconds. The timestamp is not 411 adjustable and is not related to wall clock or time of day. The timers 412 are available under Linux, FreeBSD, Windows, Mac, SunOS, AIX and their 413 derivatives. If no required timers are provided by a corresponding 414 platform, the function returns false. 415 . Added net_get_interfaces() to retrieve an array of available network 416 interfaces including several details. 417 . Added the gc_status() function to retrieve status information regarding the 418 cyclic GC. 419 420Date: 421 . Added the DateTime::createFromImmutable() method, which mirrors 422 DateTimeImmutable::createFromMutable(). 423 424FPM: 425 . Added fpm_get_status() function which returns FPM status info array. 426 427GMP: 428 . Added gmp_binomial(n, k) for calculating binomial coefficients. 429 . Added gmp_lcm(a, b) for calculating the least common multiple. 430 . Added gmp_perfect_power(a) to check if number is a perfect power. 431 . Added gmp_kronecker(a, b) to compute the Kronecker symbol. 432 433Intl: 434 . Added void Spoofchecker::setRestrictionLevel(int $level) method, available 435 when linked with ICU >= 58.1. Levels are represented as class constants 436 - Spoofchecker::ASCII 437 - Spoofchecker::HIGHLY_RESTRICTIVE 438 - Spoofchecker::MODERATELY_RESTRICTIVE 439 - Spoofchecker::MINIMALLY_RESTRICTIVE 440 - Spoofchecker::UNRESTRICTIVE 441 - Spoofchecker::SINGLE_SCRIPT_RESTRICTIVE 442 For the detailed documentation on the restriction levels, see 443 URestrictionLevel under 444 http://icu-project.org/apiref/icu4c/uspoof_8h.html 445 . Added Normalizer::getRawDecomposition() and normalizer_get_raw_decomposition(), 446 to retrieve the Decomposition_Mapping property of a character. 447 448LDAP: 449 . Added ldap_exop_refresh() to conveniently perform a Refresh extended 450 operation. 451 452OpenSSL: 453 . Added openssl_pkey_derive that derives a shared secret for DH, ECDH and 454 possibly other future algorithms supported by EVP_PKEY_derive. 455 456Sockets: 457 . Added functions to import/export the WSAPROTOCOL_INFO info struct. This 458 implementation complements the already supported SCM_RIGHTS as in 459 man 3 cmsg and is Windows specific. For the import/export, the default 460 system securities apply for the SHM reading/writing. The socket becomes 461 invalid, when the last reference to it is closed. 462 - socket_wsaprotocol_info_export(resource $sock, int $pid) - exports the 463 WSAPROTOCOL_INFO structure into shared memory and returns an identifier 464 to be used for the import, or false on failure. The exported ID is 465 only valid for the dedicated PID. 466 - socket_wsaprotocol_info_import(string $id) - returns a duplicated 467 socket as per the passed identifier, or false on failure. 468 - socket_wsaprotocol_info_release(string $id) - releases the shared memory 469 corresponding to the passed identifier. 470 471Standard: 472 . Added is_countable() function, to check whether a value may be passed to 473 count(). 474 (RFC: https://wiki.php.net/rfc/is-countable) 475 . Added array_key_first() and array_key_last() which retrieve the first and 476 last key of an array, respectively. 477 (RFC: <https://wiki.php.net/rfc/array_key_first_last>) 478 479LDAP: 480 . Added functions ldap_add_ext, ldap_bind_ext, ldap_delete_ext, ldap_mod_add_ext, 481 ldap_mod_replace_ext, ldap_mod_del_ext, ldap_rename_ext 482 which gives access to the result object to be able to parse it 483 with ldap_parse_result and get more information than just success/failure. 484 485 486======================================== 4877. New Classes and Interfaces 488======================================== 489 490JSON: 491 . JsonException 492 493======================================== 4948. Removed Extensions and SAPIs 495======================================== 496 497======================================== 4989. Other Changes to Extensions 499======================================== 500 501 Curl: 502 . libcurl >= 7.15.5 is now required. 503 504 DBA: 505 . As of PHP 7.3.14, dba_open() accepts a fifth optional parameter for lmdb 506 databases which allows to specify the mapsize. The parameter defaults to 507 zero, in which case the compiled in default mapsize (usually 1048576) will 508 be used. The mapsize should be a multiple of the page size of the OS. 509 510 Filter: 511 . FILTER_VALIDATE_FLOAT now also supports a `thousand` option, which 512 defines the set of allowed thousand separator chars. The default (`"',."`) 513 is fully backward compatible with former PHP versions. 514 . FILTER_SANITIZE_ADD_SLASHES has been added as an alias of the 'magic_quotes' 515 filter (FILTER_SANITIZE_MAGIC_QUOTES). The 'magic_quotes' filter is subject 516 to removal in future versions of PHP. 517 518 FTP: 519 . Set default transfer mode to binary 520 521 Intl: 522 . Normalizer::NONE is deprecated, when PHP is linked with ICU >= 56 523 . Introduced Normalizer::FORM_KC_CF as Normalizer::normalize() argument 524 for NFKC_Casefold normalization, available when linked with ICU >= 56 525 526 MBString: 527 . The configuration option --with-libmbfl is no longer available. 528 529 ODBC: 530 . Support for ODBCRouter has been removed. 531 . Support for Birdstep has been removed. 532 533 OpenSSL: 534 . The min_proto_version and max_proto_version ssl stream options as well as 535 related constants for possible TLS protocol values have been added. 536 See <https://github.com/php/php-src/pull/3317>. 537 538 PCRE: 539 . The PCRE extension has been upgraded to PCRE2, which may cause minor 540 behavioral changes (for instance, character ranges in classes are now more 541 strictly interpreted), and augments the existing regular expression syntax. 542 See <https://wiki.php.net/rfc/pcre2-migration> for details. 543 544 PDO_DBLIB: 545 . Added the attribute PDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS to enable automatic 546 skipping of empty rowsets. 547 . Exposed the TDS version via the PDO::DBLIB_ATTR_TDS_VERSION attribute. 548 . DATETIME2 columns are now treated like DATETIME columns. 549 550 PDO_SQLite: 551 . SQLite3 databases can now be opened in read-only mode by setting the 552 new PDO::SQLITE_ATTR_OPEN_FLAGS attribute to PDO::SQLITE_READONLY. 553 554 Standard: 555 . var_export() now exports stdClass objects as an array casted to an object 556 (`(object) array( ... )`), rather than using the nonexistent method 557 stdClass::__setState(). 558 559 Tidy: 560 . Building against tidyp (<https://github.com/petdance/tidyp>) is now also 561 supported transparently. Since tidyp offers no API to get the release date, 562 tidy_get_release() and tidy::getRelease() return 'unknown' in this case. 563 564 XML: 565 . The return value of the `xml_set_external_entity_ref_handler()` callback is 566 now also heeded if the extension has been built against libxml. Formerly, 567 the return value has been ignored, and parsing did never stop. 568 569 Zip: 570 . Building against the bundled libzip is discouraged, but still possible by 571 adding `--without-libzip` to the configuration. 572 573 zlib: 574 . Added the zlib/level context option for the compress.zlib wrapper to 575 facilitate setting the desired compression level. 576 577======================================== 57810. New Global Constants 579======================================== 580 581Curl: 582 . CURLAUTH_BEARER 583 . CURLAUTH_GSSAPI 584 . CURLE_WEIRD_SERVER_REPLY 585 . CURLINFO_APPCONNECT_TIME_T 586 . CURLINFO_CONNECT_TIME_T 587 . CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 588 . CURLINFO_CONTENT_LENGTH_UPLOAD_T 589 . CURLINFO_FILETIME_T 590 . CURLINFO_HTTP_VERSION 591 . CURLINFO_NAMELOOKUP_TIME_T 592 . CURLINFO_PRETRANSFER_TIME_T 593 . CURLINFO_PROTOCOL 594 . CURLINFO_PROXY_SSL_VERIFYRESULT 595 . CURLINFO_REDIRECT_TIME_T 596 . CURLINFO_SCHEME 597 . CURLINFO_SIZE_DOWNLOAD_T 598 . CURLINFO_SIZE_UPLOAD_T 599 . CURLINFO_SPEED_DOWNLOAD_T 600 . CURLINFO_SPEED_UPLOAD_T 601 . CURLINFO_STARTTRANSFER_TIME_T 602 . CURLINFO_TOTAL_TIME_T 603 . CURL_LOCK_DATA_CONNECT 604 . CURL_LOCK_DATA_PSL 605 . CURL_MAX_READ_SIZE 606 . CURLOPT_ABSTRACT_UNIX_SOCKET 607 . CURLOPT_DISALLOW_USERNAME_IN_URL 608 . CURLOPT_DNS_SHUFFLE_ADDRESSES 609 . CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 610 . CURLOPT_HAPROXYPROTOCOL 611 . CURLOPT_KEEP_SENDING_ON_ERROR 612 . CURLOPT_PRE_PROXY 613 . CURLOPT_PROXY_CAINFO 614 . CURLOPT_PROXY_CAPATH 615 . CURLOPT_PROXY_CRLFILE 616 . CURLOPT_PROXY_KEYPASSWD 617 . CURLOPT_PROXY_PINNEDPUBLICKEY 618 . CURLOPT_PROXY_SSLCERT 619 . CURLOPT_PROXY_SSLCERTTYPE 620 . CURLOPT_PROXY_SSL_CIPHER_LIST 621 . CURLOPT_PROXY_SSLKEY 622 . CURLOPT_PROXY_SSLKEYTYPE 623 . CURLOPT_PROXY_SSL_OPTIONS 624 . CURLOPT_PROXY_SSL_VERIFYHOST 625 . CURLOPT_PROXY_SSL_VERIFYPEER 626 . CURLOPT_PROXY_SSLVERSION 627 . CURLOPT_PROXY_TLS13_CIPHERS 628 . CURLOPT_PROXY_TLSAUTH_PASSWORD 629 . CURLOPT_PROXY_TLSAUTH_TYPE 630 . CURLOPT_PROXY_TLSAUTH_USERNAME 631 . CURLOPT_REQUEST_TARGET 632 . CURLOPT_SOCKS5_AUTH 633 . CURLOPT_SSH_COMPRESSION 634 . CURLOPT_SUPPRESS_CONNECT_HEADERS 635 . CURLOPT_TIMEVALUE_LARGE 636 . CURLOPT_TLS13_CIPHERS 637 . CURLPROXY_HTTPS 638 . CURLSSH_AUTH_GSSAPI 639 . CURL_SSLVERSION_MAX_DEFAULT 640 . CURL_SSLVERSION_MAX_NONE 641 . CURL_SSLVERSION_MAX_TLSv1_0 642 . CURL_SSLVERSION_MAX_TLSv1_1 643 . CURL_SSLVERSION_MAX_TLSv1_2 644 . CURL_SSLVERSION_MAX_TLSv1_3 645 . CURL_SSLVERSION_TLSv1_3 646 . CURL_VERSION_ALTSVC 647 . CURL_VERSION_ASYNCHDNS 648 . CURL_VERSION_BROTLI 649 . CURL_VERSION_CONV 650 . CURL_VERSION_CURLDEBUG 651 . CURL_VERSION_DEBUG 652 . CURL_VERSION_GSSAPI 653 . CURL_VERSION_GSSNEGOTIATE 654 . CURL_VERSION_HTTPS_PROXY 655 . CURL_VERSION_IDN 656 . CURL_VERSION_LARGEFILE 657 . CURL_VERSION_MULTI_SSL 658 . CURL_VERSION_NTLM 659 . CURL_VERSION_NTLM_WB 660 . CURL_VERSION_PSL 661 . CURL_VERSION_SPNEGO 662 . CURL_VERSION_SSPI 663 . CURL_VERSION_TLSAUTH_SRP 664 665Filter: 666 . FILTER_SANITIZE_ADD_SLASHES 667 668JSON: 669 . JSON_THROW_ON_ERROR 670 671OpenSSL: 672 . STREAM_CRYPTO_PROTO_SSLv3 673 . STREAM_CRYPTO_PROTO_TLSv1_0 674 . STREAM_CRYPTO_PROTO_TLSv1_1 675 . STREAM_CRYPTO_PROTO_TLSv1_2 676 677MBString: 678 . MB_CASE_FOLD 679 . MB_CASE_LOWER_SIMPLE 680 . MB_CASE_UPPER_SIMPLE 681 . MB_CASE_TITLE_SIMPLE 682 . MB_CASE_FOLD_SIMPLE 683 684PGSQL: 685 . Requires Postgres 9.3 686 - PGSQL_DIAG_SCHEMA_NAME 687 - PGSQL_DIAG_TABLE_NAME 688 - PGSQL_DIAG_COLUMN_NAME 689 - PGSQL_DIAG_DATATYPE_NAME 690 - PGSQL_DIAG_CONSTRAINT_NAME 691 . Requires Postgres 9.6 692 - PGSQL_DIAG_SEVERITY_NONLOCALIZED 693 694Standard: 695 . PASSWORD_ARGON2ID 696 697LDAP: 698 . LDAP_CONTROL_MANAGEDSAIT 699 . LDAP_CONTROL_PROXY_AUTHZ 700 . LDAP_CONTROL_SUBENTRIES 701 . LDAP_CONTROL_VALUESRETURNFILTER 702 . LDAP_CONTROL_ASSERT 703 . LDAP_CONTROL_PRE_READ 704 . LDAP_CONTROL_POST_READ 705 . LDAP_CONTROL_SORTREQUEST 706 . LDAP_CONTROL_SORTRESPONSE 707 . LDAP_CONTROL_PAGEDRESULTS 708 . LDAP_CONTROL_AUTHZID_REQUEST 709 . LDAP_CONTROL_AUTHZID_RESPONSE 710 . LDAP_CONTROL_SYNC 711 . LDAP_CONTROL_SYNC_STATE 712 . LDAP_CONTROL_SYNC_DONE 713 . LDAP_CONTROL_DONTUSECOPY 714 . LDAP_CONTROL_PASSWORDPOLICYREQUEST 715 . LDAP_CONTROL_PASSWORDPOLICYRESPONSE 716 . LDAP_CONTROL_X_INCREMENTAL_VALUES 717 . LDAP_CONTROL_X_DOMAIN_SCOPE 718 . LDAP_CONTROL_X_PERMISSIVE_MODIFY 719 . LDAP_CONTROL_X_SEARCH_OPTIONS 720 . LDAP_CONTROL_X_TREE_DELETE 721 . LDAP_CONTROL_X_EXTENDED_DN 722 . LDAP_CONTROL_VLVREQUEST 723 . LDAP_CONTROL_VLVRESPONSE 724 725======================================== 72611. Changes to INI File Handling 727======================================== 728 729- birdstep.max_links 730 . This INI directive has been removed. 731 732- opcache.inherited_hack 733 . This INI directive has been removed. The value has already been ignored 734 since PHP 5.3.0. 735 736- session.cookie_samesite 737 . New INI option to allow to set the SameSite directive for cookies. Defaults 738 to "" (empty string), so no SameSite directive is set. Can be set to "Lax" 739 or "Strict", which sets the respective SameSite directive. 740 741- syslog.facility 742 - New INI to set syslog facility which specifies what type of program is 743 logging the message. It is used only when error_log is set to syslog. 744 745- syslog.filter 746 . New INI to set syslog filter type to filter the logged messages. There are 747 3 supported filter types - all, no-ctrl and ascii. It is used only when 748 error_log is set to syslog. 749 750- syslog.ident 751 . New INI to set syslog ident string which is prepended to every message. It 752 is used only when error_log is set syslog. 753 754- mbstring.regex_stack_limit 755 . New INI directive (since 7.3.5) limiting stack depth of mbstring/oniguruma 756 regular expressions. 757 758======================================== 75912. Windows Support 760======================================== 761 762- Core 763 . File descriptors are opened in shared read/write/delete mode by default. 764 This effectively maps the UNIX semantics and allows to delete files with 765 handles in use. It is not 100% same, some platform differences still 766 persist. After the deletion, the filename entry is blocked, until all 767 the opened handles to it are closed. 768 769======================================== 77013. Other Changes 771======================================== 772 773. The cyclic GC has been enhanced, which may result in considerable performance 774 improvements. 775