PHP 5.3 : deprecated functions
+
Par Remi le jeudi 18 décembre 2008, 20:23 - General - Lien permanent
The .POSIX Regex Functions are deprecated in PHP 5.3.0. Here is some alternatives you could switch to.
Les Fonctions POSIX Regex sont dépréciées en PHP 5.3.0. Voici une présentation des alternatives qu'il est urgent d'adopter.
Ces fonctions sont dépréciées, probablement parce qu'elles ne sont pas compatibles UTF-8 et ne pourront donc pas être portées dans PHP 6. Pour mémoire, avec les fonction preg, il faut utiliser l'option 'u' pour avoir cette compatibilité.
Dans de nombreux cas ces fonctions sont utilisées avec un motif qui n'est pas une expression rationnelle mais une simple chaine de caractères. Donc on aura une alternative pour les chaines simples et une pour les expressions rationnelles.
Fonction ereg recherche d'un motif dans une chaîne
Exemple :
if (ereg($motif, $texte))
- Fonction strpos
if (strpos($texte, $motif)!==false)
- Fonction strstr
A noter : le test !== pour ne pas être piégé par la valeur 0 (debut de chaine) qui reste vrai.
if (strstr($texte, $motif))
- Fonction preg_match
Cette version est peut-être plus lisible, mais sans doute moins performante.
if (preg_match("/$motif/", $texte))
A noter : avec cette fonction, le motif doit être entouré d'un délimiteur (/ dans mon exemple).
Corrigé dans GLPI : #7682, #7683, #7683.
Fonction eregi recherche d'un motif dans une chaîne
Cette fonction se distingue de la précédente par la recherche sans distinction de la casse. Exemple :
if (eregi($motif, $texte))
- Fonction stripos
if (stripos($texte, $motif)!==false)
- Fonction preg_match
if (preg_match("/$motif/i", $texte))
A noter : l'option i après le délimiteur de fin.
Fonction ereg_replace remplacement d'un motif dans une chaîne
Exemple :
ereg_replace($cherche, $remplace, $texte);
- Fonction str_replace
str_replace($cherche, $remplace, $texte);
- Fonction preg_replace
preg_replace("/$cherche/", $remplace, $texte);
A noter : avec cette fonction, le motif doit être entouré d'un délimiteur (/ dans mon exemple).
Fonction eregi_replace remplacement d'un motif dans une chaîne
Cette fonction se distingue de la précédente par la recherche sans distinction de la casse. Exemple :
eregi_replace($cherche, $remplace, $texte);
- Fonction str_ireplace
str_ireplace($cherche, $remplace, $texte);
- Fonction preg_replace
preg_replace("/$cherche/i", $remplace, $texte);
A noter : l'option i après le délimiteur de fin.
Corrigé dans GLPI : #7672, #7673.
Fonction split scinde une chaîne en un tableau
Exemple :
$resultat = split ($motif, $chaine);
- Fonction explode
$resultat = explode ($motif, $chaine);
- Fonction preg_split
$resultat = preg_split ("/$motif/", $chaine);
A noter : avec cette fonction, le motif doit être entouré d'un délimiteur (/ dans mon exemple).
Fonction spliti scinde une chaîne en un tableau
Cette fonction se distingue de la précédente par la recherche sans distinction de la casse. Exemple :
$resultat = split ($motif, $chaine);
- Fonction preg_split
$resultat = preg_split ("/$motif/i", $chaine);
A noter : l'option i après le délimiteur de fin. Je n'ai pas trouvé d'autre alternative quand le motif est une simple chaine.
Fonction sql_regcase prépare une expression rationnelle
Désolé, j'ai rien trouvé.
Conclusion
Les alternatives proposées sont réputées plus rapides que ces vielles fonctions (surtout si vous ne faites qu'une recherche sur une simple chaine, pas sur une expression rationnelle). Voilà une bonne occasion de faire un peu de ménage dans votre code
Commentaires
Bonjour,
Il y a plus simple pour le remplacement des ereg : mb_*
Par ex: "eregi" devient "mb_eregi"
Cdlt,
Ngm
pour php et les deprecated, methode bourrain
dans le php.ini -> error_reporting = E_ALL & ~E_DEPRECATED
cqfd en 1 ligne ;)
Oui, mais comme tu l'as dit c'est la méthode bourrin.
C'est aller droit dans le mur et découvrir dans une prochaine version que ces fonctions sont supprimées.
Et pour mémoire, les valeurs recommandées dans le php.ini sont
Développement :
Production :
Donc il faut corriger maintenant (pendant les développements) !
+