Comment remplacer "create_function"

Résolu
mpoi -  
 mpoi -
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

  1. mpoi
     
    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
  2. Pitet Messages postés 2845 Statut Membre 530
     
    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
  3. mpoi
     
    Super
    Merci beaucoup cela fonctionne nickel
    0