PHP實(shí)現(xiàn)簡(jiǎn)單聊天室(附源碼)
參數(shù)page表示要打開(kāi)的網(wǎng)頁(yè)。
參數(shù)wName表示要打開(kāi)窗口的名稱(chēng),可以是_blank、_parent等屬性值,也可以是自定義名稱(chēng)。
參數(shù)wFeatures表示要打開(kāi)的窗口的樣式。
屬性值如下:
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;是否顯示滾動(dòng)條
status:yes,no,1,0;是否顯示狀態(tài)條
toolbar:yes,no,1,0;是否顯示工具條
directories:yes,no,1,0;是否顯示鏈接
(2)屏蔽<F5>鍵
屏蔽<F5>鍵,是通過(guò)觸發(fā)鍵盤(pán)按下事件(onkeydown)來(lái)控制的。當(dāng)用戶按鍵時(shí),系統(tǒng)對(duì)event對(duì)象中的keyCode屬性判斷按鍵。如果是<F5>鍵,則彈出警告框,并將按鍵設(shè)置為0。<F5>鍵的鍵值為116.
//禁止刷新
<script language="javascript">
function enterkey(){
if(event.keyCode == 116){ //如果按鍵是F5鍵
alert('禁止刷新'); //彈出警告框
event.keyCode = 0; //將按鍵歸零
return false;
}
}
</script>
document.onkeydown=enterkey; //將函數(shù)賦值給onkeydown事件
(3)屏蔽鼠標(biāo)右鍵
屏蔽鼠標(biāo)右鍵有兩種方法,第一種是通過(guò)event.button屬性判斷,如果button等于2,說(shuō)明按下的是鼠標(biāo)右鍵。該方法通過(guò)onmousedown時(shí)間來(lái)觸發(fā)。
<script language="javascript">
//禁止鼠標(biāo)右鍵
function mouseright(){
if(event.button==2){
alert('禁止鼠標(biāo)右鍵');
return false;
}
}
document.onmousedown=mouseright;
</script>
但這種方法有一個(gè)漏洞,當(dāng)用戶單擊鼠標(biāo)右鍵,彈出警告框的時(shí)候,鼠標(biāo)右鍵不松開(kāi),按回車(chē)鍵關(guān)閉警告窗口后,再松開(kāi)鼠標(biāo)右鍵,這是窗口還是會(huì)彈出來(lái)。
第二種方法是使用oncontextmenu事件調(diào)用event對(duì)象中的returnValue屬性。oncontextmenu事件是用戶在單擊鼠標(biāo)右鍵時(shí),彈出一個(gè)菜單,而returnValue屬性則可以取消事件。
<body oncontextmenu=self.event.returnValue=false>
6,監(jiān)控客戶端瀏覽器
在PHP中有一個(gè)函數(shù)ignore_user_abort()函數(shù),當(dāng)函數(shù)設(shè)置為T(mén)rue時(shí),即使PHP頁(yè)被關(guān)閉,頁(yè)面代碼還是會(huì)繼續(xù)被執(zhí)行。ignore_user_abort(true);
而connection_aborted()函數(shù)則可以監(jiān)控客戶端瀏覽器是否是斷開(kāi)的。int connection_aborted(void),當(dāng)函數(shù)返回True時(shí),說(shuō)明客戶端瀏覽器已經(jīng)被斷開(kāi)。
使用該函數(shù)可以實(shí)現(xiàn)自動(dòng)更新用戶列表、刪除掉線用戶的功能。
二,聊天室
1,配置文件
<?php
define('PATH',dirname($_SERVER['SCRIPT_NAME'])); //聊天室目錄
define('CHAT_NAME','PHP聊天室'); //聊天室名稱(chēng)
define("MESS", "mess.txt"); //聊天信息
define("PERSON", "person.txt"); //在線人名單
define("RETIME",3); //刷新時(shí)間
define("LINE",11); //公共窗口顯示的行數(shù)
define("PRLINE",5); //私聊窗口顯示的行數(shù)
define("MAX",50); //聊天室人數(shù)限制
define("MAXTIME",600000); //最大不發(fā)言時(shí)間,單位是毫秒
define("WELCOME","<font color=blue>歡迎光臨".CHAT_NAME.",請(qǐng)遵守聊天室規(guī)則,不要惡意刷新,不要使用不文明用語(yǔ)。</font>"); //歡迎語(yǔ)
?>
2,公共函數(shù)文件
(1)chklogin()函數(shù)檢查用戶昵稱(chēng)是否重復(fù)。參數(shù)$user是登錄用戶的昵稱(chēng)。當(dāng)函數(shù)返回值為T(mén)rue時(shí),昵稱(chēng)不可用;返回值為False時(shí),昵稱(chēng)可用。
function chklogin($file,$user){
$boo = false;
if(file_exists($file)){
$userarr = file($file);
/* 判斷昵稱(chēng)是否重復(fù) */
foreach($userarr as $value){ //判斷昵稱(chēng)是否重復(fù)
$tmparr = explode('#',$value); //使用“#”作為分隔符來(lái)拆分字符串
if($user == $tmparr[0]){ //如果用戶數(shù)組中包含此用戶
$boo = true;
break;
}
}
}
return $boo;
}
(2)addlogin()函數(shù)將登錄的用戶昵稱(chēng)寫(xiě)入文件中,保存格式為:昵稱(chēng)#IP#性別,參數(shù)$file是保存的文件地址,$user是用戶昵稱(chēng),$ip是登陸IP,$sex表示用戶性別。
function addlogin($file,$user,$ip,$sex){
$tmp = $user.'#'.$ip.'#'.$sex.chr(13).chr(10); //chr(13) 是一個(gè)回車(chē),Chr(10) 是個(gè)換行符,chr(32) 是一個(gè)空格符
$fp = fopen($file,'a'); //寫(xiě)入方式在文件末尾追加信息
$boo = fwrite($fp,$tmp);
fclose($fp);
return $boo;
}
(3)storeuser()函數(shù)的作用是將用戶信息存為一個(gè)數(shù)組。格式為“用戶名,用戶性別”,參數(shù)$file是用戶列表文件。代碼如下:
function storeuser($file){
$tmparr = file($file); //將文件內(nèi)容寫(xiě)入數(shù)組
$userarr = array(); //創(chuàng)建數(shù)組
foreach($tmparr as $value){ //循環(huán)輸出數(shù)組內(nèi)容
$tmparr = explode('#',$value); //使用#拆分字符串
$userarr[] = $tmparr[0].','.$tmparr[2]; //將用戶名和用戶性別保存到新數(shù)組中
}
return $userarr;
}
(4)addmess()函數(shù)將發(fā)言?xún)?nèi)容寫(xiě)入文件中。參數(shù)$file是保存的文件地址,$mess是要保存的內(nèi)容
function addmess($file,$mess){
$fp = fopen($file,'a'); //以追加的形式打開(kāi)文件
$boo = fwrite($fp,$mess.chr(13).chr(10)); //將信息寫(xiě)入文件中
fclose($fp); //關(guān)閉文件
return boo;
}
(5)deluser()函數(shù)的作用是刪掉用戶。參數(shù)$file是保存的文件地址,$user是要?jiǎng)h除的用戶
function deluser($file,$user){
$tmparr = file($file); //將文件內(nèi)容寫(xiě)入數(shù)組
$rearr = array(); //創(chuàng)建數(shù)組
foreach($tmparr as $value){ //循環(huán)輸出數(shù)組內(nèi)容
$tmp = explode('#',$value); //使用#拆分字符串
if($tmp[0] != $user){ //如果變量中的用戶名和當(dāng)前用戶不相等
$rearr[] = $value; //將該用戶信息保存到新數(shù)組中
}
}
$fp = fopen($file,'w+'); //以只寫(xiě)的方式打開(kāi)文件
foreach($rearr as $value){ //循環(huán)數(shù)組
fwrite($fp,$value); //寫(xiě)入數(shù)組內(nèi)容
}
fclose($fp); //關(guān)閉文件
}
(6)getRows()函數(shù)的作用是返回文件的行數(shù),參數(shù)$file是文件名
function getRows($file){
if(file_exists($file)){ //如果文件存在
$fl = file($file); //將文件按行寫(xiě)入數(shù)組
return count($fl); //求出數(shù)組長(zhǎng)度并返回
}else{
return 0; //如果文件不存在,返回0
}
}
下載:點(diǎn)擊下載源碼
- php+websocket 實(shí)現(xiàn)的聊天室功能詳解
- php基于websocket搭建簡(jiǎn)易聊天室實(shí)踐
- 基于Swoole實(shí)現(xiàn)PHP與websocket聊天室
- php+html5基于websocket實(shí)現(xiàn)聊天室的方法
- php socket實(shí)現(xiàn)的聊天室代碼分享
- 用PHP+MySQL搭建聊天室功能實(shí)例代碼
- php寫(xiě)的簡(jiǎn)易聊天室代碼
- 基于HTTP長(zhǎng)連接的"服務(wù)器推"技術(shù)的php 簡(jiǎn)易聊天室
- 如何用PHP websocket實(shí)現(xiàn)網(wǎng)頁(yè)實(shí)時(shí)聊天
相關(guān)文章
PHP 利用Mail_MimeDecode類(lèi)提取郵件信息示例
重點(diǎn)為one_mail函數(shù)。利用Mail_mimeDecode類(lèi)從郵件中提取郵件頭和郵件正文,具體實(shí)現(xiàn)如下2014-01-01
windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無(wú)效問(wèn)題
在用ThinkPHP開(kāi)發(fā)的網(wǎng)站,在linux服務(wù)器下使用過(guò)一段時(shí)間,一切正常。但是更換到windows服務(wù)器時(shí),發(fā)現(xiàn)搜索的時(shí)候,無(wú)法搜索中文,查不出相應(yīng)的結(jié)果。查看數(shù)據(jù)庫(kù)發(fā)現(xiàn)數(shù)據(jù)是存在的。linux服務(wù)器下正常,而且搜索數(shù)字或字母程序正常,說(shuō)明程序是沒(méi)有任何問(wèn)題的。2023-06-06
PHP偽造來(lái)源HTTP_REFERER的方法實(shí)例詳解
這篇文章主要介紹了PHP偽造來(lái)源HTTP_REFERER的方法,以實(shí)例形式較為詳細(xì)的分析了php偽造來(lái)源HTTP_REFERER的技巧與相關(guān)注意事項(xiàng),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-07-07
php 對(duì)輸入信息的進(jìn)行安全過(guò)濾的函數(shù)代碼
php 對(duì)輸入信息的過(guò)濾代碼,主要是針對(duì)php安全問(wèn)題2012-06-06
解決Laravel blade模板轉(zhuǎn)義html標(biāo)簽的問(wèn)題
今天小編就為大家分享一篇解決Laravel blade模板轉(zhuǎn)義html標(biāo)簽的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
php獲取四位字母和數(shù)字的隨機(jī)數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了php做程序開(kāi)發(fā)的過(guò)程中,我們很多時(shí)候會(huì)在登錄界面或者評(píng)論界面做一些四位數(shù)的驗(yàn)證碼,需要的朋友可以參考下2015-01-01
php組合排序簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了php組合排序簡(jiǎn)單實(shí)現(xiàn)方法,涉及php數(shù)據(jù)結(jié)構(gòu)與數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2016-10-10

