PHP RFC: Remove deprecated functionality in PHP 7
- Date: 2014-09-11
- Author: Nikita Popov nikic@php.net
- Status: Implemented (PHP 7.0)
- Targeting: PHP 7
- Discussion: http://markmail.org/message/vcladdh5sciqjpvg
Introduction
This RFC proposes to remove functionality which has been deprecated during the 5.x cycle.
The following extensions are deprecated:
- ext/ereg (since PHP 5.3; use ext/pcre instead) REMOVED (PECL extension)
- ext/mysql (since PHP 5.5; use ext/mysqli or ext/pdo_mysql instead) REMOVED (PECL extension)
The following language features are deprecated:
- Assignment of
new
by reference (since PHP 5.3; use normal assignment instead) REMOVED - Scoped calls of non-static methods from incompatible
$this
context (since PHP 5.6) REMOVED
The following functions are deprecated:
dl
on fpm-fcgi (since PHP 5.3) REMOVEDmcrypt_ecb
,mcrypt_cbc
,mcrypt_cfb
andmcrypt_ofb
(since PHP 5.5, but documented as deprecated earlier; usemcrypt_encrypt
andmcrypt_decrypt
instead) REMOVEDdatefmt_set_timezone_id
andIntlDateFormatter::setTimeZoneID
(since PHP 5.5; usedatefmt_set_timezone
orIntlDateFormatter::setTimeZone
instead) REMOVED
The following ini options are deprecated:
iconv.input_encoding
,iconv.output_encoding
,iconv.internal_encoding
,mbstring.http_input
,mbstring.http_output
andmbstring.internal_encoding
(since PHP 5.6; usephp.input_encoding
,php.internal_encoding
andphp.output_encoding
instead) [TODO]
The following miscellaneous functionality is deprecated:
Patches and Tests
Note: Patches are very outdated. I'll update them after the votes.
- Removal of ext/ereg: https://github.com/php/php-src/pull/816
- Removal of everything else not marked with
[TODO]
: https://github.com/php/php-src/pull/815
Votes
Voting started on 2015-01-02 and ended on 2015-01-16. All votes refer to PHP 7.
All removals have been accepted.
ext/ereg
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.
ext/mysql
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.
Assignment of new by reference
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.
Scoped calls of non-static methods from incompatible $this context
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.
dl() on fpm-fcgi
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.
set_magic_quotes_runtime() and magic_quotes_runtime()
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.
Other deprecated functions
The following functions are deprecated:
set_socket_blocking
(since PHP 5.4; usestream_set_blocking
instead)mcrypt_generic_end
(since PHP 5.4; usemcrypt_generic_deinit
instead)mcrypt_ecb
,mcrypt_cbc
,mcrypt_cfb
andmcrypt_ofb
(since PHP 5.5, but documented as deprecated earlier; usemcrypt_encrypt
andmcrypt_decrypt
instead)datefmt_set_timezone_id
andIntlDateFormatter::setTimeZoneID
(since PHP 5.5; usedatefmt_set_timezone
orIntlDateFormatter::setTimeZone
instead)
These functions are just legacy aliases or quasi-aliases.
Vote: Requires simple majority.
xsl.security_prefs ini directive
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.
iconv and mbstring encoding ini directives
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.
$is_dst parameter of the mktime() and gmmktime() functions
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.
#-style comments in ini files
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.
String category names in setlocale()
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.
Unsafe curl file uploads
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.
preg_replace() eval modifier
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.
PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT driver option
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.
CN_match and SNI_server_name stream context options
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.