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源码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
PHP部分代码:

[PHP]


<?php

$filepath="chat.txt"; //保存聊天记录的文本文件路径及名称。
$filearray=file($filepath);
for($j=count($filearray)-1;$j>=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 +=  "<font color='#000000' size='14'>" + e.target.data["time" + i] + " </font><font color='#990000' size='14'> [" + e.target.data["user" + i] + "]:</font><font color='#000000' size='14'>" + e.target.data["msgs" + i] + "</font>";
      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 =  "<font color='#000000' size='14'>" + e.target.data["time" + (ncount-1)] + " </font><font color='#990000' size='14'> [" + e.target.data["user" + (ncount-1)] + "]:</font><font color='#000000' size='14'>" + e.target.data["msgs" + (ncount-1)] + "</font>";
    textarea.htmlText +=  temp; //FLASH的显示窗口追加最新的一条记录
    totalmsgs = e.target.data["total"];
    textarea.verticalScrollPosition = textarea.maxVerticalScrollPosition;
  }
 
}

发表评论

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.