PHP实现简单聊天室(附源码)第2/2页

 更新时间:2013年06月25日 10:09:22   作者:  
本篇文章是对PHP实现聊天室的源代码进行了详细的分析介绍,需要的朋友参考下
[wName][,wFeature][,wReplace])
参数page表示要打开的网页。
参数wName表示要打开窗口的名称,可以是_blank、_parent等属性值,也可以是自定义名称。
参数wFeatures表示要打开的窗口的样式。
属性值如下:
fullscreen:yes,no,1,0;是否全屏
top:number;新窗口到上边界的距离
left:number;新窗口到左边界的距离
width:number;新窗口的宽度
height:number;新窗口的高
location:yes,no,1,0;是否显示地址栏
menubar:yes,no,1,0;是否显示菜单栏
resizable:yes,no,1,0;是否可以改变大小
scrollbars:yes,no,1,0;是否显示滚动条
status:yes,no,1,0;是否显示状态条
toolbar:yes,no,1,0;是否显示工具条
directories:yes,no,1,0;是否显示链接

(2)屏蔽<F5>键
屏蔽<F5>键,是通过触发键盘按下事件(onkeydown)来控制的。当用户按键时,系统对event对象中的keyCode属性判断按键。如果是<F5>键,则弹出警告框,并将按键设置为0。<F5>键的键值为116.

复制代码 代码如下:

//禁止刷新
<script language="javascript">
function enterkey(){
 if(event.keyCode == 116){ //如果按键是F5键
  alert('禁止刷新');  //弹出警告框
  event.keyCode = 0;  //将按键归零
  return false;
 }
}
</script>

document.onkeydown=enterkey; //将函数赋值给onkeydown事件

(3)屏蔽鼠标右键
屏蔽鼠标右键有两种方法,第一种是通过event.button属性判断,如果button等于2,说明按下的是鼠标右键。该方法通过onmousedown时间来触发。

复制代码 代码如下:

<script language="javascript">
//禁止鼠标右键
function mouseright(){
 if(event.button==2){
  alert('禁止鼠标右键');
  return false;
 }
}
document.onmousedown=mouseright;
</script>

但这种方法有一个漏洞,当用户单击鼠标右键,弹出警告框的时候,鼠标右键不松开,按回车键关闭警告窗口后,再松开鼠标右键,这是窗口还是会弹出来。
第二种方法是使用oncontextmenu事件调用event对象中的returnValue属性。oncontextmenu事件是用户在单击鼠标右键时,弹出一个菜单,而returnValue属性则可以取消事件。
复制代码 代码如下:

<body oncontextmenu=self.event.returnValue=false>

6,监控客户端浏览器
在PHP中有一个函数ignore_user_abort()函数,当函数设置为True时,即使PHP页被关闭,页面代码还是会继续被执行。ignore_user_abort(true);
而connection_aborted()函数则可以监控客户端浏览器是否是断开的。int connection_aborted(void),当函数返回True时,说明客户端浏览器已经被断开。
使用该函数可以实现自动更新用户列表、删除掉线用户的功能。

二,聊天室
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
 }


下载:点击下载源码

相关文章

  • php cookie 作用范围–不要在当前页面使用你的cookie

    php cookie 作用范围–不要在当前页面使用你的cookie

    这两天在调试bug的时候遇到了一个问题,就是页面莫名其妙的会跳转到登陆页面
    2009-03-03
  • php通过header发送自定义数据方法

    php通过header发送自定义数据方法

    下面小编就为大家分享一篇php通过header发送自定义数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • PHP+redis实现微博的拉模型案例详解

    PHP+redis实现微博的拉模型案例详解

    这篇文章主要介绍了PHP+redis实现微博的拉模型案例,结合具体实例形式详细分析了php+redis获取关注人最新信息的相关原理与操作技巧,需要的朋友可以参考下
    2019-07-07
  • PHP无刷新上传文件实现代码

    PHP无刷新上传文件实现代码

    PHP无刷新上传文件实现代码,使用php的朋友可以参考下。
    2011-09-09
  • PHP封装PDO实现操作MySql数据库

    PHP封装PDO实现操作MySql数据库

    数据库操作类可以封装数据库连接和操作,使代码更易于维护和扩展,这篇文章主要为大家详细介绍了PHP如何封装操作类PDO从而实现操作MySql数据库的功能,需要的可以了解下
    2023-10-10
  • smarty的保留变量问题

    smarty的保留变量问题

    {$smarty}保留变量可以被用于访问一些特殊的模板变量,以下是全部页面请求变量。
    2008-10-10
  • 详解PHP Swoole与TCP三次握手

    详解PHP Swoole与TCP三次握手

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。本文将详细介绍PHP Swoole与TCP三次握手。
    2021-05-05
  • PHP zip压缩包操作类完整实例

    PHP zip压缩包操作类完整实例

    这篇文章主要介绍了PHP zip压缩包操作类,结合完整实例形式分析了php封装的针对zip文件解压、压缩、递归创建、读取等相关操作,需要的朋友可以参考下
    2018-06-06
  • php下通过伪造http头破解防盗链的代码

    php下通过伪造http头破解防盗链的代码

    这篇文章主要用于图片,软件等突破防盗链的方法,希望需要的朋友有所帮助,但不推荐这样做,如果官方改版都是无法继续使用的。
    2010-07-07
  • php去掉数组的key重组数组的四种方法

    php去掉数组的key重组数组的四种方法

    在PHP开发中数组是常用的数据结构之一,在处理数组时有时候需要去掉数组的key,只取数组中的值,这篇文章主要给大家介绍了关于php去掉数组的key重组数组的四种方法,需要的朋友可以参考下
    2023-12-12

最新评论