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

对于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

<?php
session_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">
<?php
include '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>
<?php
if(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

<?php
session_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>
<?php
if(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

<?php
require_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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值