使用php's eval()将字符串作为变量执行


execute string as variable with php's eval()

对于下面的字符串,使用php的eval()函数的正确方法是什么?或者eval()函数的正确替代方法是什么?我尝试构建一个动态CSV解析器,它将CSV列分配给mysql表列,在fgetcsv循环内。文档说不应该使用,但我没有找到任何其他替代方法。

public function importCSV($params, $csv_file, $table) {
    if (!ini_get('safe_mode')) {
        @set_time_limit(0);
    }
    $into .='';
    $value .= '';
    foreach ($params as $param) {
        $values = explode('|', $param[value]);
        if ($param['name'] == 'Category') {
            $value .= 'get_' . $values[1] . '($data[' . $values[0] . ']),';
        } else {
            $value .= '$data[' . $values[0] . '],';
        }
        $into .= $values[1] . ',';
    }
    $value = substr($value, 0, -1);
    $into = substr($into, 0, -1);
    if (($file = fopen(JPATH_COMPONENT_ADMINISTRATOR . '/files/' . $file, "r")) !== FALSE) {
        $row = 0;
        $rows = count(file(JPATH_COMPONENT_ADMINISTRATOR . '/files/tieraerzte.csv'));
        while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {
            //var_dump($data[0].''.$data[1]);
            $number_columns = count($data);
            $row = $row++;
            //here data should be inserted to mysql
            //var_dump(eval('return $'.$value .','));
            eval("$value");
        }
    }
    fclose($file);
}

'$data[0],get_plz($data[1]),get_ort($data[2]),$data[3],$data[4],$data[5],$data[6],$data[7],get_bundesland($data[8])'
$code = '$data[0],get_plz()...';
// the following line will evaluate the code and create a new indexed array
eval('$result = array(' . $code . ');');
// use the results...
echo $result[0];
echo $result[1]; //etc.

对不起,没有正确的方法来使用eval() -根本不要使用它。

但是您可以使用call_user_func()来执行在您发布的字符串中定义的函数。要计算给定变量的内容,可以使用变量变量

然而,你所指出的一切都会让人认为你的整体结构有很大的问题。

$elementsarr = explode(",",$string);
for ($i=0;$i<count($elementsarr);$i++) {
    eval($elementsarr[$i]);
}

这应该可以工作,尽管您可能想要添加一些验证。

如上所述,eval()是坏的