php
  • eval
  • 2017-06-27 3 views 0 likes 
    0

    Der ursprüngliche Code ist dies:Validierung eval() für PHP-7

    $hash_stack = array(); 
    foreach ($values as $key => $val) 
    { 
        array_push($hash_stack, $val['tag']);    
        eval("\$ret[" . implode($hash_stack, "][") . "] = '{$val[value]}';"); 
        array_pop($hash_stack); 
    } 
    

    Es in php5 funktioniert aber nicht in php7:

    Ich habe diesen Fehler für jedes Element in Array:

    Notice: Undefined index: . resultObj][result . in /srv/users/...

    ich versuchte es mit diesem Problem zu beheben:

    $value = $val['value']; 
    $implode = implode($hash_stack, "]["); 
    eval("\$ret[" . $implode . "] = '{$value}';"); 
    array_pop($hash_stack); 
    

    Aber es wird immer noch ein Fehler angezeigt. Was mache ich falsch?

    ich diesen Fehler:

    Notice: Use of undefined constant resultObj - assumed 'resultObj' in /srv/use

    Antwort

    1

    Sie bekommen diesen Fehler, weil Ihr Array-Schlüssel Ebene Code sind eher als Strings. Sie müssten fliehen und sie zitieren, aber ... ehrlich gesagt, würde ich die eval insgesamt loswerden.

    Sie sollten die gleiche Sache mit einem Verweis zu tun in der Lage:

    $hash_stack = array(); 
    foreach ($values as $key => $val) 
    { 
        array_push($hash_stack, $val['tag']); 
    
        $r = &$ret; 
        foreach ($hash_stack as $h) 
        { 
         $r = &$r[$h]; 
        } 
        $r = $val['value']; 
    
        array_pop($hash_stack); 
    } 
    
    Verwandte Themen