UPGRADING 29 KB

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