• 售前

  • 售后

热门帖子
入门百科

PHP谈天室简朴实现方法详解

[复制链接]
123457108 显示全部楼层 发表于 2021-10-26 13:31:06 |阅读模式 打印 上一主题 下一主题
本文实例陈诉了PHP聊天室简朴实现方法。分享给大家供大家参考,详细如下:
用户 => 客服 (先把信息入库,然后通过ob+长毗连不停从数据库查询数据发送给客服)
客服 => 用户 (先吸收用户信息,然后把复兴信息入库,末了通过ajax轮询不停请求数据,显示到用户聊天界面)
【注意:】假如全部页面搭建好,先链接客服聊天页面(server.php) ,接着再链接用户页面(client.php)
附图分析:

第一步:建表
分析: rec : 吸收信息方, sender : 发送信息方, content : 发送内容 , is_new : 作为标志,1是 新信息 2是 已读信息 (默认是1)
  1. CREATE TABLE `chat_log` (
  2. `log_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `rec` varchar(10) NOT NULL COMMENT '接受方',
  4. `sender` varchar(10) NOT NULL COMMENT '发送方',
  5. `content` text NOT NULL COMMENT '发送内容',
  6. `is_new` tinyint(4) NOT NULL DEFAULT '1' COMMENT '信息 1新信息 0 已读信息',
  7. PRIMARY KEY (`log_id`,`rec`)
  8. ) ENGINE=MyISAM AUTO_INCREMENT=105 DEFAULT CHARSET=utf8 COMMENT='用户客服聊天轮询表'
复制代码
第二步:链接数据库 : connect.php
  1. $link = mysql_connect('localhost', 'root', '');
  2. mysql_query("set names utf8");
  3. mysql_select_db("chat");
复制代码
第三步:用户聊天界面: client.php
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <title>User窗口</title>
  6.   <style>
  7.     #user {
  8.       width: 440px;
  9.       height: 300px;
  10.       border: 1px solid blue;
  11.     }
  12.   </style>
  13.   <script src='http://code.jquery.com/jquery-latest.js'></script>
  14.   <script>
  15.     $(function () {
  16.       $("#btn").click(function () {
  17.         var content = $("textarea").val();
  18.         if(content == ''){alert('发送内容不能为空');return;}
  19.         // 发送给客服
  20.         <!-- 把提交数据通过toServer.php存入数据库-->
  21.         $.post("toServer.php", {'msg':content}, function (res) {
  22.           var obj = JSON.parse(res);
  23.           $("#user").append("<b>你向客服发送:</b>" + obj + "<br>");
  24.           $("textarea").val(" ");
  25.         });
  26.       });
  27.       // 用ajax轮询方式 从数据库获取 客服是否有发送消息给用户
  28.       var polling = {
  29.         "url"   : 'fromServer.php',
  30.         "dataType" : 'json',
  31.         success  : function (res) {
  32.           //ajax请求返回的数据
  33.           var obj = res;
  34.           //追加到User聊天的页面
  35.           $("#user").append("<b style='color:red'>客服回复:" + obj.content + "</b><br>");
  36.           $.ajax(polling);
  37.         }
  38.       };
  39.       $.ajax(polling); //轮询发送ajax请求
  40.     })
  41.   </script>
  42. </head>
  43. <body>
  44.   <iframe src="" width="0" height="0" frameborder="0"></iframe>
  45.   <h3>与客服聊天窗口</h3>
  46.   <div contenteditable="true" id="user"></div>
  47.   <div>
  48.     <textarea name="msg_list" id="" cols="60" rows="15"></textarea>
  49.     <button id="btn" type="button">send..</button>
  50.   </div>
  51. </body>
  52. </html>
复制代码
第四:用户发送信息入库 + ajax轮询查询有无客服复兴信息
toServer.php
  1. require('connect.php');
  2. $msg = htmlspecialchars($_POST['msg'], ENT_QUOTES);
  3. $sql = "INSERT INTO `chat_log` (rec, sender, content) VALUES('admin', 'user', '$msg' )";
  4. mysql_query($sql, $link);
  5. echo json_encode($msg);
复制代码
fromServer.php
  1. require('connect.php');
  2. set_time_limit(0);//永不超时
  3. while (true){
  4.     $sql = "SELECT * FROM `chat_log` WHERE rec='user' AND is_new=1 ORDER BY log_id DESC LIMIT 1";
  5.     $res = mysql_query($sql, $link);
  6.     if($row = mysql_fetch_assoc($res)){
  7.       $sql = "UPDATE `chat_log` SET is_new=0 WHERE log_id=".$row['log_id'];
  8.       mysql_query($sql,$link);
  9.       die(json_encode($row));
  10.     }
  11. }
复制代码

第五步: 客服聊天页面 server.php
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <title>客服窗口</title>
  6.   <style>
  7.     #server {
  8.     width: 440px;
  9.     height: 300px;
  10.     border: 1px solid blue;
  11.     }
  12.   </style>
  13.   <script src='http://code.jquery.com/jquery-latest.js'></script>
  14.   <!-- 进行ob缓存输出 -->
  15.   <script>
  16.     function showMsg(res) {
  17.       var obj = eval(res);
  18.       $("#server").append("<b style='color:red'>User向你发送:" + obj.content + "</b><br/>");
  19.     }
  20.     //回复User信息
  21.     $(function () {
  22.       $("#btn").click(function () {
  23.         var content = $("textarea").val();
  24.         //客服发送的信息通过toClient.php存入数据库
  25.         $.post("toClient.php", {'msg':content},function (res) {
  26.           var obj = JSON.parse(res);
  27.           $("#server").append("你向User发送:" + obj+ "<br>");
  28.           $("textarea").val("");
  29.         })
  30.       });
  31.     })
  32.   </script>
  33. </head>
  34. <body>
  35.   <iframe src="./fromClient.php" width="0" height="0" frameborder="0"></iframe>
  36.   <h3>与User聊天窗口</h3>
  37.   <div contenteditable="true" id="server"></div>
  38.   <div>
  39.     <textarea name="msg_list" id="" cols="60" rows="15"></textarea>
  40.     <button id="btn" type="button">send..</button>
  41.   </div>
  42. </body>
  43. </html>
复制代码
第六步: 客服查询数据库有无用户发送信息 + 发送信息给用户
fromClient.php
  1. require('connect.php');
  2. ob_start();       //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面
  3. echo str_repeat('', 4096);
  4. ob_end_flush();     //发送内部缓冲区到浏览器,删除缓冲区内容,关闭缓冲区
  5. ob_flush();       //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区
  6. set_time_limit(0);//永不超时
  7. while(true){
  8.     $sql = "select * from `chat_log` where rec= 'admin' and is_new= 1 ORDER BY log_id DESC LIMIT 1 ";
  9.     $res = mysql_query($sql, $link);
  10.     if($row = mysql_fetch_assoc($res)){
  11.       $sql = "UPDATE `chat_log` SET is_new=0 where log_id=".$row['log_id'];
  12.       mysql_query($sql, $link);
  13.       echo "<script>parent.showMsg(".json_encode($row).")</script>";
  14.       ob_flush();
  15.       flush();      //将ob_flush释放出来的内容,以及不在PHP缓冲区中的内容,全部输出至浏览器;刷新内部缓冲区的内容,并输出
  16.       sleep(1);
  17.     }
  18. }
复制代码
toClient.php
  1. require('connect.php');
  2. $msg = htmlspecialchars($_POST['msg'], ENT_QUOTES);
  3. if(!empty($msg)){
  4.     $sql = "insert into chat_log(rec, sender, content) values('user', 'admin', '$msg')";
  5.     mysql_query($sql);
  6.     echo json_encode($msg);
  7. }
复制代码
这里我在电脑上运行(server.php和client.php)聊天,一开始卡得不行,过一会好了之后就正常聊天了,只是不太清楚原因,有知道的朋侪贫苦告诉一下我,感激不尽!
(我理解的是由于长毗连导致的)
更多关于PHP相关内容感兴趣的读者可查察本站专题:《PHP+MySQL留言板开辟专题》、《PHP+ajax技巧与应用小结》、《php文件操作总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象步伐设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
盼望本文所述对大家PHP步伐设计有所资助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作