王朝网络
分享
 
 
 

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

王朝php·作者佚名  2006-05-27
宽屏版  字体: |||超大  

无聊情况下,看能用比较少的代码构建聊天室,一开始写了整整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_\.])+@([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;

}

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有