Skip to content

PHP 8.5 documentation tracker #4886

@DanielEScherzer

Description

@DanielEScherzer

Pages which need to be added/modified for complete documentation of PHP 8.5:

Note

This issue is still a Work In Progress

Important

Priority should be given to documenting Core language and ext/standard behavioral changes

Migration Guide

Core

Backward Incompatible Changes

Deprecations

INI changes

New classes ✅

Details - [x] `NoDiscard` attribute was added. RFC: https://wiki.php.net/rfc/marking_return_value_as_important #5041 - [x] `DelayedTargetValidation` attribute was added. RFC: https://wiki.php.net/rfc/delayedtargetvalidation_attribute (#5457)

New functions ✅

Details

New global constants ✅

Details

New features

Other changes

  • The high resolution timer (hrtime()) on macOS now uses the recommended clock_gettime_nsec_np(CLOCK_UPTIME_RAW) API instead of mach_absolute_time().

New warnings and exceptions

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.

FileInfo:

  • finfo_file() and finfo::file() now throws a ValueError instead of a TypeError when $filename contains nul bytes. This aligns the type of Error thrown to be consistent with the rest of the language.

Intl

  • IntlDateFormatter::setTimeZone()/datefmt_set_timezone() throws an IntlException on uninitialised classes/clone failures.
  • Locale:: methods throw a ValueError when locale inputs contain null bytes.

LDAP:

  • ldap_get_option() and ldap_set_option() now throw a ValueError when passing an invalid option.

MySQLi:

  • Calling the mysqli constructor on an already-constructed object is now no longer possible and throws an Error.

PCNTL:

  • pcntl_exec() now throws ValueErrors when entries of the $args parameter contain null bytes.
  • pcntl_exec() now throws ValueErrors when entries or keys of the $env_vars parameter contain null bytes.

PDO

  • Attempting to call PDOStatement::setFetchMode during a call to PDO::fetch(), PDO::fetchObject(), PDO::fetchAll(), for example using tricks such as passing the statement object as a constructor argument when fetching into an object, will now throw an Error.
  • A ValueError is now thrown if PDO::FETCH_PROPS_LATE is used with a fetch mode different than PDO::FETCH_CLASS, consistent with other fetch flags.
  • A ValueError is now thrown if PDO::FETCH_INTO is used as a fetch mode in PDO::fetchAll(), similar to PDO::FETCH_LAZY.

PDO_FIREBIRD

  • A ValueError is now thrown when trying to set a cursor name that is too long on a PDOStatement resulting from the Firebird driver.

PDO_SQLITE:

  • SQLite PDO::quote() will now throw an exception or emit a warning, depending on the error mode, if the string contains a null byte.
  • PDO::sqliteCreateCollation will now throw an exception if the callback has the wrong return type, making it more in line with Pdo_Sqlite::createCollation behavior.

POSIX ✅

Details

Session

  • Attempting to write session data where $_SESSION has a key containing the pipe character will now emit a warning instead of silently failing.
  • session_start is stricter in regard to the option argument. It throws a ValueError if the whole is not a hashmap or a TypeError if read_and_close value is not a valid type compatible with int.

SimpleXML

  • Passing an XPath expression that returns something other than a node set to SimpleXMLElement::xpath() will now emit a warning and return false, instead of silently failing and returning an empty array.

SNMP✅

Details
  • snmpget, snmpset, snmp_get2, snmp_set2, snmp_get3, snmp_set3 and SNMP::__construct() throw a ValueError when the hostname is too large, contains any null byte or if the port is given when negative or greater than 65535, timeout and retries values are lower than -1 or too large. SNMP: add changelog for PHP 8.5 ValueError validation #5533

Sockets ✅

Details

Tidy

  • tidy::__construct/parseFile/parseString now throws a ValueError if the configuration contains an invalid or set a read-only internal entry, a TypeError contains, at least, one element when the key is not a string.

New extensions

Lexbor

  • An always enabled lexbor extension is added. It contains the lexbor library that was separated from ext/dom for being reused among other extensions. The new extension is not directly exposed to userland.

URI ✅

Details - [x] An always enabled uri extension is added that can be used for handling URIs and URLs according to RFC 3986 and WHATWG URL. RFC: https://wiki.php.net/rfc/url_parsing_api - [x] New classes (#5392) - [x] `Uri\UriException` (#5466) - [x] `Uri\InvalidUriException` (#5466) - [x] `Uri\UriComparisonMode` (#5476) - [x] `Uri\Rfc3986\Uri` (#5392) - [x] `Uri\WhatWg\InvalidUrlException` (#5466) - [x] `Uri\WhatWg\UrlValidationErrorType` (#5474) - [x] `Uri\WhatWg\UrlValidationError` (#5472) - [x] `Uri\WhatWg\Url` (#5392)

SAPI changes

CLI ✅

Details - [x] Trying to set a process title that is too long with `cli_set_process_title()` will now fail instead of silently truncating the given title. (#5077) - [x] Added a new `--ini=diff` option to print INI settings changed from the builtin default. (#5077)

CLI/CGI ✅

Details - [x] The `-z` or `--zend-extension` option has been removed as it was non-functional. Use `-d zend_extension=` instead. (#5077)

FPM

  • FPM with httpd ProxyPass decodes the full script path. Added fastcgi.script_path_encoded INI setting to prevent this new behavior.
  • FPM access log limit now respects log_limit value.

Extension changes

Curl

  • Deprecations
  • New classes
  • New functions
  • New global constants
    • CURLINFO_USED_PROXY.
    • CURLINFO_HTTPAUTH_USED.
    • CURLINFO_PROXYAUTH_USED.
    • CURLINFO_CONN_ID.
    • CURLINFO_QUEUE_TIME_T.
    • CURLOPT_INFILESIZE_LARGE.
    • CURLFOLLOW_ALL.
    • CURLFOLLOW_OBEYCODE.
    • CURLFOLLOW_FIRSTONLY.
  • Other changes
    • curl_easy_setopt with CURLOPT_FOLLOWLOCATION option's value no longer is treated as boolean but integer to handle CURLFOLLOW_OBEYCODE and CURLFOLLOW_FIRSTONLY.
    • Added support for share handles that are persisted across multiple PHP requests, safely allowing for more effective connection reuse. RFC: https://wiki.php.net/rfc/curl_share_persistence_improvement
    • Added support for CURLINFO_USED_PROXY (libcurl >= 8.7.0), CURLINFO_HTTPAUTH_USED, and CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0) to the curl_getinfo() function. When curl_getinfo() returns an array, the same information is available as "used_proxy", "httpauth_used", and "proxyauth_used" keys. CURLINFO_USED_PROXY gets zero set if no proxy was used in the previous transfer or a non-zero value if a proxy was used. CURLINFO_HTTPAUTH_USED and CURLINFO_PROXYAUTH_USED get bitmasks indicating the HTTP and proxy authentication methods that were used in the previous request. See CURLAUTH_* constants for possible values.
    • Added CURLOPT_INFILESIZE_LARGE Curl option, which is a safe replacement for CURLOPT_INFILESIZE. On certain systems, CURLOPT_INFILESIZE only accepts a 32-bit signed integer as the file size (2.0 GiB) even on 64-bit systems. CURLOPT_INFILESIZE_LARGE accepts the largest integer value the system can handle.
    • Added CURLFOLLOW_OBEYCODE, CURLFOLLOW_FIRSTONLY and CURLFOLLOW_ALL values for CURLOPT_FOLLOWLOCATION curl_easy_setopt option. CURLFOLLOW_OBEYCODE to follow more strictly in regard to redirect if they are allowed. CURLFOLLOW_FIRSTONLY to follow only the first redirect thus if there is any follow up redirect, it won't go any further. CURLFOLLOW_ALL is equivalent to setting CURLOPT_FOLLOWLOCATION to true.
    • Added support for CURLINFO_CONN_ID (libcurl >= 8.2.0) to the curl_getinfo() function. This constant allows retrieving the unique ID of the connection used by a cURL transfer. It is primarily useful when connection reuse or connection pooling logic is needed in PHP-level applications. When curl_getinfo() returns an array, this value is available as the "conn_id" key.
    • Added support for CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0) to the curl_getinfo() function. This constant allows retrieving the time (in microseconds) that the request spent in libcurl’s connection queue before it was sent. This value can also be retrieved by passing CURLINFO_QUEUE_TIME_T to the curl_getinfo() $option parameter.
    • Added support for CURLOPT_SSL_SIGNATURE_ALGORITHMS to specify the signature algorithms to use for TLS.

Date

DOM

  • BC breaks
    • Cloning a DOMNamedNodeMap, DOMNodeList, Dom\NamedNodeMap, Dom\NodeList, Dom\HTMLCollection, and Dom\DtdNamedNodeMap now fails. This never actually resulted in a working object, so the impact should actually be zero.
  • New functions
    • Added Dom\Element::getElementsByClassName().
    • Added Dom\Element::insertAdjacentHTML().
  • Other changes
    • Added Dom\Element::$outerHTML.
    • Added $children property to Dom\ParentNode implementations.

Enchant

  • New functions
    • Added enchant_dict_remove_from_session() to remove a word added to the spellcheck session via enchant_dict_add_to_session().
    • Added enchant_dict_remove() to put a word on the exclusion list and remove it from the session dictionary.

Exif

FileInfo

Filter

GD: ✅

Details

Hash

Intl

  • BC breaks
    • The extension now requires at least ICU 57.1.
    • The behaviour of Collator::SORT_REGULAR with respect to handling numeric strings is now aligned with the behaviour of SORT_REGULAR in ext/standard. This is a consequence of fixing bug [intl] Weird numeric sort in Collator php-src#18566.
  • Deprecations
  • New classes
    • Added IntlListFormatter class to format, order, and punctuate a list of items with a given locale, IntlListFormatter::TYPE_AND, IntlListFormatter::TYPE_OR, IntlListFormatter::TYPE_UNITS operands and IntlListFormatter::WIDTH_WIDE, IntlListFormatter::WIDTH_SHORT and IntlListFormatter::WIDTH_NARROW widths. It is supported from icu 67.
  • New functions
  • New class constants
    • Added class constants NumberFormatter::CURRENCY_ISO, NumberFormatter::CURRENCY_PLURAL, NumberFormatter::CASH_CURRENCY, and NumberFormatter::CURRENCY_STANDARD for various currency-related number formats.
  • New global constants
    • DECIMAL_COMPACT_SHORT.
    • DECIMAL_COMPACT_LONG.
  • Other changes
    • grapheme_extract() properly assigns $next value when skipping over invalid starting bytes. Previously there were cases where it would point to the start of the grapheme boundary instead of the end.
    • transliterator_get_error_code(), transliterator_get_error_message() TransLiterator::getErrorCode(), and TransLiterator::getErrorMessage() have dropped the false from the return type union. Returning false was actually never possible.
    • grapheme_strpos(), grapheme_stripos(), grapheme_strrpos(), grapheme_strripos(), grapheme_strstr(), grapheme_stristr() and grapheme_levenshtein() functions add $locale parameter. RFC: https://wiki.php.net/rfc/grapheme_add_locale_for_case_insensitive
    • Intl's internal error mechanism has been modernized so that it indicates more accurately which call site caused what error. Moreover, some ext/date exceptions have been wrapped inside a IntlException now.

LDAP

  • Deprecations
  • Other changes
    • ldap_get_option() now accepts a NULL connection, as ldap_set_option(), to allow retrieval of global options.

libxml

  • Other changes
    • libxml_set_external_entity_loader() now has a formal return type of true.

MBstring

  • BC breaks
    • Unicode data tables have been updated to Unicode 17.0

MySQLi

ODBC

  • BC breaks
    • ODBC now assumes that at least ODBC 3.5 functionality is available. The ODBCVER definition and build system flags to control it have been removed.
    • ODBC no longer has build flags to build against specific drivers (except for DB2) and removes special cases for those drivers. It is strongly recommended to use a driver manager like iODBC or unixODBC on non-Windows.

Opcache

  • BC breaks
    • The Opcache extension is now always built into the PHP binary and is always loaded. The INI directives opcache.enable and opcache.enable_cli are still honored. The --enable-opcache/--disable-opcache configure flags have been removed, and the build does not produce opcache.so or php_opcache.dll objects anymore. Using zend_extension=opcache.so or zend_extension=php_opcache.dll INI directives will emit a warning.
  • INI changes
    • 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.
    • The default value of opcache.jit_hot_loop is now 61 (a prime) to prevent it from being a multiple of loop iteration counts. It is recommended that this parameter is set to a prime number. Update opcache.jit_hot_loop #4685
    • Changing opcache.memory_consumption when OPcache SHM is already set up will now correctly report a failure instead of silently doing nothing and showing misleading values in PHPInfo.
  • New functions
    • Added opcache_is_script_cached_in_file_cache().
  • Other changes
    • The Opcache extension is now always built into the PHP binary and is always loaded. The INI directives opcache.enable and opcache.enable_cli are still honored.

OpenSSL

  • Deprecations
  • INI changes
    • Added openssl.libctx to select the OpenSSL library context type. Either custom libctx for each thread can be used or a single global (default) libctx is used. Document openssl.libctx INI #5033
  • New global constants
    • OPENSSL_PKCS1_PSS_PADDING
    • PKCS7_NOSMIMECAP
    • PKCS7_CRLFEOL
    • PKCS7_NOCRL
    • PKCS7_NO_DUAL_CONTENT
  • Other changes
    • openssl_public_encrypt() and openssl_private_decrypt() have new parameter $digest_algo that allows specifying hash digest algorithm for OEAP padding.
    • openssl_sign() and openssl_verify() have new parameter $padding to allow using more secure RSA PSS padding.
    • openssl_cms_encrypt() $cipher_algo parameter can be a string with the cipher name. That allows to use more algorithms including AES GCM cipher algorithms for auth enveloped data.

PCNTL

  • Other changes
    • pcntl_exec() now has a formal return type of false.
    • pcntl_waitid() takes an additional resource_usage argument to gather various platform specific metrics about the child process.

PCRE

PDO

List of affected constants and their replacement:
  • PDO::DBLIB_ATTR_CONNECTION_TIMEOUT => Pdo\Dblib::ATTR_CONNECTION_TIMEOUT
  • PDO::DBLIB_ATTR_QUERY_TIMEOUT => Pdo\Dblib::ATTR_QUERY_TIMEOUT
  • PDO::DBLIB_ATTR_STRINGIFY_UNIQUEIDENTIFIER => Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER
  • PDO::DBLIB_ATTR_VERSION => Pdo\Dblib::ATTR_VERSION
  • PDO::DBLIB_ATTR_TDS_VERSION => Pdo\Dblib::ATTR_TDS_VERSION
  • PDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS => Pdo\Dblib::ATTR_SKIP_EMPTY_ROWSETS
  • PDO::DBLIB_ATTR_DATETIME_CONVERT => Pdo\Dblib::ATTR_DATETIME_CONVERT
  • PDO::FB_ATTR_DATE_FORMAT => Pdo\Firebird::ATTR_DATE_FORMAT
  • PDO::FB_ATTR_TIME_FORMAT => Pdo\Firebird::ATTR_TIME_FORMAT
  • PDO::FB_ATTR_TIMESTAMP_FORMAT => Pdo\Firebird::ATTR_TIMESTAMP_FORMAT
  • PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => Pdo\Mysql::ATTR_USE_BUFFERED_QUERY
  • PDO::MYSQL_ATTR_LOCAL_INFILE => Pdo\Mysql::ATTR_LOCAL_INFILE
  • PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY => Pdo\Mysql::ATTR_LOCAL_INFILE_DIRECTORY
  • PDO::MYSQL_ATTR_INIT_COMMAND => Pdo\Mysql::ATTR_INIT_COMMAND
  • PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => Pdo\Mysql::ATTR_MAX_BUFFER_SIZE
  • PDO::MYSQL_ATTR_READ_DEFAULT_FILE => Pdo\Mysql::ATTR_READ_DEFAULT_FILE
  • PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => Pdo\Mysql::ATTR_READ_DEFAULT_GROUP
  • PDO::MYSQL_ATTR_COMPRESS => Pdo\Mysql::ATTR_COMPRESS
  • PDO::MYSQL_ATTR_DIRECT_QUERY => Pdo\Mysql::ATTR_DIRECT_QUERY
  • PDO::MYSQL_ATTR_FOUND_ROWS => Pdo\Mysql::ATTR_FOUND_ROWS
  • PDO::MYSQL_ATTR_IGNORE_SPACE => Pdo\Mysql::ATTR_IGNORE_SPACE
  • PDO::MYSQL_ATTR_SSL_KEY => Pdo\Mysql::ATTR_SSL_KEY
  • PDO::MYSQL_ATTR_SSL_CERT => Pdo\Mysql::ATTR_SSL_CERT
  • PDO::MYSQL_ATTR_SSL_CA => Pdo\Mysql::ATTR_SSL_CA
  • PDO::MYSQL_ATTR_SSL_CAPATH => Pdo\Mysql::ATTR_SSL_CAPATH
  • PDO::MYSQL_ATTR_SSL_CIPHER => Pdo\Mysql::ATTR_SSL_CIPHER
  • PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => Pdo\Mysql::ATTR_SSL_VERIFY_SERVER_CERT
  • PDO::MYSQL_ATTR_SERVER_PUBLIC_KEY => Pdo\Mysql::ATTR_SERVER_PUBLIC_KEY
  • PDO::MYSQL_ATTR_MULTI_STATEMENTS => Pdo\Mysql::ATTR_MULTI_STATEMENTS
  • PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => Pdo\Odbc::ATTR_USE_CURSOR_LIBRARY
  • PDO::ODBC_ATTR_ASSUME_UTF8 => Pdo\Odbc::ATTR_ASSUME_UTF8
  • PDO::ODBC_SQL_USE_IF_NEEDED => Pdo\Odbc::SQL_USE_IF_NEEDED
  • PDO::ODBC_SQL_USE_DRIVER => Pdo\Odbc::SQL_USE_DRIVER
  • PDO::ODBC_SQL_USE_ODBC => Pdo\Odbc::SQL_USE_ODBC
  • PDO::PGSQL_ATTR_DISABLE_PREPARES => Pdo\Pgsql::ATTR_DISABLE_PREPARES
  • PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES => Pdo\Sqlite::ATTR_EXTENDED_RESULT_CODES
  • PDO::SQLITE_ATTR_OPEN_FLAGS => Pdo\Sqlite::OPEN_FLAGS
  • PDO::SQLITE_ATTR_READONLY_STATEMENT => Pdo\Sqlite::ATTR_READONLY_STATEMENT
  • PDO::SQLITE_DETERMINISTIC => Pdo\Sqlite::DETERMINISTIC
  • PDO::SQLITE_OPEN_READONLY => Pdo\Sqlite::OPEN_READONLY
  • PDO::SQLITE_OPEN_READWRITE => Pdo\Sqlite::OPEN_READWRITE
  • PDO::SQLITE_OPEN_CREATE => Pdo\Sqlite::OPEN_CREATE
List of affected methods and their replacement:
  • PDO::pgsqlCopyFromArray() => Pdo\Pgsql::copyFromArray()
  • PDO::pgsqlCopyFromFile() => Pdo\Pgsql::copyFromFile()
  • PDO::pgsqlCopyToArray() => Pdo\Pgsql::copyToArray()
  • PDO::pgsqlCopyToFile() => Pdo\Pgsql::copyToFile()
  • PDO::pgsqlGetNotify() => Pdo\Pgsql::getNotify()
  • PDO::pgsqlGetPid() => Pdo\Pgsql::getPid()
  • PDO::pgsqlLOBCreate() => Pdo\Pgsql::lobCreate()
  • PDO::pgsqlLOBOpen() => Pdo\Pgsql::lobOpen()
  • PDO::pgsqlLOBUnlink() => Pdo\Pgsql::lobUnlink()
  • PDO::sqliteCreateAggregate() => Pdo\Sqlite::createAggregate()
  • PDO::sqliteCreateCollation() => Pdo\Sqlite::createCollation()
  • PDO::sqliteCreateFunction() => Pdo\Sqlite::createFunction()

PDO_ODBC

PDO_PGSQL

  • Deprecations
  • Other changes
    • 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 in parallel.

PDO_SQLite

  • New functions
    • Added support for Pdo\Sqlite::setAuthorizer(), which is the equivalent of SQLite3::setAuthorizer(). The only interface difference is that the pdo version returns void.
  • New class constants
    • Added class constant Pdo_Sqlite::ATTR_BUSY_STATEMENT.
    • Added class constants Pdo_Sqlite::ATTR_EXPLAIN_STATEMENT, Pdo_Sqlite::EXPLAIN_MODE_PREPARED, Pdo_Sqlite::EXPLAIN_MODE_EXPLAIN, Pdo_Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN.
  • Other changes
    • Increased minimum release version support from 3.7.7 to 3.7.17.
    • Added PDO\Sqlite::ATTR_TRANSACTION_MODE connection attribute with possible values PDO\Sqlite::TRANSACTION_MODE_DEFERRED, PDO\Sqlite::TRANSACTION_MODE_IMMEDIATE, and PDO\Sqlite::TRANSACTION_MODE_EXCLUSIVE, allowing to configure the transaction mode to use when calling beginTransaction().

PGSQL

  • New functions
    • 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.
    • pg_service returns the ongoing service name of the connection.
  • Other changes
    • pg_copy_from also supports inputs as Iterable.
    • pg_connect checks if the connection_string argument contains any null byte.
    • pg_close_stmt checks if the statement_name argument contains any null byte.

POSIX

Readline

  • Other changes
    • The return types of readline_add_history(), readline_clear_history(), and readline_callback_handler_install() have been changed to true, rather than bool.

Reflection

Session

  • Other changes
    • session_set_cookie_params(), session_get_cookie_params(), and session_start() now support partitioned cookies via the "partitioned" key. RFC: https://wiki.php.net/rfc/CHIPS

SOAP

  • Other changes
    • Enumeration cases are now dumped in __getTypes().
    • Implemented request #61105: support for Soap 1.2 Reason Text xml:lang attribute. The signature of SoapFault::__construct() and SoapServer::fault() therefore now have an optional $lang parameter. This support solves compatibility with .NET SOAP clients.

Sockets

SPL

Sqlite

  • New functions
    • Sqlite3Stmt::busy to check if a statement had been fetched but not completely.
  • New class constants
    • Added class constants Sqlite3Stmt::EXPLAIN_MODE_PREPARED, Sqlite3Stmt::EXPLAIN_MODE_EXPLAIN and Sqlite3Stmt::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN.

Standard

Tokenizer✅

Details

XML✅

Details

XSL

  • Other changes
    • 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.

Zlib

  • Other changes
    • The "use_include_path" argument for the gzfile, gzopen and readgzfile functions had been changed from int to boolean.
    • gzfile, gzopen and readgzfile functions now respect the default stream context.
    • flock() is now supported on zlib streams. Previously, this always failed to perform any locking action.

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-sanitizer is now supported for MSVC builds. This enables ASan and debug assertions, and is supported as of MSVC 16.10 and Windows 10.
  • The --with-uncritical-warn-choke configuration option for clang builds is no longer supported. Select warnings to suppress via CFLAGS instead.
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions