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

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/284827.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 15:42
下一篇 2024-12-22 15:42

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種資料庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論