PHP                                                                        NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 Jul 2025, PHP 8.5.0alpha2

- Core:
  . Fix OSS-Fuzz #427814452 (pipe compilation fails with assert).
    (nielsdos, ilutov)

- DOM:
  . Make cloning DOM node lists, maps, and collections fail. (nielsdos)
  . Added Dom\Element::getElementsByClassName(). (nielsdos)

- PDO_ODBC
  . Fetch larger block sizes and better handle SQL_NO_TOTAL when calling
    SQLGetData. (Calvin Buckley, Saki Takamachi)

- Standard:
  . Optimized pack(). (nielsdos, divinity76)
  . Fixed bug GH-19070 (setlocale($type, NULL) should not be deprecated).
    (nielsdos)

- URI:
  . Return the singleton UrlValidationErrorType instances from Uri\WhatWg\Url
    instead of creating new objects that are different from the singleton.
    (timwolla)

03 Jul 2025, PHP 8.5.0alpha1

- BCMath:
  . Simplify `bc_divide()` code. (SakiTakamachi)
  . If the result is 0, n_scale is set to 0. (SakiTakamachi)
  . If size of BC_VECTOR array is within 64 bytes, stack area is now used.
    (SakiTakamachi)

- CLI:
  . Add --ini=diff to print INI settings changed from the builtin default.
    (timwolla)
  . Drop support for -z CLI/CGI flag. (nielsdos)
  . Fixed GH-17956 - development server 404 page does not adapt to mobiles.
    (pascalchevrel)

- CURL:
  . Added CURLFOLLOW_ALL, CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY
    values for CURLOPT_FOLLOLOCATION curl_easy_setopt option. (David Carlier)

- COM:
  . Fixed property access of PHP objects wrapped in variant. (cmb)
  . Fixed method calls for PHP objects wrapped in variant. (cmb)

- Core:
  . Fixed bug GH-16665 (\array and \callable should not be usable in
    class_alias). (nielsdos)
  . Added PHP_BUILD_DATE constant. (cmb)
  . Added support for Closures and first class callables in constant
    expressions. (timwolla, Volker Dusch)
  . Use `clock_gettime_nsec_np()` for high resolution timer on macOS
    if available. (timwolla)
  . Implement GH-15680 (Enhance zend_dump_op_array to properly represent
    non-printable characters in string literals). (nielsdos, WangYihang)
  . Add support for backtraces for fatal errors. (enorris)
  . Fixed bug GH-17442 (Engine UAF with reference assign and dtor). (nielsdos)
  . Improved error message of UnhandledMatchError for
    zend.exception_string_param_max_len=0. (timwolla)
  . Fixed bug GH-17959 (Relax missing trait fatal error to error exception).
    (ilutov)
  . Fixed bug GH-18033 (NULL-ptr dereference when using register_tick_function
    in destructor). (nielsdos)
  . Fixed bug GH-18026 (Improve "expecting token" error for ampersand). (ilutov)
  . Added the #[\NoDiscard] attribute to indicate that a function's return
    value is important and should be consumed. (timwolla, Volker Dusch)
  . Added the (void) cast to indicate that not using a value is intentional.
    (timwolla, Volker Dusch)
  . Added get_error_handler(), get_exception_handler() functions. (Arnaud)
  . Fixed bug GH-15753 and GH-16198 (Bind traits before parent class). (ilutov)
  . Added support for casts in constant expressions. (nielsdos)
  . Fixed bugs GH-17711 and GH-18022 (Infinite recursion on deprecated attribute
    evaluation) and GH-18464 (Recursion protection for deprecation constants not
    released on bailout). (DanielEScherzer and ilutov)
  . Fixed AST printing for immediately invoked Closure. (Dmitrii Derepko)
  . Properly handle __debugInfo() returning an array reference. (nielsdos)
  . Properly handle reference return value from __toString(). (nielsdos)
  . Added the pipe (|>) operator. (crell)
  . Added support for `final` with constructor property promotion.
    (DanielEScherzer)
  . Do not use RTLD_DEEPBIND if dlmopen is available. (Daniil Gentili)
  . Make `clone()` a function. (timwolla, edorian)
  . Fixed bug GH-19081 (Wrong lineno in property error with constructor property
    promotion). (ilutov)

- Curl:
  . Added curl_multi_get_handles(). (timwolla)
  . Added curl_share_init_persistent(). (enorris)
  . Added CURLINFO_USED_PROXY, CURLINFO_HTTPAUTH_USED, and CURLINFO_PROXYAUTH_USED
    support to curl_getinfo. (Ayesh Karunaratne)

- Date:
  . Fix undefined behaviour problems regarding integer overflow in extreme edge
    cases. (nielsdos, cmb, ilutov)

- DOM:
  . Added Dom\Element::$outerHTML. (nielsdos)
  . Added Dom\Element::insertAdjacentHTML(). (nielsdos)
  . Added $children property to ParentNode implementations. (nielsdos)

- Enchant:
  . Added enchant_dict_remove_from_session(). (nielsdos)
  . Added enchant_dict_remove(). (nielsdos)
  . Fix missing empty string checks. (nielsdos)

- EXIF:
  . Add OffsetTime* Exif tags. (acc987)

- Fileinfo:
  . Upgrade to file 5.46. (nielsdos)
  . Change return type of finfo_close() to true. (timwolla)

- FPM:
  . Fixed GH-17645 (FPM with httpd ProxyPass does not decode script path).
    (Jakub Zelenka)

- GD:
  . Fixed bug #68629 (Transparent artifacts when using imagerotate). (pierre,
    cmb)
  . Fixed bug #64823 (ZTS GD fails to to find system TrueType font). (cmb)

- Intl:
  . Bumped ICU requirement to ICU >= 57.1. (cmb)
  . IntlDateFormatter::setTimeZone()/datefmt_set_timezone() throws an exception
    with uninitialised classes or clone failure. (David Carlier)
  . Added DECIMAL_COMPACT_SHORT/DECIMAL_COMPACT_LONG for NumberFormatter class.
    (BogdanUngureanu)
  . Added Locale::isRightToLeft to check if a locale is written right to left.
    (David Carlier)
  . Added null bytes presence in locale inputs for Locale class. (David Carlier)
  . Added grapheme_levenshtein() function. (Yuya Hamada)
  . Added Locale::addLikelySubtags/Locale::minimizeSubtags to handle
    adding/removing likely subtags to a locale. (David Carlier)
  . Added IntlListFormatter class to format a list of items with a locale
    , operands types and units. (BogdanUngureanu)
  . Fixed bug GH-18566 ([intl] Weird numeric sort in Collator). (nielsdos)

- LDAP:
  . Allow ldap_get_option to retrieve global option by allowing NULL for
    connection instance ($ldap). (Remi)

- MySQLi:
  . Fixed bugs GH-17900 and GH-8084 (calling mysqli::__construct twice).
    (nielsdos)

- MySQLnd:
  . Added mysqlnd.collect_memory_statistics to ini quick reference.
    (hauk92)

- Opcache:
  . Fixed ZTS OPcache build on Cygwin. (cmb)
  . Added opcache.file_cache_read_only. (Samuel Melrose)
  . Updated default value of opcache.jit_hot_loop. (Arnaud)
  . Log a warning when opcache lock file permissions could not be changed.
    (Taavi Eomäe)

- OpenSSL:
  . Added openssl.libctx INI that allows to select the OpenSSL library context
    type and convert verious parts of the extension to use the custom  libctx.
    (Jakub Zelenka)

- Output:
  . Fixed calculation of aligned buffer size. (cmb)

- PCNTL:
  . Extend pcntl_waitid with rusage parameter. (vrza)

- PCRE:
  . Upgraded to pre2lib from 10.44 to 10.45. (nielsdos)
  . Remove PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK from pcre compile options.
    (mvorisek)

- PDO_PGSQL:
  . Added Iterable support for PDO::pgsqlCopyFromArray. (KentarouTakeda)
  . Implement GH-15387 Pdo\Pgsql::setAttribute(PDO::ATTR_PREFETCH, 0) or
    Pdo\Pgsql::prepare(…, [ PDO::ATTR_PREFETCH => 0 ]) make fetch() lazy
    instead of storing the whole result set in memory (Guillaume Outters)

- PDO_SQLITE:
  . throw on null bytes / resolve GH-13952 (divinity76).
  . Implement GH-17321: Add setAuthorizer to Pdo\Sqlite. (nielsdos)
  . PDO::sqliteCreateCollation now throws a TypeError if the callback
    has a wrong return type. (David Carlier)
  . Added Pdo_Sqlite::ATTR_BUSY_STATEMENT constant to check
    if a statement is currently executing. (David Carlier)
  . Added Pdo_Sqlite::ATTR_EXPLAIN_STATEMENT constant to set a statement
    in either EXPLAIN_MODE_PREPARED, EXPLAIN_MODE_EXPLAIN,
    EXPLAIN_MODE_EXPLAIN_QUERY_PLAN modes. (David Carlier)

- PGSQL:
  . Added pg_close_stmt to close a prepared statement while allowing
    its name to be reused. (David Carlier)
  . Added Iterable support for pgsql_copy_from. (David Carlier)
  . pg_connect checks if connection_string contains any null byte,
    pg_close_stmt check if the statement contains any null byte.
    (David Carlier)
  . Added pg_service to get the connection current service identifier.
    (David Carlier)

- POSIX:
  . Added POSIX_SC_OPEN_MAX constant to get the number of file descriptors
    a process can handle. (David Carlier)
  . posix_ttyname() sets last_error to EBADF on invalid file descriptors,
    posix_isatty() raises E_WARNING on invalid file descriptors,
    posix_fpathconf checks invalid file descriptors. (David Carlier)

- Random:
  . Moves from /dev/urandom usage to arc4random_buf on Haiku. (David Carlier)

- Reflection:
  . Added ReflectionConstant::getExtension() and ::getExtensionName().
    (DanielEScherzer)
  . Fixed bug GH-12856 (ReflectionClass::getStaticPropertyValue() returns UNDEF
    zval for uninitialized typed properties). (nielsdos)
  . Fixed bug GH-15766 (ReflectionClass::toString() should have better output
    for enums). (DanielEScherzer)

- Session:
  . session_start() throws a ValueError on option argument if not a hashmap
    or a TypeError if read_and_close value is not compatible with int.
    (David Carlier)

- SimpleXML:
  . Fixed bug GH-12231 (SimpleXML xpath should warn when returning other return
    types than node lists). (nielsdos)

- SNMP:
  . snmpget, snmpset, snmp_get2, snmp_set2, snmp_get3, snmp_set3 and
    SNMP::__construct() throw an exception on invalid hostname, community
    timeout and retries arguments. (David Carlier)

- SOAP:
  . Fixed bug #49169 (SoapServer calls wrong function, although "SOAP action"
    header is correct). (nielsdos)
  . Fix namespace handling of WSDL and XML schema in SOAP,
    fixing at least GH-16320 and bug #68576. (nielsdos)
  . Fixed bug #70951 (Segmentation fault on invalid WSDL cache). (nielsdos)
  . Implement request #55503 (Extend __getTypes to support enumerations).
    (nielsdos, datibbaw)
  . Implement request #61105 (Support Soap 1.2 SoapFault Reason Text lang
    attribute). (nielsdos)

- Sockets:
  . Added IPPROTO_ICMP/IPPROTO_ICMPV6 to create raw socket for ICMP usage.
    (David Carlier)
  . Added TCP_FUNCTION_BLK to change the TCP stack algorithm on FreeBSD.
    (David Carlier)
  . socket_set_option() catches possible overflow with SO_RCVTIMEO/SO_SNDTIMEO
    with timeout setting on windows. (David Carlier)
  . Added TCP_FUNCTION_ALIAS, TCP_REUSPORT_LB_NUMA, TCP_REUSPORT_LB_NUMA_NODOM,
    TCP_REUSPORT_LB_CURDOM, TCP_BBR_ALGORITHM constants.
  . socket_create_listen() throws an exception on invalid port value.
    (David Carlier)
  . socket_bind() throws an exception on invalid port value.
    (David Carlier)
  . socket_sendto() throws an exception on invalid port value.
    (David Carlier)
  . socket_addrinfo_lookup throws an exception on invalid hints value types.
    (David Carlier)
  . socket_addrinfo_lookup throws an exception if any of the hints value
    overflows. (David Carlier)
  . socket_addrinfo_lookup throws an exception if one or more hints entries
    has an index as numeric. (David Carlier)
  . socket_set_option with the options MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP
    will throw an exception if its value is not a valid array/object.
    (David Carlier)
  . socket_getsockname/socket_create/socket_bind handled AF_PACKET family socket.
    (David Carlier)
  . Added IP_BINDANY for a socket to bind to any address. (David Carlier)
  . Added SO_BUSY_POOL to reduce packets poll latency. (David Carlier)
  - Added UDP_SEGMENT support to optimise multiple large datagrams over UDP
    if the kernel and hardware supports it. (David Carlier)
  - Added SHUT_RD, SHUT_WR and SHUT_RDWR constants for socket_shutdown().
    (David Carlier)

- Sodium:
  . Fix overall theorical overflows on zend_string buffer allocations.
    (David Carlier/nielsdos)

- Sqlite:
  . Added Sqlite3Stmt::busy to check if a statement is still being executed.
    (David Carlier)
  . Added Sqlite3Stmt::explain to produce a explain query plan from
    the statement. (David Carlier)
  . Added Sqlite3Result::fetchAll to returns all results at once from a query.
    (David Carlier)

- Standard:
  . Fixed crypt() tests on musl when using --with-external-libcrypt
    (Michael Orlitzky).
  . Fixed bug GH-18062 (is_callable(func(...), callable_name: $name) for first
    class callables returns wrong name). (timwolla)
  . Added array_first() and array_last(). (nielsdos)
  . Fixed bug GH-18823 (setlocale's 2nd and 3rd argument ignores strict_types).
    (nielsdos)
  . Fixed exit code handling of sendmail cmd and added warnings.
    (Jesse Hathaway)
  . Fixed bug GH-18897 (printf: empty precision is interpreted as precision 6,
    not as precision 0). (nielsdos)

- Streams:
  . Fixed bug GH-16889 (stream_select() timeout useless for pipes on Windows).
    (cmb)

- Tests:
  . Allow to shuffle tests even in non-parallell mode. (dhuang00)

- Tidy:
  . tidy::__construct/parseFile/parseString methods throw an exception if
    the configuration argument is invalid. (David Carlier)

- Windows:
  . Fixed bug GH-10992 (Improper long path support for relative paths). (cmb,
    nielsdos)
  . Fixed bug GH-16843 (Windows phpize builds ignore source subfolders). (cmb)

- XMLWriter:
  . Improved performance and reduce memory consumption. (nielsdos)

- XSL:
  . Implement request #30622 (make $namespace parameter functional). (nielsdos)

- Zlib:
  . gzfile, gzopen and readgzfile, their "use_include_path" argument
    is now a boolean. (David Carlier)
  . Fixed bug GH-16883 (gzopen() does not use the default stream context when
    opening HTTP URLs). (nielsdos)
  . Implemented GH-17668 (zlib streams should support locking). (nielsdos)


<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>>
