использование eval в PHP с многомерным массивом - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть массив, который я записываю в файл, используя 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 Ответ

2 голосов
/ 08 сентября 2010

использовать функции php serialize и unserialize, не нужно писать свои собственные хаки, используя var_export и eval (не считая безопасностипоследствия)

пример кода:

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