Comment remplacer "create_function"

Résolu/Fermé
mpoi - 3 janv. 2022 à 14:05
 mpoi - 6 janv. 2022 à 23:07
Bonjour,



Configuration: Windows / Firefox 95.0



J'essaye de modifier un script qui ajoute des videos grace a un BBCode mais le script utilise "create_function" qui n'est plus valable depuis php 7.2 sauriez vous comment remplacer "create_function" svp ?

		if (preg_match($value[0], $link, $matches))
		{
			$id_video=$matches[1];
			return preg_replace_callback('/{.*?}/', create_function('$matches', 'switch (true){
			case preg_match("/\{ID_VIDEO\}/", $matches[0]):
			return "'.$id_video.'";
			break;
			case preg_match("/\{LINK\}/", $matches[0]):
			return "'.$link.'";
			break;
			case preg_match("/\{DOWNLOAD(.*?)%(.*?)%(.*?)\}/", $matches[0], $matches2):
			if (empty($matches2[1])) $matches2[1]="'.$link.'";
			preg_match($matches2[2], file_get_contents(str_replace(" ","+",$matches2[1])), $matches3);
			if (empty($matches2[3])){
			return $matches3[1];
			}else{
			$t=$matches3[1];
			foreach(explode("|", $matches2[3]) as $e){
			eval(\'$t=\'.$e.\'($t);\');
			}
			return $t;
			}
			break;
			}
			return $matches[0];'), $value[1]);
		}

4 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
5 janv. 2022 à 13:58
Bonjour,

Il faut remplacer l'utilisation de la fonction create_function() par une fonction anonyme depuis php 7.2.

Plus d'info sur la doc : https://www.php.net/manual/fr/functions.anonymous.php
Tu peux aussi trouver un exemple de remplacement similaire ici : https://stackoverflow.com/questions/48161526/php-7-2-function-create-function-is-deprecated

Bonne journée,
0
Merci pour ta réponse
J'ai bien vu les liens mais malheureusement je n'arrive pas a faire fonctionner dans le code ci dessus
peu tu me dire comment tu modifierais le code ci-dessus svp ?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
6 janv. 2022 à 11:09
Si je me trompe pas, ca devrait donner quelque chose comme ceci :
if (preg_match($value[0], $link, $matches))
{
	$id_video=$matches[1];
	return preg_replace_callback('/{.*?}/', function($matches) use ($id_video, $link) {
	    switch (true){
    	    case preg_match("/\{ID_VIDEO\}/", $matches[0]):
    	        return $id_video;
    	        break;
    	    case preg_match("/\{LINK\}/", $matches[0]):
    	        return $link;
    	        break;
    	    case preg_match("/\{DOWNLOAD(.*?)%(.*?)%(.*?)\}/", $matches[0], $matches2):
    	        if (empty($matches2[1])) $matches2[1]=$link;
    	        preg_match($matches2[2], file_get_contents(str_replace(" ","+",$matches2[1])), $matches3);
    	        if (empty($matches2[3])){
    	            return $matches3[1];
    	        }else{
    	            $t=$matches3[1];
    	            foreach(explode("|", $matches2[3]) as $e){
    	                eval('$t='.$e.'($t);');
    	            }
    	            return $t;
    	        }
    	        break;
    	}
    	return $matches[0];
	}, $value[1]);
}
0
Super
Merci beaucoup cela fonctionne nickel
0