function readMessage($filename){
$fp = fopen($filename,"r");
flock($fp,LOCK_SH);
$buffer="";
$buffer.=fread($fp,filesize($filename));
//echo $buffer;
$data = explode("<|>",$buffer);
print_r($data);
echo isset($data[2]);
foreach ($data as $line){
if($line !="")
{
list($username,$title,$message)= explode("||",$line);
}
if($username!=""&&$title!=""&&$message!=""){
echo $username.'说:';
echo ' '.$title.',';
echo $message."<br>";
}
}
flock($fp,LOCK_UN);
fclose($fp);
}这段代码在读取文本信息的时候 是以<|>符号来作为结束符截图每条数据的,每条数据里的属性值是用||来隔断的,但是在读取的时候,最后的一条记录会读到2次 不知道为什么,求解释
如果用$data = explode("<|>",$buffer);
分割的话,其实会把||分割掉的。
建议把||换成其他的分隔符例如 :
gone说: php,不错
Gone说: PHP,输入留言信息
abc说: def,adafdfa
abc说: def,adafdfa
$username = "";
if($line !="")
{
list($username,$title,$message)= explode("||",$line);
}
if($username!=""&&$title!=""&&$message!=""){
echo $username.'说:';
echo ' '.$title.',';
echo $message."<br>";
}
}
{....
if($username!=""&&$title!=""&&$message!=""){
echo '';
}
...}
txt中内容:
gone||php||不错<|>Gone||PHP||输入留言信息<|>abc||def||adfe代码还是你的代码。
结果为:
gone说: php,不错
Gone说: PHP,输入留言信息
abc说: def,adfe
文件中最后结束符为 <|>时会出现你说的情况。
if($line !="")这个块执行最后一个空的记录时候,username会使用上次的结果。所以应该改为: foreach ($data as $line){
if($line !="")
{
list($username,$title,$message)= explode("||",$line);
if($username!=""&&$title!=""&&$message!=""){
echo $username.'说:';
echo ' '.$title.',';
echo $message."<br>";
}
}
}
哦!我知道了
好像是我分割<|>的时候出了点问题,我用
gone||php||不错<|>Gone||PHP||输入留言信息<|>abc||def||adfe
测试的时候也没问题,但是我写入的每条记录后都有<|>,所以我的TXT里是:
gone||php||不错<|>Gone||PHP||输入留言信息<|>abc||def||adfe<|>
把代码改成11楼写的那样,不管是不是<|>结尾都可以处理了。
这么写的话,输出的是TXT里的原版数据