2010-04-21 5 views
5

J'ai une petite classe appelée 'Call' et j'ai besoin de stocker ces appels dans un fichier plat. J'ai fait une autre classe appelée 'CallStorage' qui contient un tableau dans lequel je mets ces appels.php comment sérialiser un tableau d'objets?

Mon problème est que je voudrais stocker ce tableau sur le disque afin que je puisse le lire plus tard et obtenir les appels de ce tableau.

J'ai essayé d'y parvenir en utilisant serialize() et unserialize() mais cela semble agir d'une façon ou d'une autre étrange et une partie de l'information est perdue.

C'est ce que je fais:

//write array to disk 
$filename = $path . 'calls-' . $today; 
$serialized = serialize($this->array); 
$fp = fopen($filename, 'a'); 
fwrite($fp, $serialized); 
fclose($fp); 

//read array from serialized file 

$filename = $path . 'calls-' . $today; 
if (file_exists($filename)) { 
    $handle = fopen($filename, 'r'); 
    $contents = fread($handle, filesize($filename)); 
    fclose($handle); 
    $unserialized = unserialize($contents); 
    $this->setArray($unserialized); 
} 

Quelqu'un peut-il voir ce que je fais mal, ou quoi. J'ai également essayé de sérialiser et d'écrire des tableaux contenant des chaînes simples. Je n'ai pas réussi à obtenir ce travail non plus. J'ai un arrière-plan Java donc je ne vois pas pourquoi je ne pourrais pas écrire un tableau sur le disque s'il est sérialisé. :)

Répondre

6

Tout d'abord, utiliser les formes raccourcies:

file_put_contents($filepath,serialize($var)); 

et

$var=unserialize(file_get_contents($filepath)); 

Et puis sortie/debug à chaque étape pour trouver où est le problème.

+0

On dirait que le problème était dans mes fonctions de lecture et d'écriture. Donc, file_put_contents() et file_get_contents() ont résolu le problème et maintenant la sérialisation fonctionne comme prévu! Merci! :) – hequ