在PHP中使用eval与多维数组

时间:2010-09-07 20:22:01

标签: php multidimensional-array eval

我有一个使用var_export()写入文件的数组。每次脚本启动时我都会重新加载数组。但是,每当我尝试引用数组中的变量时它返回'a',我可以做print_r()并看到数组就好了,我只是无法访问我想要的变量。这是保存的输出:

array (
  'timestamp' => '1283882964',
  'files_submitted' => 2943,
  'errors' => array (
                     '/WebFS/xx.doc' => array (
                                                                                                                                                         'STATUS' => 400,
                                                                                                                                                  ),
                     'WebFS/xx.doc.doc' => array (
                                                                                                                                                                  'STATUS' => 400,
                                                                                                                                                            ),
              )
)

以下是我用来保存的代码:

function add_log_entry($filename,$return_arr) {
        //$timestamp = strval(mktime());
        $return_arr['timestamp'] = mktime();
        $return_str = var_export($return_arr,true);
        return file_put_contents($filename, $return_str);
}

以下是我用来回忆数组的代码:

function get_log_entry($filename) {

        $var_str = file_get_contents($filename);
        eval("\$return_var = \$var_str;");
        die($return_var['timestamp']);
        return $return_var;
}

您可以看到我将die()放入召回代码中,这就是“a”的来源。

感谢谁回应。

1 个答案:

答案 0 :(得分:2)

<击> 使用php函数serializeunserialize,不需要使用var_exporteval编写自己的hack(除安全隐患外)

<击>

示例代码:

 file_put_contents($filename, serialize($array));
 $array = unserialize(file_get_contents($filename));

<击>

使用serialize / unserialize可能会带来安全风险。要序列化简单数组/数据结构,最好使用json_encode函数:

 file_put_contents($filename, json_encode($array));
 $array = json_decode(file_get_contents($filename), TRUE);