我将聊天记录的内容存储在.txt
文件中。内容如下:
a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"14:15:54";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 2";s:4:"time";s:8:"14:16:55";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 3";s:4:"time";s:8:"14:17:59";}
jQuery函数调用页面chatretrieve.php
来收集此文件的内容。 PHP文件如下所示:
<?php
session_start();
$data = unserialize(file_get_contents('../sessions/chats/log_'.$_SESSION['chatCode'].'.txt'));
#exit(print_r($data));
$content = '';
for($i = 0; $i < count( $data ); $i++){
$content.='<div class="msgln">';
$content.='<div class="meta">';
$content.='<span class="name">'.$data[$i]['author'].'</span>';
$content.='<span class="time">'.$data[$i]['time'].'</span>';
$content.='</div>';
$content.='<div class="msg">'.stripslashes(htmlspecialchars($data[$i]['message'])).'</div>';
$content.='</div>';
}
return $content;
jQuery函数的相关部分如下:
$.post('inc/chatretrieve.php').done(function(data) {
console.log(data);
});
当我注释掉PHP页面的exit(print_r($data))
部分时,控制台只返回 .txt
文件中的第一个数组变量:
Array
(
[author] => e297f
[message] => test
[time] => 14:15:54
)
1
由于.txt
文件中有三条消息(并使用file_get_contents()
函数检索),为什么我在使用unserialize()
函数时只能看到第一行?
答案 0 :(得分:2)
问题是您的序列化数据无效:
'a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"14:15:54";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 2";s:4:"time";s:8:"14:16:55";}a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 3";s:4:"time";s:8:"14:17:59";}
因为这是三个数组,所以不清楚如何反序列化(我很惊讶PHP不会彻底失败,而是返回第一个对象)。
您需要将其存储为序列化数组,或者找到一种方法将文件拆分为每个消息的部分 - 这可能是在换行或类似的事情上完成的。
e.g。像
这样的东西<?php
//Note the added newlines.
$sez = 'a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:4:"test";s:4:"time";s:8:"14:15:54";}
a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 2";s:4:"time";s:8:"14:16:55";}
a:3:{s:6:"author";s:5:"e297f";s:7:"message";s:6:"test 3";s:4:"time";s:8:"14:17:59";}';
foreach(explode("\n",$sez) as $line){
$data = unserialize($line);
print_r($data);
}