如何序列化对象数组的PHP代码?

5
我有一个名为“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

首先,使用速记形式:

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

并且

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

然后在每个阶段输出/调试,以找到问题所在。


似乎问题出在我的读写函数上。因此,file_put_contents() 和 file_get_contents() 解决了问题,现在序列化工作正常了!谢谢! :) - hequ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接