设为首页 收藏本站
查看: 817|回复: 0

[经验分享] PHP百行代码快速构建简易聊天室

[复制链接]

尚未签到

发表于 2017-4-10 12:14:25 | 显示全部楼层 |阅读模式
  无聊情况下,看能用比较少的代码构建聊天室,一开始写了整整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'>";
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;
}
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-362928-1-1.html 上篇帖子: php学习笔记(正侧表达式一) 下篇帖子: php 检测浏览器版本和操作系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表