首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>php>php技巧>正文

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

http://www.oklinux.cn  2006-08-04  来源:  phpchina     会员收藏  游客收藏  【 】 

无聊情况下,看能用比较少的代码构建聊天室,一开始写了整整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");
}

//开始聊天www.knowsky.com
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_\.])+@([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;
}
?>


上一篇:将Oracle 10g内置的安全特性用于PHP   下一篇:xml+php动态载入与分页


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·将Oracle 10g内置的安全特性用于PHP
·xml+php动态载入与分页
·PHP.MVC的模板标签系统(五)
·PHP5 & Web Services 系统架构图
·解决PHP startup: Unable to load dynamic library的
·PHP.MVC的模板标签系统(四)
·PHP.MVC的模板标签系统(三)
·PHP and Web Services
·PHP.MVC的模板标签系统(二)
·深入研究表单提交方式:GET/POST
·PHP.MVC的模板标签系统(一)
·php5中XML-RPC函数的使用
·一 php与XML、XSLT、Mysql的结合运用,安装篇
·SQLite语法备忘录
·二 php与XML、XSLT、Mysql的结合运用,代码篇
·phplib7.2中文汉化版及调用示例
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·PHP之COOKIE支持详解
·PHP中的类
·php中文处理函数
·通过ODBC连接的SQL
·两个日期类
·面向对象编程
·面向过程与面向对象的简单比较
·判断WebSERVER类型
·屏蔽浏览器缓存另类方法
·日历类
·如何文档化你的PHP类
·使用PHP4中的 IntegratedTemplate类实
  阅读排行
·PHP之COOKIE支持详解
·PHP 应用程序配置模式
·用 PHP 读取文件的正确方法
·利用单元测试对PHP 代码进行检查
·五个常见 PHP 数据库问题
·用 PHP V4 开发的代码迁移到 PHP V5
·使用PHP 快速生成Flash 动画
·Linux系统下PHP服务器安全配置技巧
·Linux操作系统下的多线程编程详细解析
·用PHP读取和编写XML DOM
·用Pear加速PHP程序开发
·如何用PHP调用自己编写的COM组件?
·PHP面向对象编程快速入门
·为 Linux 和 Windows 安装 PHP 和 Orac
·终于实现简体转繁体,繁体到转体
网摘收藏: