php как сериализовать массив объектов? - PullRequest
5 голосов
/ 21 апреля 2010

У меня есть небольшой класс под названием «Call», и мне нужно сохранить эти вызовы в плоский файл. Я создал другой класс под названием CallStorage, который содержит массив, в который я помещаю эти вызовы.

Моя проблема заключается в том, что я хотел бы сохранить этот массив на диск, чтобы впоследствии я мог прочитать его и получить вызовы из этого массива.

Я пытался добиться этого с помощью serialize () и unserialize (), но они, кажется, действуют как-то странно, и часть информации теряется.

Вот что я делаю:

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

Может кто-то увидеть, что я делаю не так или как. Я также попытался сериализовать и записать массивы, которые содержат простые строки. Мне также не удалось заставить это работать ... У меня есть Java-фон, поэтому я просто не понимаю, почему я не могу просто записать массив на диск, если он сериализован. :)

1 Ответ

6 голосов
/ 21 апреля 2010

Во-первых, используйте сокращенные формы:

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

и

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

А затем выводите / отлаживайте на каждом этапе, чтобы найти причину проблемы.

...