Statement on glibc/iconv Vulnerability

Fonctionnalités obsolètes

Cœur de PHP

Opérateurs ternaires imbriqués sans parenthèses explicites

Les opérateurs ternaires imbriqués doivent explicitement utiliser des parenthèses pour dicter l'ordre des opérations. Précédemment, quand utilisée sans parenthèses, l'associativité-gauche ne résulterait pas dans le comportement attendu pour la plupart des cas.

<?php
1
? 2 : 3 ? 4 : 5; // obsolète
(1 ? 2 : 3) ? 4 : 5; // ok
1 ? 2 : (3 ? 4 : 5); // ok
?>

Les parenthèses ne sont pas requises lors de l'imbrication dans l'opérant du milieu car ceci est toujours sans ambiguïté et n'est pas affecté par l'associativité :

1 ? 2 ? 3 : 4 : 5 // ok

Accès de position de tableau et de chaînes en utilisant les accolades

La syntaxe pour accéder à la position des tableaux et chaîne de caractères avec les accolades est obsolète. Utiliser $var[$idx] au lieu de $var{$idx}.

Le transtypage (real) et la fonction is_real()

Le transtypage (real) est obsolète, utiliser (float) à la place.

La fonction is_real() est aussi obsolète, utiliser is_float() à la place.

Délier $this quand $this est utilisé

Délier $this d'une fermeture non statique qui utilise $this est obsolète.

Mot-clé parent sans classe parente

L'utilisation de parent à l'intérieur d'une classe sans parent est obsolète, et émettra une erreur lors de la compilation dans le futur. Actuellement seule une erreur sera générée si/quand un parent est accédé lors de l'exécution.

Option INI allow_url_include

La directive INI allow_url_include est obsolète. L'activer génèrera un avis d'obsolescence lors du démarrage.

Caractères invalides dans les fonctions de conversion de base

Passer des caractères invalides à base_convert(), bindec(), octdec() et hexdec() génèrera désormais un avis d'obsolescence. Le résultat sera toujours calculé comme si les caractères invalides n'existaient pas. Les caractères d'espacement blanc, aussi bien que les préfixes de type 0x (en fonction de la base) continuent d'être acceptés.

L'utilisation de array_key_exists() sur des objets

L'utilisation de array_key_exists() sur des objets est obsolète. À la place isset() ou property_exists() devraient être utilisés.

Fonctions des guillemets magiques

Les fonctions get_magic_quotes_gpc() et get_magic_quotes_runtime() sont obsolètes. Elles retournent toujours false.

Fonction hebrevc()

La fonction hebrevc() est obsolète. Elle peut être remplacée par nl2br(hebrev($str)) ou, de préférence, en utilisant le support Unicode RTL (Droite à Gauche).

Fonction convert_cyr_string()

La fonction convert_cyr_string() est obsolète. Elle peut être remplacée par l'une de mb_convert_string(), iconv() ou UConverter.

Fonction money_format()

La fonction money_format() est obsolète. Elle peut être remplacée par la fonctionnalité intl NumberFormatter.

Fonction ezmlm_hash()

La fonction ezmlm_hash() est obsolète.

Fonction restore_include_path()

La fonction restore_include_path() est obsolète. Elle peut être remplacée par ini_restore('include_path').

Implode avec l'ordre de paramètre historique

Passer les paramètres à implode() dans l'ordre inverse est obsolète, utiliser implode($glue, $parts) au lieu de implode($parts, $glue).

COM

L'importation de bibliothèques de type avec l'enregistrement de constantes non sensibles à la casse a été rendue obsolète.

Filtre

FILTER_SANITIZE_MAGIC_QUOTES est obsolète, utiliser FILTER_SANITIZE_ADD_SLASHES à la place.

Chaînes Multi-octets

Passer un pattern qui n'est pas une chaîne de caractères à mb_ereg_replace() est obsolète. Actuellement, les patterns qui ne sont pas des chaîne de caractères sont interprétés en tant que point de code ASCII. En PHP 8, le pattern sera interprété comme une chaîne de caractères à la place.

Passer l'encodage en tant que troisième paramètre à mb_strrpos() est obsolète. À la place passer une position de 0, et l'encodage en tant que quatrième paramètre.

Lightweight Directory Access Protocol (LDAP)

ldap_control_paged_result_response() et ldap_control_paged_result() sont obsolètes. Les contrôles de paginations peuvent être envoyés avec ldap_search() à la place.

Reflection

L'appel à ReflectionType::__toString() génère maintenant un avis d'obsolescence. Cette méthode a été dépréciée en faveur de ReflectionNamedType::getName() dans la documentation à partir de PHP 7.1, mais ne lançait pas un avis d'obsolescence pour des raisons techniques.

Les méthodes export() dans toutes les classes Reflection sont obsolètes. Créer un objet Reflection et le convertir en chaîne de caractères à la place :

<?php
// ReflectionClass::export(Foo::class, false) est :
echo new ReflectionClass(Foo::class), "\n";

// $str = ReflectionClass::export(Foo::class, true) est :
$str = (string) new ReflectionClass(Foo::class);
?>

Socket

Les drapeaux AI_IDN_ALLOW_UNASSIGNED et AI_IDN_USE_STD3_ASCII_RULES pour socket_addrinfo_lookup() sont obsolètes, en raison d'une dépréciation en amont dans glibc.

add a note

User Contributed Notes 2 notes

up
10
Ahmad Asjad
3 years ago
(\?[^php]).*(\:).*(\?).*(\:[^=])
Above regex can help others to find the nested ternary operator
up
-25
Techlemur
3 years ago
^((?!\().*)(\?[^php]).*(\:)([\s\v]+)(?!\().*[^\/](\?)([\s\v\h]*).*(\:[^=])
Regex to find deprecated nested ternaries
To Top