本文目录一览:
- 1、PHP配合AJAX做页面右下角的弹框提示
- 2、PHP如何实现聊天室
- 3、ajax+php+mysql制作的聊天室,因为每秒刷新一次,时间一长APACHE占用服务器的资源就相当大,CPU可能到100%
- 4、php制作聊天室遇到的问题
- 5、php 聊天室刷新问题
PHP配合AJAX做页面右下角的弹框提示
建议审核通过后通过邮件或者站内短消息的方式发送,弹框这种开销太大了,不建议。
其实原理很简单,就是前台定时发送一个ajax请求给php,如果没有新的消息就返回false,否则返回个消息,js拿到消息就弹出来。
不过就算是1分钟查询一次,如果有几百人打开了你的网页,服务器也亚历山大了。这种逻辑其实和聊天室的原理是一样的,不断地轮询。
另外,很不理解充值为什么还要后台审核,就像是你去银行存钱,钱给了服务人员了,服务人员告诉你需要等经理确认,你会怎么想?也许你会觉得银行要验钞啊,可是充值过程本身就已经是和验钞对等的验证行为了。
你也可以想想看,你用过的哪个网站是充值需要审核的,只有提现才会。
PHP如何实现聊天室
1,配置文件
复制代码代码如下:
?php
define('PATH',dirname($_SERVER['SCRIPT_NAME'])); //聊天室目录
define('CHAT_NAME','PHP聊天室'); //聊天室名称
define("MESS", "mess.txt"); //聊天信息
define("PERSON", "person.txt"); //在线人名单
define("RETIME",3); //刷新时间
define("LINE",11); //公共窗口显示的行数
define("PRLINE",5); //私聊窗口显示的行数
define("MAX",50); //聊天室人数限制
define("MAXTIME",600000); //最大不发言时间,单位是毫秒
define("WELCOME","font color=blue欢迎光临".CHAT_NAME.",请遵守聊天室规则,不要恶意刷新,不要使用不文明用语。/font"); //欢迎语
?
2,公共函数文件
(1)chklogin()函数检查用户昵称是否重复。参数$user是登录用户的昵称。当函数返回值为True时,昵称不可用;返回值为False时,昵称可用。
复制代码代码如下:
function chklogin($file,$user){
$boo = false;
if(file_exists($file)){
$userarr = file($file);
/* 判断昵称是否重复 */
foreach($userarr as $value){ //判断昵称是否重复
$tmparr = explode('#',$value); //使用“#”作为分隔符来拆分字符串
if($user == $tmparr[0]){ //如果用户数组中包含此用户
$boo = true;
break;
}
}
}
return $boo;
}
(2)addlogin()函数将登录的用户昵称写入文件中,保存格式为:昵称#IP#性别,参数$file是保存的文件地址,$user是用户昵称,$ip是登陆IP,$sex表示用户性别。
复制代码代码如下:
function addlogin($file,$user,$ip,$sex){
$tmp = $user.'#'.$ip.'#'.$sex.chr(13).chr(10); //chr(13) 是一个回车,Chr(10) 是个换行符,chr(32) 是一个空格符
$fp = fopen($file,'a'); //写入方式在文件末尾追加信息
$boo = fwrite($fp,$tmp);
fclose($fp);
return $boo;
}
(3)storeuser()函数的作用是将用户信息存为一个数组。格式为“用户名,用户性别”,参数$file是用户列表文件。代码如下:
复制代码代码如下:
function storeuser($file){
$tmparr = file($file); //将文件内容写入数组
$userarr = array(); //创建数组
foreach($tmparr as $value){ //循环输出数组内容
$tmparr = explode('#',$value); //使用#拆分字符串
$userarr[] = $tmparr[0].','.$tmparr[2]; //将用户名和用户性别保存到新数组中
}
return $userarr;
}
(4)addmess()函数将发言内容写入文件中。参数$file是保存的文件地址,$mess是要保存的内容
复制代码代码如下:
function addmess($file,$mess){
$fp = fopen($file,'a'); //以追加的形式打开文件
$boo = fwrite($fp,$mess.chr(13).chr(10)); //将信息写入文件中
fclose($fp); //关闭文件
return boo;
}
(5)deluser()函数的作用是删掉用户。参数$file是保存的文件地址,$user是要删除的用户
复制代码代码如下:
function deluser($file,$user){
$tmparr = file($file); //将文件内容写入数组
$rearr = array(); //创建数组
foreach($tmparr as $value){ //循环输出数组内容
$tmp = explode('#',$value); //使用#拆分字符串
if($tmp[0] != $user){ //如果变量中的用户名和当前用户不相等
$rearr[] = $value; //将该用户信息保存到新数组中
}
}
$fp = fopen($file,'w+'); //以只写的方式打开文件
foreach($rearr as $value){ //循环数组
fwrite($fp,$value); //写入数组内容
}
fclose($fp); //关闭文件
}
(6)getRows()函数的作用是返回文件的行数,参数$file是文件名
复制代码代码如下:
function getRows($file){
if(file_exists($file)){ //如果文件存在
$fl = file($file); //将文件按行写入数组
return count($fl); //求出数组长度并返回
}else{
return 0; //如果文件不存在,返回0
ajax+php+mysql制作的聊天室,因为每秒刷新一次,时间一长APACHE占用服务器的资源就相当大,CPU可能到100%
你可以这样,使用memcached 做缓存,每秒读取让后台执行,后台每秒更新一次cache,客户端每秒请求你读取memcache 这样就快多了,如果读取缓存失败,就处理你的业务(读取数据库等等),具体情况要看是数据库读写慢,还是并发数高,如果并发数太高的话,只能加服务器负载均衡来解决,毕竟每个应用程序像hello,world那么简单.
------------------------------------------------------------------
做缓存是必要的,100个客户端发送请求,有一半是真正的请求业务处理,一半缓存里读取,就会缓解许多
php制作聊天室遇到的问题
发送的太快会丢失
这个你可以从JS去限制或延迟请求的时间来解决.
怎么让一个用户不能同时登陆
你可以把请求的seesion自定义存储到文件或数据库中 , 登录就记录 , 退出就清除 , 非常退出 , 则定时清除数据当一个用户在登录状态下 , 在其他位置或新开窗口登录 , 那么可以查到是否已登录 . 这个是否要么 让新的登录 , 旧的退出 . 要么不允许新的登录 . 但是我们一般都是让新的登录 , 旧的退出 . 至于原因 , 就是我们也不知道那一次登录是本人 , 如果帐号被盗 , 那么用户就会找回密码 , 然后重新登录 . 所以采用此种模式 . 现在的QQ登录也是如此 .
php 聊天室刷新问题
不刷新的聊天室,首先你保存内容的chat.txt文件要修改,要增加一列保存消息ID,这个ID是自动增加,永不重复的,不知道你现在的是怎么设计,可以如下:
消息ID|说话人|说话对象|消息内容
有发送消息的程序修改这个文件,控制只保留10条内容,有人发消息时候,把消息放到文件最后,删除文件前面的信息,文件最多10行,这个代码并不复杂,你应该会写的。
刷新框隐藏不显示,反复刷新,每次刷新后把获取的内容提交给消息框,例如刷新框的代码可以如下:
script type=text/javascript
?php
foreach (file('chat/chat.txt') as $line){
list($id,$from,$to,$msg)=explode('|',$line);
echo "msg_frame.add_msg($id,'$from','$to','$msg');\r\n";
//注意:msg_frame是消息框的名称。
}
?
/script
消息框不刷新,编写一个添加消息的函数,等着刷新框来调用,例如内容如下:
div id=msg/div
script type=text/javascript
var maxid=0;
function add_msg(id,from,to,msg){
if (idmaxid) {
maxid=id;
if (to=='') to='大家';
s='p'+from+'对'+to+'说:'+msg+'/p';
document.getElementById('msg').innerHTML+=s;
}
}
/script