无聊情况下,看能用比较少的代码构建聊天室,一开始写了整整100行把聊天室内完成,后来觉得很多功能没有,又重新修改,加了不少代码。其实不利用特别复杂的技术,比如模板、数据库等等,一样能做比较不错的聊天室,适合个人使用。
基本功能:能登陆,聊天,记录在线人数IP事件,能控制聊天的字体颜色,自动把转化聊天中网址为链接地址,能定制聊天室标题、广告信息等等。使用文本作为存储媒体,又兴趣可以参考代码,并且进行扩展。
其实PHP作为快速开发的脚本语言是很棒的!
===代码===
1
2/**
3* 黑夜路人简易聊天室
4* 作者: 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." ] © 2005</h3></p>
<p align="center">
<form ?action="login" action=".SCRIPT." method="post">
呢称: <input maxlength="30" name="login_user" size="25" type="text"/>
<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 frameborder="0" height="450" name="show_win" scrolling="auto" src='".SCRIPT."?action=show' width="800"></iframe></div><br/>
<marquee scrollamount="2" width="70%"> ".AD_MSG." </marquee> [当前在线:$online_sum]
<iframe frameborder="0" height="60" name="say_win" scrolling="no" src='".SCRIPT."?action=say' width="800">
";
}
//说话界面
if ($action=="say")
{
echo "<head><title>[ ".CHAT_NAME." ]</title></head><center><body bgcolor="#C4BFB9" style="font-size:12px;">
<form ?action="save" action=".SCRIPT." method="post" name="chat" onsubmit="return check()">
[".$_SESSION['username']."]说:<input maxlength="500" name="chatmsg" size="80" style=" background-color:#99CC99; width:550px; height:22px; border:1px solid:#000000" type="text"/>
<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 style="background-color:#ffffff" type="submit" value="说话"/> <a ?action="logoff" href=".SCRIPT." onclick='return confirm("你确定要退出聊天室吗?")' target="_top" title="退出聊天室">退出</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 onload="scrollit()" style="font-size:12px">";
echo "<meta content='".REF_TIME.";URL=".SCRIPT."?action=show' http-equiv="REFRESH"/>";
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;
}