FLASH+PHP+文本文件数据库 聊天室0.9BETA完成!

现在是21号深夜 1:41分。原本2小时前,我就可以做好这个0.9版本的,但是遇到了经典的乱码问题,让我纠结了2小时终于解决了。看到本文童鞋请引以为戒,不要再走我的老路啦。

出现乱码的条件是:默认编码建立的记事本,默认编码建立的PHP,默认编码建立的FLASH,PHP使用GET方式接收数据;

解除乱码的条件是:UTF-8编码的记事本,ANSI编码的PHP,默认编码建立的FLASH,PHP必须使用POST方式获取数据;

哎~两小时折腾死我了,下面进入正题。

最新0.9BETA演示地址 : http://chat.dreamfairy.cn

原本打算用ASP来做这个聊天室的,但是ASP最近不流行了,而且我也没有真正去学过。而目前在学PHP,索性就把ASP后台全部转换成PHP吧。

原本还打算用后台生成XML来保存聊天室数据的,但是XML的节点之类的看的好乱,头晕。还是偷下懒,直接用PHP生成文本文件来保存数据。

更新内容如下:
1.用PHP将原本ASP的后台重写了一遍,将计算留言总条数,留言信息组合,输出最新一条数据等功能全部用后台处理,FLASH只负责前台显示;

2.采用了PHP+TXT文本文件的存储方式,所有的留言记录都保存在服务器端的文本文件里,服务器重启后数据不再丢失。默认保存240条留言,超过240条后清空;

3.添加了 “lucky”按钮,可以随机发送一句话;

以下为PHP+FLASH源码部分


PHP部分代码:

[PHP]

=0;$j--)
{
echo $filearray[$j]."&";//输出文本文件中保存数据并添加下一条记录的识别符号&
}
echo "LastMsgs=".$_POST["msgs"]."&total=".count($filearray);
if($_POST["msgs"]!="" &&$_POST["user"]!="")
{
if(count($filearray)>240)//如果文本文件中存储的数据超过240条,自动清空文本文件。
{
$filearray=array();
$fileopen=fopen($filepath,"w");
fwrite($fileopen,"");
fclose($fileopen);
$count=0;

}
$count=count($filearray);
$filetime="time".$count."=".date("Y-m-d H:i:s");//年月日单独写入文本文件,这样FLASH可以分段改颜色和字体
$filename="&user".$count."=".$_POST["user"];
$filemsgs="&msgs".$count."=".$_POST["msgs"];
$fileopen=fopen($filepath,"a");
fwrite($fileopen,$filetime);
fwrite($fileopen,$filename);
fwrite($fileopen,$filemsgs."n");
fclose($fileopen);
}
?>

[FLASH]
关键代码:

function list()//读取PHP输出的聊天记录列表
{
var url:String = global + "chat.php?randomnum=" + Math.random() * 1000;
listrequest = new URLRequest(url);
listload=new URLLoader();
listload.dataFormat = URLLoaderDataFormat.VARIABLES;
listload.load(listrequest);
listload.addEventListener(Event.COMPLETE,listcomplete);
}
function listcomplete(e:Event)
{
var temp:String = "";
textarea.htmlText = "";
totalmsgs = e.target.data["total"]; //获取聊天记录总条数
for (var i:uint=0; i<=e.target.data["total"]-1; i++)//从0条累加到总条数并显示 { if (e.target.data["msgs" + i] != "") { temp += "" + e.target.data["time" + i] + " [" + e.target.data["user" + i] + "]:" + e.target.data["msgs" + i] + "";
textarea.htmlText = temp;
}
}
textarea.verticalScrollPosition = textarea.maxVerticalScrollPosition;//读取完列表后,滚动条拉到最底。
}

function checknew(e:Event)//更新聊天记录
{
var temp:String;
var ncount:uint;
ncount = e.target.data["total"];//获取总条数
trace(e.target.data["total"]);//FLASH IDE中调试输出总条数
if (ncount > totalmsgs) //将当前的总条数和之前获取的总条数做对比,如果现在总条数更大的话。
{
temp = "" + e.target.data["time" + (ncount-1)] + " [" + e.target.data["user" + (ncount-1)] + "]:" + e.target.data["msgs" + (ncount-1)] + "";
textarea.htmlText += temp; //FLASH的显示窗口追加最新的一条记录
totalmsgs = e.target.data["total"];
textarea.verticalScrollPosition = textarea.maxVerticalScrollPosition;
}

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注