PHP+mysql+ajax简单实现低负载多人聊天室

来源:互联网 发布:软件开发质量保证计划 编辑:程序博客网 时间:2024/06/04 19:47

对于PHP聊天室一直很好奇,今天自己也写一个简单的php+mysql聊天室,ajax主要是用于定时请求数据用的。由于代码简陋,并且定时访问数据库请求数据,mysql负载非常大,只是写着玩玩,并不能拿出来用。也没有敢把源码上传到空间里,免费空间也懒得没有去搞他。本来在写之前打算一起写个人中心有个人资料,和好友私聊功能的。但是由于懒嘛,就没写,之写了这个公众聊天室。也没有什么特色功能。下面贴图贴代码,有兴趣的朋友可以玩一下。
原文地址:http://renpengpeng.com/754.html
登录界面图
登录界面图
首页公众聊天界面图
首页公众聊天就界面图
主要文件

index.php   //聊天界面login.php   //登录界面class.chat.php    //类config.db.php    //存放数据库信息goout.php    //登出界面publicContent.php  //ajax访问的数据信息文件style.css   //美化样式表

index.php

<?phpsession_start();if(!isset($_SESSION['chatname'])){echo "<script>location.href='login.php'</script>";die();}require_once 'config/class.chat.php';?><!DOCTYPE html><html><head><meta charset="utf-8"><title>公众聊天室</title><link href="style.css" rel="stylesheet" type="text/css"><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><link rel="icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" /><link rel="shortcut icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" /></head><body><div class="public_chat_box"><div class="public_chat_nav"><ul><li><img src="img/logo.png"></li><li><a href='javascript:volid(0)'>个人中心</a></li><li><a href='javascript:volid(0)'>好友面板</a></li><li><a href='goout.php'>退出登录</a></li></ul></div><div class="public_chat_show"><?phpinclude 'publicContent.php';?></div><div class="public_chat_say"><form action="" method="post"><label>我要说:</label><input type="text" name="public_say" class="public_say_inp1"><input type="submit" name="public_sub" value="发言" class="public_say_inp2"></form></div></div><?phpif(isset($_POST['public_sub'])){$saycontent = $_POST['public_say'];$sayname = $_SESSION['chatname'];$saytime = date("Y-m-d H:i:s");$insert = new con();$insert_sql = "insert into public(sayname,saycontent,saytime)values('{$sayname}','{$saycontent}','{$saytime}')";$insert_qurey = $insert->query($insert_sql);if(!$insert_qurey){echo "<script>alert('发言失败')</script>";}else {echo "<script>getnr()</script>";}}?><script type="text/javascript">$(function(){function getnr(){$.ajax({url:'publicContent.php',async:'true',cache:'false',success:function(data){$('.public_chat_show').html(data);}});}function IsPC() {var userAgentInfo = navigator.userAgent;var Agents = ["Android", "iPhone","SymbianOS", "Windows Phone","iPad", "iPod"];var flag = true;for (var v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {flag = false;break;}}return flag;}//定时获取数据setInterval(getnr,1000);if(!IsPC()){//根据显示屏来设置对话框的高度var lw = $(window).height();$('.public_chat_show').css('height',lw*0.5);}//设置滚动栏一直在底部$('.public_chat_show').scrollTop( $('.public_chat_show')[0].scrollHeight);})</script></body></html>

login.php

<?phpsession_start();if(isset($_SESSION['chatname'])){echo "<script>location.href='index.php'</script>";die();}require_once 'config/class.chat.php';?><!DOCTYPE html><html><head><title>登录 - 聊天室</title><link href="style.css" rel="stylesheet" type="text/css"><meta charset="utf-8"><link rel="icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" /><link rel="shortcut icon" href="http://localhost/chat/favicon.ico" type="image/x-icon" /></head><body><div class="login_box"><div class="login_title">登录</div><div class="login_tip"></div><div class="login_form"><form action="" method="post"><label>起一个好听的名字吧:</label><br><input type="text" name="login_name" class="login_inp1"><input type="submit" name="login_sub" value="确定" class="login_inp2"><br >(提示:不能包含空格或者大于10个字符)</form></div></div><?phpif(isset($_POST['login_sub'])){$chatname = $_POST['login_name'];$login_yz = new chat();$login_results = $login_yz->yz_chatname($chatname);if($login_results){//可以使用  * 开始设置session  *  插入数据库//准备数据$time = date("Y-m-d");$reg_user = new con();$reg_user_sql = "insert into user(username,time)values('{$chatname}','{$time}')";$reg_user_query = $reg_user->query($reg_user_sql);if(!$reg_user_query){die("未知错误!");}$sz_session = $_SESSION['chatname'] = $chatname;if(!$sz_session){die("未知错误");}echo "<script>location.href='index.php'</script>";}else {echo "<script>alert('可能此用户名已经被占用或者不符合规范哦!请重新输入')</script>";}}?></body></html>

publicContent.php

<?phprequire_once 'config/class.chat.php';$out = new con();$out_sql = "select * from public order by id asc limit 50";$out_query = $out->query($out_sql);echo "<ul>";while($out_arr = mysql_fetch_assoc($out_query)){echo "<li><b>{$out_arr['sayname']}</b>  <small>{$out_arr['saytime']}</small><br><span class='say_con'>{$out_arr['saycontent']}</span></li>";}   echo "</ul>";?>

class.chat.php

<?php/**类文件*/error_reporting(0);//简单封装数据库类class con{private $sql_host;private $sql_lname;private $sql_lpass;private $sql_dbname;private $sql_charset;public $connect;public $select_db;public $sql_arr;public $query_sql;public $query_results;//连接数据库public function __construct(){//引入文件赋值给$this->sql_arr$this->sql_arr = require 'config.db.php';//判断是否引入成功if(!$this->sql_arr){die('获取数据库信息失败');}//引入成功后开始赋值$this->sql_host = $this->sql_arr['sql_host'];$this->sql_lname = $this->sql_arr['sql_lname'];$this->sql_lpass = $this->sql_arr['sql_lpass'];$this->sql_dbname = $this->sql_arr['sql_dbname'];$this->sql_charset  = $this->sql_arr['sql_charset'];$this->connect = mysql_connect($this->sql_host,$this->sql_lname,$this->sql_lpass);if(!$this->connect){die('数据库连接失败');} $this->select_db = mysql_select_db($this->sql_dbname);if(!$this->select_db){die('数据库选择失败');}mysql_query("set names {$this->sql_charset}");}//简单操作类public function query($query_sql){$this->query_sql = $query_sql;if(empty($this->query_sql)){die('没有传入值');}$this->query_results = mysql_query($this->query_sql);if(!$this->query_results){die('执行失败');}return $this->query_results;}public function __destruct(){if($this->connect){mysql_close($this->connect);}}}//开始聊天室操作类class chat{public $chatname;public $yz_chatname;//验证session用户名是否存在public function yz_chatname($chatname){$this->chatname = $chatname;if(empty($this->chatname)){return false;}if(strlen($this->chatname) > 30){return false;}if(preg_match("/\s/", $this->chatname)){return false;}$sql_jc = new con();$sql_sql = "select * from user where username = '{$this->chatname}'";$sql_result = $sql_jc->query($sql_sql);if(mysql_num_rows($sql_result) >= 1){return false;}else {return true;}}//取出公众发言记录}?>

config.db.php

<?php//数据库配置文件return array('sql_host'=>'localhost','sql_lname'=>'root','sql_lpass'=>'root','sql_dbname'=>'chat','sql_charset'=>'utf8');?>

goout.php

<?phpsession_start();unset($_SESSION['chatname']);echo "<script>location.href='login.php'</script>";?>

所有文件压缩包下载地址:chat.zip