# Other Changes

## PHP Core

### Set(raw)cookie accepts \$option Argument

`setcookie` and `setrawcookie` now also support the following signature: `bool`setcookie `string``name` `string``value`"" `array``options`\[\] where `$options` is an associative array which may have any of the keys `"expires"`, `"path"`, `"domain"`, `"secure"`, `"httponly"` and `"samesite"`.

### New Syslog ini Directives

The following ini Directives have been added to customize logging, if [error_log](#ini.error-log) is set to `syslog`:

[syslog.facility](#ini.syslog.facility)  
Specifies what type of program is logging the message.

[syslog.filter](#ini.syslog.filter)  
Specifies the filter type to filter the logged messages, with the supported filter types - `all`, `no-ctrl` and `ascii`. Starting with PHP 7.3.8, `raw` is also available, restoring the way syslog behaved in previous PHP versions. This filter will also affect calls to `syslog`.

[syslog.ident](#ini.syslog.ident)  
Specifies the ident string which is prepended to every message.

### Garbage Collection

The [cyclic GC](#features.gc.collecting-cycles) has been enhanced, which may result in considerable performance improvements.

### Miscellaneous

`var_export` now exports `stdClass` objects as an array cast to an object (`(object) array( ... )`), rather than using the nonexistent method stdClass::\_\_setState.

`debug_zval_dump` was changed to display recursive arrays and objects in the same way as `var_dump`. Now, it doesn't display them twice.

`array_push` and `array_unshift` can now also be called with a single argument, which is particularly convenient wrt. the spread operator.

## Interactive PHP Debugger

The unused constants `PHPDBG_FILE`, `PHPDBG_METHOD`, `PHPDBG_LINENO` and `PHPDBG_FUNC` have been removed.

## FastCGI Process Manager

The `getallheaders` function is now also available.

## Client URL Library

libcurl ≥ 7.15.5 is now required.

## Data Filtering

`FILTER_VALIDATE_FLOAT` now also supports a `thousand` option, which defines the set of allowed thousand separator chars. The default (`"',."`) is fully backward compatible with former PHP versions.

`FILTER_SANITIZE_ADD_SLASHES` has been added as an alias of the `magic_quotes` filter (`FILTER_SANITIZE_MAGIC_QUOTES`). The `magic_quotes` filter is subject to removal in future versions of PHP.

## FTP

The default transfer mode has been changed to `binary`.

## Internationalization Functions

`Normalizer::NONE` is deprecated, when PHP is linked with ICU ≥ 56.

Introduced `Normalizer::FORM_KC_CF` as Normalizer::normalize argument for `NFKC_Casefold` normalization; available when linked with ICU ≥ 56.

## JavaScript Object Notation

A new flag has been added, `JSON_THROW_ON_ERROR`, which can be used with `json_decode` or `json_encode` and causes these functions to throw the new `JsonException` upon an error, instead of setting the global error state that is retrieved with `json_last_error` and `json_last_error_msg`. `JSON_PARTIAL_OUTPUT_ON_ERROR` takes precedence over `JSON_THROW_ON_ERROR`.

## Multibyte String

The configuration option `--with-libmbfl` is no longer available.

## ODBC (Unified)

Support for `ODBCRouter` and `Birdstep` including the `birdstep.max_links` ini directive has been removed.

## OPcache

The `opcache.inherited_hack` ini directive has been removed. The value has already been ignored since PHP 5.3.0.

## OpenSSL

The `min_proto_version` and `max_proto_version` ssl stream options as well as related constants for possible TLS protocol values have been added.

## Regular Expressions (Perl-Compatible)

The [PCRE extension](#book.pcre) has been upgraded to PCRE2, which may cause minor behavioral changes (for instance, character ranges in classes are now more strictly interpreted), and augments the existing regular expression syntax.

`preg_quote` now also escapes the `'#'` character.

## Microsoft SQL Server and Sybase Functions (PDO_DBLIB)

The attribute `PDO::DBLIB_ATTR_SKIP_EMPTY_ROWSETS` to enable automatic skipping of empty rowsets has been added.

The `PDO::DBLIB_ATTR_TDS_VERSION` attribute which exposes the TDS version has been added.

DATETIME2 columns are now treated like DATETIME columns.

## SQLite Functions (PDO_SQLITE)

SQLite3 databases can now be opened in read-only mode by setting the new `PDO::SQLITE_ATTR_OPEN_FLAGS` attribute to `PDO::SQLITE_OPEN_READONLY`.

## Session Handling

`session_set_cookie_params` now also supports the following signature: `bool`session_set_cookie_params `array``options` where `$options` is an associative array which may have any of the keys `"lifetime"`, `"path"`, `"domain"`, `"secure"`, `"httponly"` and `"samesite"`. Accordingly, the return value of `session_get_cookie_params` now also has an element with the key `"samesite"`. Furthermore, the new `session.cookie_samesite` ini option to set the default of the SameSite directive for cookies has been added. It defaults to `""` (empty string), so no SameSite directive is set. Can be set to `"Lax"` or `"Strict"`, which sets the respective SameSite directive.

## Tidy

Building against [tidyp](ENTITY) is now also supported transparently. Since tidyp offers no API to get the release date, `tidy_get_release` and tidy::getRelease return `'unknown'` in this case.

## XML Parser

The return value of the `xml_set_external_entity_ref_handler` callback is no longer ignored if the extension has been built against libxml. Formerly, the return value has been ignored, and parsing did never stop.

## Zip

Building against the bundled libzip is discouraged, but still possible by adding `--without-libzip` to the configuration.

## Zlib Compression

The zlib/level context option for the [compress.zlib wrapper](#wrappers.compression) to facilitate setting the desired compression level has been added.