mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
The original patch[1] cared only about pipe handles in the rset, but
would be problematic if there are other handles (e.g. files in the
rset, or pipes/files in the other sets), because `php_select()` would
return immediately, reporting all non read-pipe handles as ready, but
possibly never reporting read-pipe handles.
We fix this by applying different logic for the case where only pipe
handles are supplied in the rset, but no handles in the wset or eset.
In this case `php_select()` only returns when actually one of the
handles is ready, or when the timeout expires. To avoid busy looping
in this case, we sleep for a short amount of time. This matches POSIX
behavior.
In all other cases, `php_select()` behaves as before (i.e. prior to the
original fix), that is it returns immediately, reporting all handles as
ready.
We also add a test case that demonstrates multiplexing the output of a
couple of child processes.
See also the discussion on <https://github.com/php/php-src/pull/16917>.
[1] <b614b4a69a>
Closes GH-17174.
214 lines
6.9 KiB
Plaintext
214 lines
6.9 KiB
Plaintext
PHP 8.5 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
|
|
========================================
|
|
|
|
- BZ2:
|
|
. bzcompress() now throws a ValueError when $block_size is not between
|
|
1 and 9.
|
|
. bzcompress() now throws a ValueError when $work_factor is not between
|
|
0 and 250.
|
|
|
|
- Core:
|
|
. It is no longer possible to use "array" and "callable" as class alias names
|
|
in class_alias().
|
|
. Loosely comparing uncomparable objects (e.g. enums, \CurlHandle and other
|
|
internal classes) to booleans was previously inconsistent. If compared to a
|
|
boolean literal $object == true, it would behave the same way as (bool)
|
|
$object. If compared to a statically unknown value $object == $true, it
|
|
would always return false. This behavior was consolidated to always follow
|
|
the behavior of (bool) $object.
|
|
|
|
- Intl:
|
|
. The extension now requires at least ICU 57.1.
|
|
|
|
- LDAP:
|
|
. ldap_get_option() and ldap_set_option() now throw a ValueError when
|
|
passing an invalid option.
|
|
|
|
- SPL:
|
|
. ArrayObject no longer accepts enums, as modifying the $name or $value
|
|
properties can break engine assumptions.
|
|
|
|
========================================
|
|
2. New Features
|
|
========================================
|
|
|
|
- Core:
|
|
. Added support for Closures in constant expressions.
|
|
RFC: https://wiki.php.net/rfc/closures_in_const_expr
|
|
|
|
- DOM:
|
|
. Added Dom\Element::$outerHTML.
|
|
|
|
- XSL:
|
|
. The $namespace argument of XSLTProcessor::getParameter(),
|
|
XSLTProcessor::setParameter() and XSLTProcessor::removeParameter()
|
|
now actually works instead of being treated as empty.
|
|
This only works if the $name argument does not use Clark notation
|
|
and is not a QName because in those cases the namespace is taken
|
|
from the namespace href or prefix respectively.
|
|
|
|
========================================
|
|
3. Changes in SAPI modules
|
|
========================================
|
|
|
|
========================================
|
|
4. Deprecated Functionality
|
|
========================================
|
|
|
|
- Hash:
|
|
The MHASH_* constants have been deprecated. These have been overlooked
|
|
when the mhash*() function family has been deprecated per
|
|
https://wiki.php.net/rfc/deprecations_php_8_1#mhash_function_family
|
|
|
|
========================================
|
|
5. Changed Functions
|
|
========================================
|
|
|
|
- Zlib:
|
|
. The "use_include_path" argument for the
|
|
gzfile, gzopen and readgzfile functions had been changed
|
|
from int to boolean.
|
|
|
|
- PDO_PGSQL:
|
|
. PDO::pgsqlCopyFromArray also supports inputs as Iterable.
|
|
. Pdo\Pgsql::setAttribute and Pdo\Pgsql::prepare supports
|
|
PDO::ATTR_PREFETCH sets to 0 which set to lazy fetch mode.
|
|
In this mode, statements cannot be run parallely.
|
|
|
|
- PGSQL:
|
|
. pg_copy_from also supports inputs as Iterable.
|
|
|
|
========================================
|
|
6. New Functions
|
|
========================================
|
|
|
|
- Curl:
|
|
. curl_multi_get_handles() allows retrieving all CurlHandles current
|
|
attached to a CurlMultiHandle. This includes both handles added using
|
|
curl_multi_add_handle() and handles accepted by CURLMOPT_PUSHFUNCTION.
|
|
|
|
- DOM:
|
|
. Added Dom\Element::insertAdjacentHTML().
|
|
|
|
- PGSQL:
|
|
. pg_close_stmt offers an alternative way to close a prepared
|
|
statement from the DEALLOCATE sql command in that we can reuse
|
|
its name afterwards.
|
|
|
|
- Reflection:
|
|
. ReflectionConstant::getFileName() was introduced.
|
|
. ReflectionConstant::getExtension() and
|
|
ReflectionConstant::getExtensionName() were introduced.
|
|
|
|
========================================
|
|
7. New Classes and Interfaces
|
|
========================================
|
|
|
|
========================================
|
|
8. Removed Extensions and SAPIs
|
|
========================================
|
|
|
|
========================================
|
|
9. Other Changes to Extensions
|
|
========================================
|
|
|
|
- Readline:
|
|
. The return types of readline_add_history(), readline_clear_history(), and
|
|
readline_callback_handler_install() have been changed to true, rather
|
|
than bool.
|
|
|
|
========================================
|
|
10. New Global Constants
|
|
========================================
|
|
|
|
- Core:
|
|
. PHP_BUILD_DATE.
|
|
|
|
- POSIX:
|
|
. POSIX_SC_OPEN_MAX.
|
|
|
|
- Sockets:
|
|
. IPPROTO_ICMP/IPPROTO_ICMPV6.
|
|
. TCP_FUNCTION_BLK (FreeBSD only).
|
|
|
|
========================================
|
|
11. Changes to INI File Handling
|
|
========================================
|
|
|
|
- Opcache:
|
|
. Added opcache.file_cache_read_only to support a read-only
|
|
opcache.file_cache directory, for use with read-only file systems
|
|
(e.g. read-only Docker containers).
|
|
Best used with opcache.validate_timestamps=0,
|
|
opcache.enable_file_override=1,
|
|
and opcache.file_cache_consistency_checks=0.
|
|
Note: A cache generated with a different build of PHP, a different file
|
|
path, or different settings (including which extensions are loaded), may be
|
|
ignored.
|
|
|
|
========================================
|
|
12. Windows Support
|
|
========================================
|
|
|
|
* The configuration variables PHP_VERSION, PHP_MINOR_VERSION, and
|
|
PHP_RELEASE_VERSION are now always numbers. Previously, they have been
|
|
strings for buildconf builds.
|
|
|
|
* phpize builds now reflect the source tree in the build dir (like that already
|
|
worked for in-tree builds); some extension builds (especially when using
|
|
Makefile.frag.w32) may need adjustments.
|
|
|
|
* --enable-sanitzer is now supported for MSVC builds. This enables ASan and
|
|
debug assertions, and is supported as of MSVC 16.10 and Windows 10.
|
|
|
|
* COM:
|
|
. The extension is now build shared by default; previously it defaulted to a
|
|
static extension, although the official Windows binaries built a shared
|
|
extension.
|
|
|
|
* FFI:
|
|
. It is no longer necessary to specify the library when using FFI::cdef()
|
|
and FFI::load(). However, this convenience feature should not be used in
|
|
production.
|
|
|
|
* Streams:
|
|
. If only pipe streams are contained in the $read array, and the $write and
|
|
$except arrays are empty, stream_select() now behaves similar to POSIX
|
|
systems, i.e. the function only returns if at least one pipe is ready to be
|
|
read, or after the timeout expires. Previously, stream_select() returned
|
|
immediately, reporting all streams as ready to read.
|
|
|
|
========================================
|
|
13. Other Changes
|
|
========================================
|
|
|
|
- Core:
|
|
The high resolution timer (`hrtime()`) on macOS now uses the recommended
|
|
`clock_gettime_nsec_np(CLOCK_UPTIME_RAW)` API instead of
|
|
`mach_absolute_time()`.
|
|
|
|
========================================
|
|
14. Performance Improvements
|
|
========================================
|
|
|
|
- XMLWriter:
|
|
. Improved performance and reduce memory consumption.
|