A specialized VM opcode for the array_key_exists function has been added, which improves performance of this function if it can be statically resolved. In namespaced code, this may require writing \array_key_exists() or explicitly importing the function.
When preg_match in UTF-8 mode ("u" modifier) is repeatedly called on the same string (but possibly different offsets), it will only be checked for UTF-8 validity once.
zend.exception_ignore_args is a new INI directive for including or excluding arguments from stack traces generated from exceptions.
opcache.preload_user is a new INI directive for specifying the user account under which preloading code is execute if it would otherwise be run as root (which is not allowed for security reasons).
A number of extensions have been migrated to exclusively use pkg-config for the detection of library dependencies. Generally, this means that instead of using --with-foo-dir=DIR or similar only --with-foo is used. Custom library paths can be specified either by adding additional directories to PKG_CONFIG_PATH or by explicitly specifying compilation options through FOO_CFLAGS and FOO_LIBS.
The following extensions and SAPIs are affected:
- --with-curl no longer accepts a directory.
- --with-enchant no longer accepts a directory.
- --with-fpm-systemd now uses only pkg-config for libsystem checks. The libsystemd minimum required version is 209.
- --with-gd becomes --enable-gd (whether to enable the extension at all) and --with-external-gd (to opt into using an external libgd, rather than the bundled one).
- --with-png-dir has been removed. libpng is required.
- --with-zlib-dir has been removed. zlib is required.
- --with-freetype-dir becomes --with-freetype
- --with-jpeg-dir becomes --with-jpeg
- --with-webp-dir becomes --with-webp
- --with-xpm-dir becomes --with-xpm
- --with-kerberos-systemd no longer accepts a directory.
- --with-icu-dir has been removed. If --enable-intl is passed, then libicu is always required.
- --with-ldap-sasl no longer accepts a directory.
- --with-libxml-dir has been removed.
- --enable-libxml becomes --with-libxml.
- --with-libexpat-dir has been renamed to --with-expat and no longer accepts a directory.
- --with-litespeed becomes --enable-litespeed.
- --with-onig has been removed. Unless --disable-mbregex has been passed, libonig is required.
- --with-iodbc no longer accepts a directory.
- --with-unixODBC without a directory now uses pkg-config (preferred). Directory is still accepted for old versions without libodbc.pc.
- --with-openssl no longer accepts a directory.
- --with-pcre-regex has been removed. Instead --with-external-pcre is provided to opt into using an external PCRE library, rather than the bundled one.
- --with-pdo-sqlite no longer accepts a directory.
- --with-libedit no longer accepts a directory.
- --with-sodium no longer accepts a directory.
- --with-sqlite3 no longer accepts a directory.
- --with-xsl no longer accepts a directory.
- --with-libzip has been removed.
- --enable-zip becomes --with-zip.
fputcsv, fgetcsv, SplFileObject::fputcsv, SplFileObject::fgetcsv, and SplFileObject::setCsvControl now accept an empty string as $escape argument, which disables the proprietary PHP escaping mechanism.
The behavior of str_getcsv has been adjusted accordingly (formerly, an empty string was identical to using the default).
SplFileObject::getCsvControl now may also return an empty string for the third array element, accordingly.
The filter extension no longer exposes --with-pcre-dir for Unix builds and can now reliably be built as shared when using ./configure
The behavior of imagecropauto in the bundled libgd has been synced with that of system libgd:
IMG_CROP_DEFAULTis no longer falling back to
- Threshold-cropping now uses the algorithm of system libgd
The default $mode parameter of imagecropauto has been changed to
IMG_CROP_DEFAULT; passing -1 is now deprecated.
imagescale now supports aspect ratio preserving scaling to a fixed height by passing -1 as $new_width.
The intl extension now requires at least ICU 50.1.
ResourceBundle now implements Countable.
Support for nsldap and umich_ldap has been removed.
All libxml-based extensions now require libxml 2.7.6 or newer.
The oniguruma library is no longer bundled with PHP, instead libonig needs to be available on the system. Alternatively --disable-mbregex can be used to disable the mbregex component.
The --disable-opcache-file and --enable-opcache-file configure options have been removed in favor of the opcache.file_cache INI directive.
The password_hash and functions now accept nullable string and integer for $algo argument.
Installation of PEAR (including PECL) is no longer enabled by default. It can be explicitly enabled using --with-pear. This option is deprecated and may be removed in the future.
The numeric values of the modifier constants (IS_ABSTRACT, IS_DEPRECATED, IS_EXPLICIT_ABSTRACT, IS_FINAL, IS_IMPLICIT_ABSTRACT, IS_PRIVATE, IS_PROTECTED, IS_PUBLIC, and IS_STATIC) on the ReflectionClass, ReflectionFunction, ReflectionMethod, ReflectionObject, and ReflectionProperty classes have changed.
SimpleXMLElement now implements Countable.
Serialization and unserialization of SQLite3, SQLite3Stmt and SQLite3Result is now explicitly forbidden. Formerly, serialization of instances of these classes was possible, but unserialization yielded unusable objects.
The @param notation can now also be used to denote SQL query parameters.
The bundled libzip library has been removed. A system libzip >= 0.11 is now necessary to build the zip extension.