rfc:remove_deprecated_functionality_in_php7

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: PECL extension) 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 The following language features are deprecated: new by reference (since PHP 5.3; use normal assignment instead) Assignment ofby reference (since PHP 5.3; use normal assignment instead) REMOVED

$this context (since PHP 5.6) Scoped calls of non-static methods from incompatiblecontext (since PHP 5.6) REMOVED The following functions are deprecated: dl on fpm-fcgi (since PHP 5.3) on fpm-fcgi (since PHP 5.3) REMOVED

set_magic_quotes_runtime and magic_quotes_runtime (since PHP 5.4) and(since PHP 5.4) REMOVED

set_socket_blocking (since PHP 5.4; use stream_set_blocking instead) (since PHP 5.4; useinstead) REMOVED

mcrypt_generic_end (since PHP 5.4; use mcrypt_generic_deinit instead) (since PHP 5.4; useinstead) REMOVED

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) and(since PHP 5.5, but documented as deprecated earlier; useandinstead) REMOVED

datefmt_set_timezone_id and IntlDateFormatter::setTimeZoneID (since PHP 5.5; use datefmt_set_timezone or IntlDateFormatter::setTimeZone instead) and(since PHP 5.5; useorinstead) REMOVED The following ini options are deprecated: xsl.security_prefs (since PHP 5.4; use XsltProcessor::setSecurityPrefs instead) (since PHP 5.4; useinstead) REMOVED

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: $is_dst parameter of the mktime() and gmmktime() functions (since PHP 5.1) Theparameter of theandfunctions (since PHP 5.1) REMOVED

# style comments in ini files (since PHP 5.3; use ; style comments instead) style comments in ini files (since PHP 5.3; usestyle comments instead) REMOVED

setlocale() (since PHP 5.3; use LC_* constants instead) String category names in(since PHP 5.3; useconstants instead) REMOVED

CurlFile instead) Unsafe curl file uploads (since PHP 5.5; useinstead) REMOVED

preg_replace() eval modifier (since PHP 5.5; use preg_replace_callback instead) eval modifier (since PHP 5.5; useinstead) REMOVED

PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT driver option (since PHP 5.6; use PDO::ATTR_EMULATE_PREPARES instead) driver option (since PHP 5.6; useinstead) REMOVED

CN_match and SNI_server_name stream context option (since PHP 5.6; use peer_name instead) andstream context option (since PHP 5.6; useinstead) REMOVED

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

[TODO] : https://github.com/php/php-src/pull/815 Removal of everything else not marked with

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. Unbundle the ext/ereg extension? Real name Yes No aharvey (aharvey) ajf (ajf) brandon (brandon) bwoebi (bwoebi) dm (dm) dmitry (dmitry) dsp (dsp) fa (fa) francois (francois) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) kinncj (kinncj) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) rdohms (rdohms) remi (remi) salathe (salathe) sebastian (sebastian) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 37 3 This poll has been closed.

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. Unbundle the ext/mysql extension? Real name Yes No ab (ab) aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dm (dm) dmitry (dmitry) dsp (dsp) fredemmott (fredemmott) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) kinncj (kinncj) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) rdohms (rdohms) remi (remi) salathe (salathe) sebastian (sebastian) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) yunosh (yunosh) zeev (zeev) Final result: 28 12 This poll has been closed.

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. Remove assignment of new by reference? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dm (dm) fa (fa) francois (francois) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) rdohms (rdohms) salathe (salathe) sebastian (sebastian) seld (seld) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) yunosh (yunosh) zeev (zeev) Final result: 31 6 This poll has been closed.

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. Remove support for calls from incompatible context? Real name Yes No aharvey (aharvey) ajf (ajf) dmitry (dmitry) dsp (dsp) fredemmott (fredemmott) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) rdohms (rdohms) salathe (salathe) sebastian (sebastian) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) zeev (zeev) Final result: 34 0 This poll has been closed.

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. Remove dl() in fpm-fcgi SAPI? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dmitry (dmitry) dsp (dsp) fa (fa) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) pollita (pollita) rasmus (rasmus) rdohms (rdohms) salathe (salathe) sebastian (sebastian) stas (stas) stelianm (stelianm) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 32 0 This poll has been closed.

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. Remove (set_)magic_quotes_runtime() functions? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dsp (dsp) fa (fa) francois (francois) fredemmott (fredemmott) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) rdohms (rdohms) salathe (salathe) sebastian (sebastian) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 36 0 This poll has been closed.

Other deprecated functions

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. Remove listed deprecated functions? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dsp (dsp) fa (fa) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) rdohms (rdohms) salathe (salathe) sobak (sobak) stelianm (stelianm) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 31 0 This poll has been closed.

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. Remove xsl.security_prefs ini directive? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) fa (fa) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) stas (stas) stelianm (stelianm) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 28 0 This poll has been closed.

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. Remove extension specific encoding ini directives? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dmitry (dmitry) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) stas (stas) stelianm (stelianm) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 26 0 This poll has been closed.

$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. Remove $is_dst parameter of the mktime() and gmmktime() functions? Real name Yes No aharvey (aharvey) ajf (ajf) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) sebastian (sebastian) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 28 0 This poll has been closed.

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. Disallow string category names in setlocale()? Real name Yes No aharvey (aharvey) ajf (ajf) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) sebastian (sebastian) sobak (sobak) stas (stas) stelianm (stelianm) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 27 1 This poll has been closed.

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. Disallow enabling unsafe curl uploads? Real name Yes No aharvey (aharvey) ajf (ajf) fredemmott (fredemmott) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) sebastian (sebastian) stas (stas) till (till) tyrael (tyrael) Final result: 19 6 This poll has been closed.

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. Remove preg_replace() eval modifier? Real name Yes No aharvey (aharvey) ajf (ajf) bwoebi (bwoebi) dmitry (dmitry) dsp (dsp) fa (fa) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) irker (irker) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) leigh (leigh) levim (levim) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) sebastian (sebastian) sobak (sobak) stas (stas) stelianm (stelianm) thekid (thekid) till (till) tyrael (tyrael) yunosh (yunosh) Final result: 33 1 This poll has been closed.

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. Remove PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT driver option? Real name Yes No aharvey (aharvey) ajf (ajf) galvao (galvao) guilhermeblanco (guilhermeblanco) gwynne (gwynne) jedibc (jedibc) jpauli (jpauli) kalle (kalle) krakjoe (krakjoe) kriscraig (kriscraig) laruence (laruence) leigh (leigh) lstrojny (lstrojny) mbeccati (mbeccati) mike (mike) nikic (nikic) peehaa (peehaa) philstu (philstu) pollita (pollita) rasmus (rasmus) salathe (salathe) sebastian (sebastian) stas (stas) tyrael (tyrael) yunosh (yunosh) Final result: 20 5 This poll has been closed.

CN_match and SNI_server_name stream context options