2020-10-09 15:21:39 +08:00
|
|
|
PHP 8.1 UPGRADE NOTES
|
2012-03-06 04:14:04 +08:00
|
|
|
|
|
|
|
1. Backward Incompatible Changes
|
|
|
|
2. New Features
|
2014-05-01 18:27:38 +08:00
|
|
|
3. Changes in SAPI modules
|
|
|
|
4. Deprecated Functionality
|
|
|
|
5. Changed Functions
|
|
|
|
6. New Functions
|
|
|
|
7. New Classes and Interfaces
|
2015-02-10 15:56:18 +08:00
|
|
|
8. Removed Extensions and SAPIs
|
2014-05-01 18:27:38 +08:00
|
|
|
9. Other Changes to Extensions
|
|
|
|
10. New Global Constants
|
|
|
|
11. Changes to INI File Handling
|
2014-08-22 19:35:07 +08:00
|
|
|
12. Windows Support
|
2019-01-28 17:34:31 +08:00
|
|
|
13. Other Changes
|
|
|
|
14. Performance Improvements
|
2010-03-25 00:23:50 +08:00
|
|
|
|
|
|
|
========================================
|
2012-03-06 04:14:04 +08:00
|
|
|
1. Backward Incompatible Changes
|
2010-03-25 00:23:50 +08:00
|
|
|
========================================
|
2016-04-25 05:49:52 +08:00
|
|
|
|
2020-12-03 00:47:33 +08:00
|
|
|
- Core:
|
|
|
|
. Access to the $GLOBALS array is now subject to a number of restrictions.
|
|
|
|
Read and write access to individual array elements like $GLOBALS['var']
|
|
|
|
continues to work as-is. Read-only access to the entire $GLOBALS array also
|
|
|
|
continues to be supported. However, write access to the entire $GLOBALS
|
|
|
|
array is no longer supported. For example, array_pop($GLOBALS) will result
|
|
|
|
in an error.
|
|
|
|
RFC: https://wiki.php.net/rfc/restrict_globals_usage
|
2020-11-30 23:45:48 +08:00
|
|
|
. Passing null to a non-nullable argument of a built-in function is
|
|
|
|
deprecated. This matches the behavior of user-defined functions, where null
|
|
|
|
is never accepted by non-nullable arguments.
|
|
|
|
user-defined functions.
|
|
|
|
|
|
|
|
var_dump(str_contains("foobar", null));
|
|
|
|
// Deprecated: Passing null to parameter #2 ($needle) of type string
|
|
|
|
// is deprecated
|
|
|
|
|
|
|
|
RFC: https://wiki.php.net/rfc/deprecate_null_to_scalar_internal_arg
|
2021-02-17 17:47:30 +08:00
|
|
|
. When a method using static variables is inherited, the inherited method
|
|
|
|
will now initialize the static variables to their original values, rather
|
|
|
|
than the values at the time of inheritance:
|
|
|
|
|
|
|
|
class A {
|
|
|
|
public function counter() {
|
|
|
|
static $counter = 0;
|
|
|
|
$counter++;
|
|
|
|
return $counter;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var_dump((new A)->counter()); // int(1)
|
|
|
|
|
|
|
|
eval('class B extends A {}'); // eval() to prevent early binding.
|
|
|
|
|
|
|
|
var_dump((new B)->counter()); // int(1), previously int(2)
|
|
|
|
var_dump((new A)->counter()); // int(2)
|
|
|
|
var_dump((new B)->counter()); // int(2), previously int(3)
|
|
|
|
|
|
|
|
Previously the behavior would be different depending on whether A::counter()
|
|
|
|
was called before class B was declared, or after it was declared.
|
2020-12-03 00:47:33 +08:00
|
|
|
|
2020-12-19 02:10:53 +08:00
|
|
|
- Fileinfo:
|
|
|
|
. The fileinfo functions now accept and return, respectively, finfo objects
|
|
|
|
instead of resources.
|
|
|
|
|
2020-12-22 10:09:00 +08:00
|
|
|
- IMAP:
|
|
|
|
. The IMAP functions now accept and return, respectively, IMAPConnection objects
|
|
|
|
instead of resources.
|
|
|
|
|
2021-03-13 19:11:40 +08:00
|
|
|
- LDAP:
|
|
|
|
. The LDAP functions now accept and return, respectively, LDAP objects
|
|
|
|
instead of "ldap link" resources. Return value checks using is_resource()
|
|
|
|
should be replaced with checks for `false`.
|
|
|
|
. The LDAP functions now accept and return, respectively, LDAPResult objects
|
|
|
|
instead of "ldap result" resources. Return value checks using is_resource()
|
|
|
|
should be replaced with checks for `false`.
|
|
|
|
. The LDAP functions now accept and return, respectively, LDAPResultEntry
|
|
|
|
objects instead of "ldap result entry" resources. Return value checks using
|
|
|
|
is_resource() should be replaced with checks for `false`.
|
|
|
|
|
2020-12-14 22:41:56 +08:00
|
|
|
- MySQLi:
|
|
|
|
. mysqli_fetch_fields() and mysqli_fetch_field_direct() will now always return
|
|
|
|
zero for max_length. You can compute this information by iterating over the
|
|
|
|
result set and taking the maximum length. This is what PHP was doing
|
|
|
|
internally previously.
|
|
|
|
. The MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH option no longer has an effect.
|
MySQLnd: Clean up and optimize mysqlnd result set handling
This is a larger overhaul of the mysqlnd result set infrastructure:
* Drop support for two different types of buffered results sets
("c" and "zval"). Possibly these made sense at some earlier
time, but now (with minor adjustments) one option is strictly
worse than the other. Buffered result sets already buffer the
full row packets, from which zvals can be decoded. The "zval"
style additionally also buffered the decoded zvals. As result
sets, even buffered ones, are generally only traversed once,
this just ends up wasting memory. Now, a potentially useful
variation here would be to buffer the decoded zvals instead of
the row packets, but that's not what the code was doing.
* To make it really strictly better, pre-allocate the zval row
buffer and reuse it for all rows. Previously the "c" style always
allocated a new buffer for each row.
* The fetch_row API now provides a populated zval[]. The task of
populating an array is deferred to fetch_row_into, which also
avoids duplicating this code in multiple places. The fetch_row_c
API is also implemented on top of fetch_row now, rather than
duplicating large parts of the code.
* The row fetching code for prepared statements and normal result
sets has been mostly merged. These already used the same
infrastructure, but prepared statements used separate row
fetching functions that were nearly the same as the normal ones.
This requires passing the stmt into the result set, rather than
just a flag. The only part that remains separate is reading of
unbuffered results in the presence of PS cursors.
2020-12-14 22:05:23 +08:00
|
|
|
. The MYSQLI_STORE_RESULT_COPY_DATA option no longer has an effect.
|
2021-01-21 06:50:55 +08:00
|
|
|
. The default error handling mode has been changed from "silent" to
|
|
|
|
"exceptions". See https://www.php.net/manual/en/mysqli-driver.report-mode.php
|
|
|
|
for details of behavior changes and how to explicitly set this attribute. To
|
|
|
|
keep the old behavior, use mysqli_report(MYSQLI_REPORT_OFF);
|
|
|
|
RFC: https://wiki.php.net/rfc/mysqli_default_errmode
|
2021-04-14 19:52:51 +08:00
|
|
|
. Classes extending mysqli_stmt::execute() will be required to specify the
|
|
|
|
additional parameter now.
|
|
|
|
RFC: https://wiki.php.net/rfc/mysqli_bind_in_execute
|
MySQLnd: Clean up and optimize mysqlnd result set handling
This is a larger overhaul of the mysqlnd result set infrastructure:
* Drop support for two different types of buffered results sets
("c" and "zval"). Possibly these made sense at some earlier
time, but now (with minor adjustments) one option is strictly
worse than the other. Buffered result sets already buffer the
full row packets, from which zvals can be decoded. The "zval"
style additionally also buffered the decoded zvals. As result
sets, even buffered ones, are generally only traversed once,
this just ends up wasting memory. Now, a potentially useful
variation here would be to buffer the decoded zvals instead of
the row packets, but that's not what the code was doing.
* To make it really strictly better, pre-allocate the zval row
buffer and reuse it for all rows. Previously the "c" style always
allocated a new buffer for each row.
* The fetch_row API now provides a populated zval[]. The task of
populating an array is deferred to fetch_row_into, which also
avoids duplicating this code in multiple places. The fetch_row_c
API is also implemented on top of fetch_row now, rather than
duplicating large parts of the code.
* The row fetching code for prepared statements and normal result
sets has been mostly merged. These already used the same
infrastructure, but prepared statements used separate row
fetching functions that were nearly the same as the normal ones.
This requires passing the stmt into the result set, rather than
just a flag. The only part that remains separate is reading of
unbuffered results in the presence of PS cursors.
2020-12-14 22:05:23 +08:00
|
|
|
|
|
|
|
- MySQLnd:
|
|
|
|
. The mysqlnd.fetch_copy_data ini setting has been removed. However, this
|
|
|
|
should not result in user-visible behavior changes.
|
2020-12-14 22:41:56 +08:00
|
|
|
|
2020-12-21 22:31:15 +08:00
|
|
|
- PDO:
|
|
|
|
. PDO::ATTR_STRINGIFY_FETCHES now also stringifies values of type bool to
|
|
|
|
"0" or "1". Previously booleans were not stringified.
|
2020-12-17 19:05:37 +08:00
|
|
|
. Calling bindColumn() with PDO::PARAM_LOB (and assuming stringification is
|
|
|
|
not enabled) will now consistently bind a stream result, as documented.
|
|
|
|
Previously the result would be either a stream or a string depending on the
|
|
|
|
used database driver and the time the binding is performed.
|
2020-12-21 22:31:15 +08:00
|
|
|
|
2020-12-16 00:07:27 +08:00
|
|
|
- PDO MySQL:
|
|
|
|
. Integers and floats in result sets will now be returned using native PHP
|
|
|
|
types instead of strings when using emulated prepared statements. This
|
|
|
|
matches the behavior of native prepared statements. You can restore the
|
|
|
|
previous behavior by enabling the PDO::ATTR_STRINGIFY_FETCHES option.
|
|
|
|
|
2020-12-23 17:57:19 +08:00
|
|
|
- PDO SQLite:
|
|
|
|
. Integers and floats in results sets will now be returned using native PHP
|
|
|
|
types. You can restore the previous behavior by enabling the
|
2021-03-31 11:49:41 +08:00
|
|
|
PDO::ATTR_STRINGIFY_FETCHES option.
|
2020-12-23 17:57:19 +08:00
|
|
|
|
2020-12-14 02:00:51 +08:00
|
|
|
- Standard:
|
|
|
|
. version_compare() no longer accepts undocumented operator abbreviations.
|
2021-01-07 01:44:11 +08:00
|
|
|
. htmlspecialchars(), htmlentities(), htmlspecialchars_decode(),
|
2021-03-31 11:49:41 +08:00
|
|
|
html_entity_decode() and get_html_translation_table() now use
|
2021-01-07 01:44:11 +08:00
|
|
|
ENT_QUOTES | ENT_SUBSTITUTE rather than ENT_COMPAT by default. This means
|
|
|
|
that ' is escaped to ' while previously it was left alone.
|
|
|
|
Additionally, malformed UTF-8 will be replaced by a Unicode substitution
|
|
|
|
character, instead of resulting in an empty string.
|
2021-03-03 23:28:39 +08:00
|
|
|
. debug_zval_dump() will now print reference wrappers with their refcount,
|
|
|
|
instead of only prepending a "&" to the value. This more accurately models
|
|
|
|
reference representation since PHP 7.0.
|
|
|
|
. debug_zval_dump() will not print "interned" instead of a dummy refcount of
|
|
|
|
one for interned strings and immutable arrays.
|
2021-03-29 20:55:18 +08:00
|
|
|
. fputcsv() now accepts a new "eol" argument which allow to define a custom
|
|
|
|
eol sequence, the default remains the same and is "\n".
|
|
|
|
|
|
|
|
- SPL:
|
|
|
|
. SplFileObject::fputcsv() now accepts a new "eol" argument which allow to
|
|
|
|
define a custom eol sequence, the default remains the same and is "\n".
|
2020-12-14 02:00:51 +08:00
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
|
|
|
2. New Features
|
|
|
|
========================================
|
2009-01-29 01:23:28 +08:00
|
|
|
|
2020-10-19 22:19:15 +08:00
|
|
|
- Core:
|
|
|
|
. It is now possible to specify octal integer by using the explicit "0o"/"0O"
|
2021-01-07 17:49:50 +08:00
|
|
|
prefix similar to hexadecimal ("0x"/"0X) and binary ("0b"/"0B") integer
|
|
|
|
literals.
|
2020-10-19 22:19:15 +08:00
|
|
|
RFC: https://wiki.php.net/rfc/explicit_octal_notation
|
2021-01-07 17:49:50 +08:00
|
|
|
. Added support for array unpacking with strings keys.
|
|
|
|
RFC: https://wiki.php.net/rfc/array_unpacking_string_keys
|
2021-03-18 02:15:35 +08:00
|
|
|
. Added support for enumerations.
|
|
|
|
RFC: https://wiki.php.net/rfc/enumerations
|
2020-10-19 22:19:15 +08:00
|
|
|
|
2021-01-18 04:26:25 +08:00
|
|
|
- Curl:
|
|
|
|
. Added CURLOPT_DOH_URL option.
|
2020-11-26 15:30:02 +08:00
|
|
|
. Added CURLStringFile, which can be used to post a file from a string rather
|
|
|
|
than a file:
|
|
|
|
|
|
|
|
$file = new CURLStringFile($data, 'filename.txt', 'text/plain');
|
|
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
|
2021-01-18 04:26:25 +08:00
|
|
|
|
2021-03-22 02:32:19 +08:00
|
|
|
- FPM:
|
|
|
|
. Added openmetrics status format. It can be used by Prometheus to fetch FPM
|
|
|
|
metrics.
|
2021-03-29 04:15:35 +08:00
|
|
|
. Added new pool option for the dynamic process manager called
|
|
|
|
pm.max_spawn_rate. It allows to start number of children in a faster rate
|
|
|
|
when dynamic pm is selected. The default value is 32 which was the previous
|
|
|
|
hard coded value.
|
2021-03-22 02:32:19 +08:00
|
|
|
|
2020-11-01 02:19:00 +08:00
|
|
|
- hash:
|
2020-12-13 23:36:57 +08:00
|
|
|
. The following functions have changed signatures:
|
|
|
|
|
|
|
|
- function hash(string $algo, string $data, bool $binary = false, array $options = []): string|false {}
|
|
|
|
- function hash_file(string $algo, string $filename, bool $binary = false, array $options = []): string|false {}
|
|
|
|
- function hash_init(string $algo, int $flags = 0, string $key = "", array $options = []): HashContext {}
|
|
|
|
|
|
|
|
The additional `$options` argument can be used to pass algorithm specific data.
|
|
|
|
|
|
|
|
. Added MurmurHash3 with streaming support. The following variants are implemented:
|
2020-11-01 02:19:00 +08:00
|
|
|
|
|
|
|
- murmur3a, 32-bit hash
|
|
|
|
- murmur3c, 128-bit hash for x86
|
|
|
|
- murmur3f, 128-bit hash for x64
|
|
|
|
|
2020-12-13 23:36:57 +08:00
|
|
|
The initial hash state can be passed through the `seed` key in the `$options` array, for example:
|
|
|
|
|
|
|
|
```php
|
|
|
|
$h = hash("murmur3f", $data, options: ["seed" => 42]);
|
|
|
|
echo $h, "\n";
|
|
|
|
```
|
|
|
|
|
2021-03-31 11:49:41 +08:00
|
|
|
A valid seed value is within the range from 0 to the platform defined UINT_MAX, usually 4294967295.
|
2020-12-13 23:36:57 +08:00
|
|
|
|
2021-01-10 04:50:46 +08:00
|
|
|
. Added xxHash. The implementation brings in the following arguments
|
|
|
|
|
|
|
|
- xxh32, 32-bit hash
|
|
|
|
- xxh64, 64-bit hash
|
|
|
|
- xxh3, 64-bit hash
|
|
|
|
- xxh128, 128-bit hash
|
|
|
|
|
|
|
|
The initial hash state can be passed through the `seed` key in the `$options` array, for example:
|
|
|
|
|
|
|
|
```php
|
|
|
|
$h = hash("xxh3", $data, options: ["seed" => 42]);
|
|
|
|
echo $h, "\n";
|
|
|
|
```
|
|
|
|
|
2021-02-21 20:33:21 +08:00
|
|
|
Secret usage is supported through passing the `secret` key in the `$options` array, too:
|
|
|
|
|
|
|
|
```php
|
|
|
|
$h = hash("xxh3", $data, options: ["secret" => "at least 136 bytes long secret here"]);
|
|
|
|
echo $h, "\n";
|
|
|
|
```
|
|
|
|
|
|
|
|
Note, that the quality of the custom secret is crucial for the quality of the resulting hash. It is
|
|
|
|
highly recommended for the secret to use the best possible entropy.
|
|
|
|
|
2021-02-22 18:03:24 +08:00
|
|
|
- MySQLi:
|
|
|
|
. The mysqli.local_infile_directory ini setting has been added, which can be
|
|
|
|
used to specify a directory from which files are allowed to be loaded. It
|
|
|
|
is only meaningful if mysqli.allow_local_infile is not enabled, as all
|
|
|
|
directories are allowed in that case.
|
2021-04-14 19:52:51 +08:00
|
|
|
. Binding in execute has been added to mysqli prepared statements.
|
|
|
|
Parameters can now be passed to mysqli_stmt::execute as an array.
|
|
|
|
RFC: https://wiki.php.net/rfc/mysqli_bind_in_execute
|
2021-02-22 18:03:24 +08:00
|
|
|
|
|
|
|
- PDO MySQL:
|
|
|
|
. The PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY attribute has been added, which
|
|
|
|
can be used to specify a directory from which files are allowed to be
|
|
|
|
loaded. It is only meaningful if PDO::MYSQL_ATTR_LOCAL_INFILE is not
|
|
|
|
enabled, as all directories are allowed in that case.
|
|
|
|
|
2021-01-17 13:13:19 +08:00
|
|
|
- PDO SQLite:
|
|
|
|
. SQLite's "file:" DSN syntax is now supported, which allows specifying
|
|
|
|
additional flags. This feature is not available if open_basedir is set.
|
|
|
|
Example:
|
|
|
|
|
|
|
|
new PDO('sqlite:file:path/to/sqlite.db?mode=ro')
|
|
|
|
|
2021-01-16 19:54:35 +08:00
|
|
|
- Posix:
|
|
|
|
. Added POSIX_RLIMIT_KQUEUES and POSIX_RLIMIT_NPTS. These rlimits are only
|
|
|
|
available on FreeBSD.
|
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
3. Changes in SAPI modules
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2009-01-29 01:23:28 +08:00
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
4. Deprecated Functionality
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2009-01-29 01:23:28 +08:00
|
|
|
|
2021-03-14 03:06:17 +08:00
|
|
|
- MySQLi:
|
|
|
|
. The mysqli_driver::$driver_version property has been deprecated. The driver
|
|
|
|
version is meaningless as it hasn't been updated in more than a decade. Use
|
|
|
|
PHP_VERSION_ID instead.
|
2021-03-14 01:34:33 +08:00
|
|
|
. Calling mysqli::get_client_info in OO style or passing $mysqli argument to
|
|
|
|
mysqli_get_client_info() function has been deprecated. Use
|
|
|
|
mysqli_get_client_info() without any arguments to obtain the client
|
|
|
|
library version information.
|
2021-03-14 03:06:17 +08:00
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
5. Changed Functions
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2009-06-24 03:40:31 +08:00
|
|
|
|
2021-03-01 18:42:34 +08:00
|
|
|
- Core:
|
|
|
|
. Properties order used in foreach, var_dump(), serialize(), object comparison
|
|
|
|
etc. was changed. Now properties are naturally ordered according to their
|
2021-03-05 17:31:04 +08:00
|
|
|
declaration and inheritance. Properties declared in a base class are going
|
2021-03-01 18:42:34 +08:00
|
|
|
to be before the child properties. This order is consistent with internal
|
2021-03-31 11:49:41 +08:00
|
|
|
layout of properties in zend_object structure and repeats the order in
|
2021-03-01 18:42:34 +08:00
|
|
|
default_properties_table[] and properties_info_table[]. The old order was
|
|
|
|
not documented and was caused by class inheritance implementation details.
|
|
|
|
|
2020-10-19 22:19:15 +08:00
|
|
|
- Filter:
|
|
|
|
. The FILTER_FLAG_ALLOW_OCTAL flag of the FILTER_VALIDATE_INT filter now accept
|
|
|
|
octal string with the leading octal prefix ("0o"/"0O")
|
|
|
|
RFC: https://wiki.php.net/rfc/explicit_octal_notation
|
|
|
|
|
|
|
|
- GMP:
|
|
|
|
. All GMP function now accept octal string with the leading octal prefix ("0o"/"0O")
|
|
|
|
RFC: https://wiki.php.net/rfc/explicit_octal_notation
|
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
6. New Functions
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2015-04-24 23:19:58 +08:00
|
|
|
|
2021-01-25 05:23:13 +08:00
|
|
|
- Core:
|
|
|
|
. Added array_is_list(array $array), which will return true if the array keys are 0 .. count($array)-1 in that order.
|
|
|
|
RFC: https://wiki.php.net/rfc/is_list
|
|
|
|
|
2021-04-13 22:04:29 +08:00
|
|
|
- Standard:
|
|
|
|
. Added fsync() and fdatasync(), which instruct the operating system to
|
|
|
|
flush its buffers to physical storage.
|
|
|
|
RFC: https://wiki.php.net/rfc/fsync_function
|
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
7. New Classes and Interfaces
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2009-01-29 01:23:28 +08:00
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2015-02-10 15:56:18 +08:00
|
|
|
8. Removed Extensions and SAPIs
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2009-01-29 01:23:28 +08:00
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
9. Other Changes to Extensions
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2016-07-03 18:43:30 +08:00
|
|
|
|
2020-12-18 19:13:17 +08:00
|
|
|
- MySQLi:
|
|
|
|
. The mysqli_stmt::next_result() and mysqli::fetch_all() methods are now
|
|
|
|
available when linking against libmysqlclient.
|
|
|
|
|
2020-10-11 04:02:26 +08:00
|
|
|
- OpenSSL:
|
|
|
|
. The OpenSSL extension now requires at least OpenSSL version 1.0.2.
|
|
|
|
|
2020-11-24 18:46:03 +08:00
|
|
|
- Standard:
|
|
|
|
. --with-password-argon2 now uses pkg-config to detect libargon2. As such,
|
|
|
|
an alternative libargon2 location should now be specified using
|
|
|
|
PKG_CONFIG_PATH.
|
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
10. New Global Constants
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2010-03-25 00:23:50 +08:00
|
|
|
|
2021-01-24 00:14:13 +08:00
|
|
|
- MySQLi:
|
|
|
|
. MYSQLI_REFRESH_REPLICA has been added as a replacement for
|
|
|
|
MYSQLI_REFRESH_SLAVE, in line with an upstream change in MySQL. The old
|
|
|
|
constant is still available for backwards-compatibility reasons, but may
|
|
|
|
be deprecated/removed in the future.
|
|
|
|
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2014-05-01 18:27:38 +08:00
|
|
|
11. Changes to INI File Handling
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2010-08-30 17:38:47 +08:00
|
|
|
|
2014-08-22 19:35:07 +08:00
|
|
|
========================================
|
|
|
|
12. Windows Support
|
|
|
|
========================================
|
|
|
|
|
2020-10-19 00:27:01 +08:00
|
|
|
. The macro IGNORE_URL_WIN has been removed; it had no effect as of PHP 5.0.0.
|
|
|
|
|
2019-01-15 17:13:39 +08:00
|
|
|
========================================
|
2019-01-28 17:34:31 +08:00
|
|
|
13. Other Changes
|
2012-03-06 04:14:04 +08:00
|
|
|
========================================
|
2018-12-27 05:26:01 +08:00
|
|
|
|
|
|
|
========================================
|
2019-01-28 17:34:31 +08:00
|
|
|
14. Performance Improvements
|
2018-12-27 05:26:01 +08:00
|
|
|
========================================
|