2010-09-07 10 views
0

J'ai un tableau que j'écris dans un fichier en utilisant var_export(). Je recharge le tableau chaque fois que le script démarre. Cependant, chaque fois que j'essaie de référencer une variable à l'intérieur du tableau, il retourne 'a', je peux faire un print_r() et voir le tableau très bien, je ne peux pas accéder à la variable que je veux. Voici le résultat enregistré:en utilisant eval en PHP avec tableau multidimensionnel

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

Voici le code que j'utilise pour sauver:

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

Voici le code que j'utilise pour rappeler le tableau:

function get_log_entry($filename) { 

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

Vous pouvez voir J'ai mis le die() dans le code de rappel et c'est de là que vient le 'a'.

Merci à qui répond jamais.

Ben

+1

Pourquoi utilisez-vous un tableau que vous ne pouvez pas se référer à? Avez-vous déjà pensé à utiliser une structure moins complexe (pour vous)? –

Répondre

2

utiliser les fonctions php serialize et unserialize, pas besoin d'écrire vos propres hacks en utilisant var_export et eval (en dehors des implications de sécurité)

exemple de code:

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

L'utilisation de serialize/unserialize peut présenter un risque de sécurité. Pour sérialiser simples tableaux/structures de données, il est préférable d'utiliser la fonction json_encode:

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

Cette réponse est ancienne et obsolète. 'unserialize' pourrait imposer des risques de sécurité. Si vous avez juste besoin de sérialiser un tableau, mieux utiliser 'json_decode' – knittl

Questions connexes