This RFC proposes to remove functionality which has been deprecated during the 5.x cycle.
The following extensions are deprecated:
The following language features are deprecated:
new
by reference (since PHP 5.3; use normal assignment instead) REMOVED$this
context (since PHP 5.6) REMOVEDThe following functions are deprecated:
dl
on fpm-fcgi (since PHP 5.3) REMOVEDmcrypt_ecb
, mcrypt_cbc
, mcrypt_cfb
and mcrypt_ofb
(since PHP 5.5, but documented as deprecated earlier; use mcrypt_encrypt
and mcrypt_decrypt
instead) REMOVEDdatefmt_set_timezone_id
and IntlDateFormatter::setTimeZoneID
(since PHP 5.5; use datefmt_set_timezone
or IntlDateFormatter::setTimeZone
instead) REMOVEDThe following ini options are deprecated:
iconv.input_encoding
, iconv.output_encoding
, iconv.internal_encoding
, mbstring.http_input
, mbstring.http_output
and mbstring.internal_encoding
(since PHP 5.6; use php.input_encoding
, php.internal_encoding
and php.output_encoding
instead) [TODO]The following miscellaneous functionality is deprecated:
Note: Patches are very outdated. I'll update them after the votes.
[TODO]
: https://github.com/php/php-src/pull/815Voting started on 2015-01-02 and ended on 2015-01-16. All votes refer to PHP 7.
All removals have been accepted.
The ereg extension has been deprecated since PHP 5.3. The PCRE extension should be used instead. PCRE provides better Unicode support and many more features in general. The ereg extension is effectively unmaintained currently.
If ext/ereg is removed as a bundled extension, it can still be made available as a PECL extension.
Vote: Requires simple majority.
The mysql extension has been deprecated since PHP 5.5. The mysqli or PDO extension should be used instead. The deprecation has been decided in mysql_deprecation, where a discussion of the reasons behind this decision can be found.
If ext/mysql is removed as a bundled extension, it can still be made available as a PECL extension.
Vote: Requires simple majority.
Since PHP 5.3 assignment of new
expressions by references is deprecated. It can be replaced with a normal assignment 1):
// Instead of $obj =& new ClassName; // Write $obj = new ClassName;
Assigning the return value by reference is no longer necessary since PHP 5.0.
Vote: Requires 2/3 majority.
Since PHP 5.5 scoped calls of non-static methods from incompatible $this
contexts are deprecated, while they already generated an E_STRICT
level error previously. The deprecation has been decided in incompat_ctx, where examples of this functionality can be found.
The RFC already specified that the functionality will be removed in the next version after deprecation, as such this vote may dropped.
Vote: Requires 2/3 majority.
Use of dl()
in the fpm-fcgi SAPI is deprecated since PHP 5.3.
Using the dl()
function in SAPIs that run more than one request has stability concerns. As such it has already been removed from other multi-request SAPIs, fpm-fcgi is the last one left.
Vote: Requires simple majority.
Support for magic quotes has been removed in PHP 5.4. To facilitate backwards compatibility the set_magic_quotes_runtime()
and magic_quotes_runtime()
functions have been retained, but deprecated. Attempting to enable magic quotes using them will result in a fatal error.
Vote: Requires simple majority.
The following functions are deprecated:
set_socket_blocking
(since PHP 5.4; use stream_set_blocking
instead)mcrypt_generic_end
(since PHP 5.4; use mcrypt_generic_deinit
instead)mcrypt_ecb
, mcrypt_cbc
, mcrypt_cfb
and mcrypt_ofb
(since PHP 5.5, but documented as deprecated earlier; use mcrypt_encrypt
and mcrypt_decrypt
instead)datefmt_set_timezone_id
and IntlDateFormatter::setTimeZoneID
(since PHP 5.5; use datefmt_set_timezone
or IntlDateFormatter::setTimeZone
instead)These functions are just legacy aliases or quasi-aliases.
Vote: Requires simple majority.
As a fix for CVE 2012-0057 (Bug #54446), which concerns reading and writing files using XSLT, the XsltProcessor::setSecurityPrefs()
method and xsl.security_prefs
ini directive have been added. The latter has been deprecated in PHP 5.4 to discourage global disabling of security features. Instead the setSecurityPrefs()
method should be used on individual XsltProcessor
instances where reading/writing files is necessary.
Vote: Requires simple majority.
The iconv.input_encoding
, iconv.output_encoding
, iconv.internal_encoding
, mbstring.http_input
, mbstring.http_output
and mbstring.internal_encoding
ini directives have been deprecated in PHP 5.6 by the default_encoding RFC. Instead the use of the more general php.input_encoding
, php.internal_encoding
and php.output_encoding
ini directives is suggested.
Vote: Requires simple majority.
The $is_dst
parameter of the mktime()
and gmmktime()
functions has been deprecated in PHP 5.1. Instead the timezone handling functions should be used.
Vote: Requires simple majority.
The standard ini file format uses ;
to denote comments. However PHP accidentially (?) also supported comments starting with #
in some circumstances. When this was discovered in PHP 5.3, they were deprecated.
Vote: Requires simple majority.
Since PHP 5.3 the use of string category names in setlocale()
is deprecated and the corresponding LC_*
constants should be used instead:
// Instead of setlocale('LC_ALL', 'de_DE'); // Write setlocale(LC_ALL, 'de_DE');
Vote: Requires simple majority.
As part of the curl-file-upload RFC, the CURLOPT_SAFE_UPLOAD
curl option has been introduced in PHP 5.5 to control whether the use of CURLFile
is required to upload files. Since PHP 5.6 the option defaults to true
.
For compatibility purposes the option will not be removed altogether, only the ability to set it to false
is removed.
Vote: Requires simple majority.
Due to security considerations the remove_preg_replace_eval_modifier RFC has deprecated the /e
(eval) modifier used by preg_replace()
in PHP 5.5. Instead preg_replace_callback
should be used.
Vote: Requires simple majority.
In PHP 5.6 the pgsql specific driver option PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT
was deprecated in favor of the more general PDO::ATTR_EMULATE_PREPARES
option.
Vote: Requires simple majority.
Since PHP 5.6 it is no longer necessary to explicitly specify the host name using the CN_match
and SNI_server_name
stream context options, it will be determined automatically instead. It is possible to manually specify a host name using the peer_name
context option, which covers both CN and SNI. The old, separate options have been deprecated.
Vote: Requires simple majority.