首页 > 开发 > PHP > 正文

PHP百行代码快速构建简易聊天室

2024-05-04 22:59:56
字体:
来源:转载
供稿:网友

 

无聊情况下,看能用比较少的代码构建聊天室,一开始写了整整100行把聊天室内完成,后来觉得很多功能没有,又重新修改,加了不少代码。其实不利用特别复杂的技术,比如模板、数据库等等,一样能做比较不错的聊天室,适合个人使用。

基本功能:能登陆,聊天,记录在线人数ip事件,能控制聊天的字体颜色,自动把转化聊天中网址为链接地址,能定制聊天室标题、广告信息等等。使用文本作为存储媒体,又兴趣可以参考代码,并且进行扩展。

其实php作为快速开发的脚本语言是很棒的!

===代码===

<?php
/**
 * 黑夜路人简易聊天室
 * 作者: heiyeluren <heiyeluren_at_163.com>
 * 创建: 2005-8-10 22:42
 * 修改: 2005-8-11 23:25
 */
error_reporting(7);
session_start();
header("contenttype:text/html;charset=gb2312");
define("script", $_server['script_name']);
define("chat_note", "./chat.txt");
define("online_list", "./online.txt");
define("ref_time", 5);
define("chat_name", "黑夜路人聊天室");
define("ad_msg", "今天是中国情人节, 祝大家情人节快乐!!");

//获取值
if (isset($_get['action']) && !empty($_get['action'])) {
 $action = $_get['action'];
}

//如果已经登陆那么直接跳到聊天界面
if (!isset($_get['action']) && isset($_session['username'])) {
 header("location:".script."?action=chat");
}

//登陆提示
if (!isset($_get['action']))
{
 if (!session_is_registered('username'))
 {
  echo " <p><h3 align=center>[ ".chat_name." ] &copy; 2005</h3></p>
   <p align=center>
   <form action=".script."?action=login method=post>
   呢称: <input type=text size=25 maxlength=30 name=login_user>
   <input type=submit value=聊天>
   </form></p>
   ";
  exit;
 }
}

//校验登陆
if ($action=='login')
{
 if (isset($_post['login_user']) && !empty($_post['login_user'])) {
  $username = $_post['login_user'];
 } else {
  $username = "游客";
 }
 session_register('username');
 save_online($username, get_client_ip());
 header("location:".script."?action=chat");
}

//开始聊天
if ($action=="chat")
{
 $online_sum = get_online_sum();
 echo "<head><title>[ ".chat_name." ]</title></head><center><body bgcolor=#c4bfb9 style='font-size:12px;'>
   <div style='border:1px solid #999966; width:802px;height:450'><iframe src='".script."?action=show' name=show_win width=800 height=450 scrolling=auto frameborder=0></iframe></div><br>
   <marquee width=70% scrollamount=2> ".ad_msg." </marquee>&nbsp;&nbsp; [当前在线:$online_sum]
   <iframe src='".script."?action=say' name=say_win width=800 height=60 scrolling=no frameborder=0>
 ";
}

//说话界面
if ($action=="say")
{
 echo "<head><title>[ ".chat_name." ]</title></head><center><body bgcolor=#c4bfb9 style='font-size:12px;'>
  <form action=".script."?action=save method=post name=chat onsubmit='return check()'>
  [".$_session['username']."]说:<input type=text size=80 maxlength=500 name=chatmsg style=' background-color:#99cc99; width:550px; height:22px; border:1px solid:#000000'>
  <select name=usercolor>
  <option selected style='color: #000000' value='000000'>默认颜色</option>
  <option style='color: #000000' value='#000000'>黑色沉静</option>
  <option style='color: #ff0000' value='#ff0000'>红色热情</option>
  <option style='color: #0000ff' value='#0000ff'>蓝色开朗</option>
  <option style='color: #ff00ff' value='#ff00ff'>桃色浪漫</option>
  <option style='color: #009900' value='#009900'>绿色青春</option>
  <option style='color: #009999' value='#009999'>青色清爽</option>
  <option style='color: #990099' value='#990099'>紫色拘谨</option>
  <option style='color: #990000' value='#990000'>暗夜兴奋</option>
  <option style='color: #000099' value='#000099'>深蓝忧郁</option>
  <option style='color: #999900' value='#999900'>卡其制服</option>
  <option style='color: #ff9900' value='#ff9900'>镏金岁月</option>
  <option style='color: #0099ff' value='#0099ff'>湖波荡漾</option>
  <option style='color: #9900ff' value='#9900ff'>发亮蓝紫</option>
  <option style='color: #ff0099' value='#ff0099'>爱的暗示</option>
  <option style='color: #006600' value='#006600'>墨绿深沉</option>
  <option style='color: #333333' value='#333333'>灰色轨迹</option>
  <option style='color: #999999' value='#999999'>伦敦灰雾</option>
  </select>
  <input type=submit value='说话' style='background-color:#ffffff'> <a href=".script."?action=logoff title=退出聊天室 target=_top onclick='return confirm(/"你确定要退出聊天室吗?/")'>退出</a>
  </form>
  <script>function check(){if(document.chat.chatmsg.value==''){;alert('请输入聊天信息!');return false;}return true;}</script>
  ";
}

//保存说话
if ($action=="save")
{
 if ($_post['chatmsg']!="") {
  save_chat($_post['chatmsg'], $_session['username'], $_post['usercolor']);
 }
 header("location:".script."?action=say");
}

//显示聊天记录
if ($action=="show")
{
 echo "<body style='font-size:12px' onload='scrollit()'>";
 echo "<meta http-equiv=refresh content='".ref_time.";url=".script."?action=show'>";
 if (file_exists(chat_note)) {
  $chat_msg = @file_get_contents(chat_note);
  echo $chat_msg;
 } else {
  echo "目前没有人说话";
 }
}

//退出聊天室
if ($action=="logoff")
{
 unset($_session['username']);
 session_destroy();
 header("location:".script);
}

/* 基本函数 */

//保存聊天记录函数
function save_chat($msg, $user, $color)
{
 if (!$fp = fopen(chat_note, "a+")) {
  die('创建聊天记录文件失败, 请检查是否有权限.');
 }
 $msg = htmlspecialchars($msg);
 $msg = preg_replace('/([http|ftp:////])*([a-za-])+/.([a-za-z0-9_-])+/.([a-za-z0-9_-])+(a-za-z0-9_)*/', '<a href=//0 target=_blank>//0</a>', $msg);
 $msg = preg_replace('/([a-za-z0-9_/.])[email protected]([a-za-z0-9-])+/.([a-za-z0-9-]{2,4})+/', '<a href=mailto://0>//0</a>', $msg);
 $msg = date('h:i:s')." [".$user."]说: <font color='".$color."'>".$msg."</font><br>/r/n";
 if (!fwrite($fp, $msg)) {
  die('写入聊天记录失败.');
 }
 fclose($fp);
}
//写在线人信息
function save_online($user, $ip)
{
 if (!$fp = fopen(online_list, "a+")) {
  die("创建在线列表文件失败, 请检查是否有权限.");
 }
 $user = str_replace("|", "", $user);
 $line = $user."|".$ip."|".time()."/r/n";
 if (!fwrite($fp, $line)) {
  die("写入在线列表失败.");
 }
 fclose($fp);
}
//获取在线人数
function get_online_sum()
{
 if (file_exists(online_list)) {
  $online_msg = file(online_list);
  return count($online_msg);
 } else {
  return 0;
 }
}
//获取当前登陆用户ip
function get_client_ip()
{
 if ($_server['remote_addr']) {
  $cip = $_server['remote_addr'];
 } elseif (getenv("remote_addr")) {
  $cip = getenv("remote_addr");
 } elseif (getenv("http_client_ip")) {
  $cip = getenv("http_client_ip");
 } else {
  $cip = "unknown";
 }
 return $cip;
}
?>

 

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表