php视频聊天室源码_PHP实现简单聊天室(附源码)_php技
本篇⽂章是对PHP实现聊天室的源代码进⾏了详细的分析介绍,需要的朋友参考下
⼀,聊天室模块实现1,聊天室主页⾯窗⼝设置
代码如下:
<?php echo CHAT_NAME; ?>
2,⽂件操作函数本聊天室模块使⽤⽂本来保存⽤户列表和发⾔信息,主要考虑对⽂件的操作在速度上要优于对数据库的操作。
(1)fopen()函数,打开⽂件或者URL,如果打开失败,函数返回FALSE语法:fopen(filename,mode,include_path,context)参数说明:
filename:必须,规定要打开的⽂件或URL
mode:必须,规定要求到该⽂件/流的访问类型。
include_path:可选,如果也需要在include_path中检索⽂件的话,可以将该参数设为1或TRUE。
context:可选。规定⽂件句柄的环境,context是可以修改流的⾏⽂的⼀套选项
mode参数的取值:"r":只读⽅式打开,将⽂件指针指向⽂件头。
"r+":读写⽅式打开,将⽂件指针指向⽂件头。
"w":写⼊⽅式打开,将⽂件指针指向⽂件头并将⽂件⼤⼩截为零。如果⽂件不存在则尝试创建。
"w+":读写⽅式打开,将⽂件指针指向⽂件头并将⽂件⼤⼩截为零。如果⽂件不存在则尝试创建。
"a":写⼊⽅式打开,将⽂件指针指向⽂件末尾。如果⽂件不存在则尝试创建。
"a+":读写⽅式打开,将⽂件指针指向⽂件末尾。如果⽂件不存在则尝试创建。"x":创建并以写⼊⽅式打开,⽂件指针指向⽂件头。如果⽂件已存在,则fopen()调⽤失败并返回FALSE,并⽣成⼀条E_WARNING级别的错误信息。如果⽂件不存在则尝试创建。"x+":创建并以读写⽅式打开,将⽂件指针指向⽂件头。如果⽂件已存在,则fopen()调⽤失败并返回FALSE,并⽣成⼀条E_WARNING级别的错误信息。如果⽂件不存在则尝试创建。
(2)fclose()函数,关闭打开的⽂件语法:fclose(file)参数:file:必须,规定要关闭的⽂件。file参数是⼀个⽂件指针,fclose()函数关闭指针指向的⽂件。⽂件指针必须有效,并且是通过fopen()或fsockopen()成功打开的⽂件。如果成功则返回true,否则返回false。
(3)读取⽂件函数********
fgets(file,length)函数⽤于⼀次读取⼀⾏数据
file:必须,规定要读取的⽂件
length:可选,规定要读取的字节数,默认是1024字节。从file指向的⽂件中读取⼀⾏并返回长度最多为length-1字节的字符串。碰到换⾏符(包括在返回值中)、EOF或者已经读取了length-1字节后停⽌。如果没有指定length,默认为1K,或者说1024字节。若失败,则返回false。
********
file(path,include_path,context),将⽂件作为⼀个数组返回,数组中的每个单元都是⽂件中相应的⼀⾏,包括换⾏符在内。若失败,则返回false。
path:必须,规定要读取的⽂件。
include_path:可选。如果想在include_path中搜索⽂件,将该参数设为1.
context:可选。规定⽂件句柄的环境。context是⼀套可以修改流的⾏为的选项,若使⽤null,则忽略。
********
file_get_contents(path,include_path,context,start,max_length),是⽤于将⽂件的内容读⼊到⼀个字符串中的⾸选⽅法。
path:必须,规定要读取的⽂件
include_path:可选,如果也想在include_path中搜寻⽂件的话,可以将该参数设为"1".
context:可选,规定⽂件句柄的环境。context是⼀套可以修改流的⾏为的选项。若使⽤null,则忽略。
start:可选,规定在⽂件中开始读取的位置。
max_length:可选,规定读取的字节数。
(4)写⼊⽂件函数写⼊数据也是PHP中常⽤的⽂件操作,在PHP中可以使⽤fwrite()和fputs()函数向⽂件中写⼊数据。fputs()函数是
fwrite()函数的别名。他们的⽤法相同。
语法:fwrite(file,string,length)参数说明:file:必须,规定要写⼊的打开⽂件。
string:必须,规定要写⼊的⽂件的字符串。
length:可选。规定要写⼊的最⼤字节数。
fwrite()把string的内容写⼊⽂件指针file处。如果指定了length,当写⼊了length个字节或者写完了string以后,写⼊就会停⽌。发write()返回写⼊的字节数,出现错误时则返回false。
(5)删除⽂件unlink(filename,context)函数⽤于删除⽂件,该⽂件必须是关闭的,若成功则返回true,失败则返回false。
filename:必须,规定要删除的⽂件;
context:可选,规定⽂件句柄环境。context是可修改流的⾏为的⼀套选项。
3,定时刷新技术删除不发⾔⽤户定时刷新,是指每隔⼀段时间,对象被重新加载⼀次,也可以只加载⼀次。使⽤javascript脚本能够轻松实现该功能。
(1)setInterval()函数JavaScript中的setInterval()函数可以每隔⼀段时间,就执⾏⼀次操作。该函数语法格式如下:
window.setInterval(Function,MilliSeconds)
参数Function表明要执⾏的操作,可以是⼀个函数。
参数MiliSeconds表⽰间隔的时间,单位是毫秒。
使⽤setInterval()函数后,只要不关闭页⾯,该函数就会⼀直执⾏下去。如果想结束事件,可以使⽤clearInterval()函数。函数格式如下:
window.clearInterval(Interval)
参数Interval是setIntervald()函数的返回值。
(2)setTimeout()函数setTimeout()函数和setInterval()函数⽤法相同,但setTimeout()函数只执⾏⼀次。⽤于在聊天室中定时删除不发⾔的⽤户。
4,滚屏显⽰时滚动条定位技术聊天室中的滚屏功能,最新发⾔信息是显⽰在页⾯的最底部,⽽每次刷新时,页⾯焦点都被定位到最上⾯。滚动条的定位可分为整个页⾯窗⼝的滚动条和页⾯元素中的滚动条.
(1)窗⼝中的滚动条窗⼝中的滚动条可以通过scroll()函数来实现定位。
语法:window.scroll(x,y)参数x表⽰滚动条⽔平位置的坐标。参数y表⽰滚动条垂直位置的坐标。如果要将滚动条置底,那么只要将y的值设置⼤⼀些即可。php好看主页源码
代码如下:
function scrollWindow(){
this.scroll(0,75000); //设置滚动条坐标
setInterval('scrollWindow()',200); //每200毫秒执⾏⼀次函数
}
scrollWindow();
(2)页⾯元素中的滚动条页⾯元素中的滚动条可以⽤scrollTop属性来实现定位。scrollTop属性表⽰当前对象的顶点距离其最外层对象元素的距离。语法如下:
object.scrollTop=distance;在聊天室公共窗⼝中的滚屏效果,就是使⽤的该属性来定位滚动条。公共窗⼝使⽤⼀个p层来显⽰聊天信息。⾸先将p层的纵向滚动条设为⾃动,横向滚动条设为⽆并⾃动换⾏。
代码如下:
...
在Javascript中设置纵向滚动条的scrollTop属性等于它滚动⾼度(定位到聊天窗⼝的最下⾯)
代码如下:
//定位滚动条
function scrollWindow(){
setTimeout('scrollWindow()',200);
}
5,屏蔽刷新技术屏蔽刷新,就是屏蔽键、屏蔽⿏标右键和隐藏浏览器中的“刷新”按钮3部分。每个部分使⽤的技术都不相同。
(1)隐藏“刷新”按钮open()函数的作⽤是打开⼀个新窗⼝,并可以对窗⼝样式进⾏设置。
Open()函数的语法格式如下:op=window.open([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)屏蔽键
屏蔽键,是通过触发键盘按下事件(onkeydown)来控制的。当⽤户按键时,系统对event对象中的keyCode属性判断按键。如果是键,则弹出警告框,并将按键设置为0。键的键值为116.
代码如下://禁⽌刷新
function enterkey(){
if(event.keyCode == 116){ //如果按键是F5键
alert('禁⽌刷新'); //弹出警告框
event.keyCode = 0; //将按键归零
return false;
}
}
document.οnkeydοwn=enterkey; //将函数赋值给onkeydown事件
(3)屏蔽⿏标右键屏蔽⿏标右键有两种⽅法,第⼀种是通过event.button属性判断,如果button等于2,说明按下的是⿏标右键。该⽅法通过onmousedown时间来触发。
代码如下:
//禁⽌⿏标右键
function mouseright(){
if(event.button==2){
alert('禁⽌⿏标右键');
return false;
}
}
document.οnmοusedοwn=mouseright;
但这种⽅法有⼀个漏洞,当⽤户单击⿏标右键,弹出警告框的时候,⿏标右键不松开,按回车键关闭警告窗⼝后,再松开⿏标右键,这是窗⼝还是会弹出来。
第⼆种⽅法是使⽤oncontextmenu事件调⽤event对象中的returnValue属性。oncontextmenu事件是⽤户在单击⿏标右键时,弹出⼀个菜单,⽽returnValue属性则可以取消事件。
代码如下:
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", ""); //聊天信息
define("PERSON", ""); //在线⼈名单
define("RETIME",3); //刷新时间
define("LINE",11); //公共窗⼝显⽰的⾏数
define("PRLINE",5); //私聊窗⼝显⽰的⾏数
define("MAX",50); //聊天室⼈数限制
define("MAXTIME",600000); //最⼤不发⾔时间,单位是毫秒
define("WELCOME","欢迎光临".CHAT_NAME.",请遵守聊天室规则,不要恶意刷新,不要使⽤不⽂明⽤语。"); //欢迎语
>
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是⽤户列表⽂件。代码如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。