在以下字符串的情况下使用php的eval()函数的正确方法是什么,或者在eval()上使用什么是正确的替代方法 我尝试构建一个动态CSV解析器,它将CSV列分配给fgetcsv循环内部的mysql表列。 该文件说不应该使用,但我没有找到任何其他替代方案。
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])'
答案 0 :(得分:1)
$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.
答案 1 :(得分:1)
很抱歉,但没有正确的方法来使用eval() - 根本不使用它。
但您可以使用call_user_func()来执行您发布的字符串中定义的函数。 要评估给定变量的内容,您可以使用variable variables
尽管如此,你所指出的一切都会导致你的整体结构出现问题。
答案 2 :(得分:0)
$elementsarr = explode(",",$string);
for ($i=0;$i<count($elementsarr);$i++) {
eval($elementsarr[$i]);
}
虽然您可能想要添加一些验证,但这应该可行。
如上所述虽然eval()很糟糕。