收录日期:2020/12/05 23:35:19 时间:2014-03-31 15:25:54 标签:php,multidimensional-array,eval

I have a array that I am writing to a file using var_export(). I reload the array every time the script starts. However, whenever I try to reference a variable inside the array it returns 'a', I can do a print_r() and see the array just fine, I just can not access the variable I want. Here is the saved output:

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

Here is the code I use to save:

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);
}

Here is the code I use to recall the array:

function get_log_entry($filename) {

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

You can see I put the die() in the recall code and this is where the 'a' is coming from.

Thanks to whom ever responds.

Ben

use the php functions serialize and unserialize, no need to write your own hacks using var_export and eval (apart from the security implications)

example code:

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

Using serialize/unserialize might impose a security risk. To serialize simple arrays/data structures it's better to use the json_encode function:

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