我爱电脑技术论坛's Archiver

白雪公主 发表于 2008-6-19 13:41

PHP程序百行代码快速构建简易聊天室方法

基本功能:能登陆,聊天,记录在线人数IP事件,能控制聊天的字体颜色,自动把转化聊天中网址为链接地址,能定制聊天室标题、广告信息等等。使用文本作为存储媒体,又兴趣可以参考代码,并且进行扩展。
~gVC9T_%]3^ H ]T1v,h:x!`2@n
\Rf UX
其实PHP作为快速开发的脚本语言是很棒的! 8X;uADE^#M-q ^5[Z

l vJv ~+VN)E
?Q.d8cd2Wj:SsW ===代码=== HU \uC4~]~a

-?5ac~-p0Y _ r
]-p4Gy e:m6N.Q
NB#oL:a] s <?php
Kg'xH%Q`t e /**
r5zkg0N dF!d.o4N(t * 黑夜路人简易聊天室;p)@%l.S8X-p
* 作者: heiyeluren <heiyeluren_at_163.com>w P+w"s,][2K
* 创建: 2005-8-10 22:42
"DC_ B n * 修改: 2005-8-11 23:25{#_{^$?
*/;Fh&sy l/cv+U0hob
error_reporting(7);MpYXf-f0Z?
session_start();8V7\ V)mC5N\
header("ContentType:text/html;charset=gb2312"); G(c{9mU h#P
define("SCRIPT", $_SERVER['SCRIPT_NAME']);ckFD!xm
define("CHAT_NOTE", "./chat.txt");
kD(Ts0g*gcL)D,^t define("ONLINE_LIST", "./online.txt");
},k~;Dp4_#Av define("REF_TIME", 5);KY+AHwY.Qk;Q
define("CHAT_NAME", "黑夜路人聊天室");
;XYj d~D@ F8V Z Sm define("AD_MSG", "今天是中国情人节, 祝大家情人节快乐!!");
}&`z1`w4U1x
7gY*Q?Wy@4Nb l4A7Z //获取值
%_7? I-}k2~ if (isset($_GET['action']) && !empty($_GET['action'])) {
a#^y8c }tv~ $action = $_GET['action'];I&NId3]NjQ g
}'p*fw z x:oLp c

cg L0Uk.K //如果已经登陆那么直接跳到聊天界面bRmji
if (!isset($_GET['action']) && isset($_SESSION['username'])) {
r&PB fo'V6| header("location:".SCRIPT."?action=chat");Tq}D;z*|6\%p
}
`/S}n x3^l:E
Bw5MF3d/J;i6y //登陆提示E&K,wk?#{ h9eFn
if (!isset($_GET['action']))
|v?(b6J {U.BE,odG
if (!session_is_registered('username'))
3`8Sw9{T {
{THQm7^,o8Ag4X   echo " <p><h3 align=center>[ ".CHAT_NAME." ] &copy; 2005</h3></p>q6p.qAU
   <p align=center>
vF7j(I2R/N    <form action=".SCRIPT."?action=login method=post>,n6MW9T8c A/~
   呢称: <input type=text size=25 maxlength=30 name=login_user>
Z{6E-O(`j'E/Z    <input type=submit value=聊天>
O"`^Ag C7h.rL    </form></p>
%u_u}@3Lum    ";s6v,U n7K2H
  exit;
g5g,X/n nyWM;OF }n D/CW}D4]
}
A6O1OS*f/n9p q*q _N9R
//校验登陆F(o%b(j+Q!N7}s
if ($action=='login')
9bs;gL+@G{ {
;?qBd:Gi:YCS)m if (isset($_POST['login_user']) && !empty($_POST['login_user'])) {R zG%N c:@
  $username = $_POST['login_user'];2\Y?@.p/o+?]
} else {w$X ^)w/]IzW8]
  $username = "游客";
-`.B(QX*f-Zz*t }3_:x)S Q|
session_register('username');2x iM'jM9Y)p
save_online($username, get_client_ip());C4nB[c#K
header("location:".SCRIPT."?action=chat");
!l'K*q,GT'j }
'a$X1}T.^-j(@8[;T1S 7YLvFY'Z\)F(J
//开始聊天[url]www.knowsky.com[/url]
;U N:n,Y!^O$Cv if ($action=="chat") _as/eJ[ Z
{KLt5{q0G5t
$online_sum = get_online_sum();(x wy9D)]eq7C h
echo "<head><title>[ ".CHAT_NAME." ]</title></head><center>
&Fw:F4b3x4aK)j7a0] <body bgcolor=#C4BFB9 style='font-size:12px;'>U+sk.e Kx!~^nfx
   <div style='border:1px solid #999966; width:802px;height:450'>
f iW*P(h{D[ <iframe src='".SCRIPT."?action=show'g'uG0c2Zs&w
name=show_win width=800 height=450 scrolling=auto frameborder=0></iframe>
,y| w WuOTV0a </div><br>8UB C9Q!hsh
   <marquee width=70% scrollamount=2> ".AD_MSG." </marquee>&nbsp;&nbsp;
-BHhHf$v [当前在线:$online_sum]
8FHP8F(L}G2KP    <iframe src='".SCRIPT."?action=say' name=say_win width=800-|3h g5GMf*R/Pi
height=60 scrolling=no frameborder=0>%uSnX Z,j^
";9@A m+Z-pD
}"YC9KW O0I {n8yW
?` jxpLA{
//说话界面
/S{[~t CK!c3s if ($action=="say")
q,XVJ#B a9}aq4z {

白雪公主 发表于 2008-6-19 13:42

echo "<head><title>[ ".CHAT_NAME." ]</title></head><center> gk-B e0P&Yo
<body bgcolor=#C4BFB9 style='font-size:12px;'>~+kE;[aw
  <form action=".SCRIPT."?action=save method=post name=chat4l"o]Lr
onSubmit='return check()'> t"lB7Vf D*n g1}
  [".$_SESSION['username']."]说:<input type=text size=80
;^BA|b&kb"B? maxlength=500 name=chatmsg style=' background-color:#99CC99;*V$NaC'n!S0@4K)m]+e
width:550px; height:22px; border:1px solid:#000000'>
"]k3F I.i0i:x-SS   <select name=usercolor> @7v1Q%Q8tW
  <OPTION selected style='COLOR: #000000' value='000000'>默认颜色</OPTION> QND2j"LMPz
  <OPTION style='COLOR: #000000' value='#000000'>黑色沉静</OPTION>
l5{P1m5o f   <option style='COLOR: #ff0000' value='#FF0000'>红色热情</option>
2ocou1v j   <option style='COLOR: #0000ff' value='#0000FF'>蓝色开朗</option> p#V+|6Y!Y`({8K0M)_
  <option style='COLOR: #ff00ff' value='#FF00FF'>桃色浪漫</option> ;ut/jt0P*uf6Jw#L
  <option style='COLOR: #009900' value='#009900'>绿色青春</option>
.Q8S*B?1I hm   <option style='COLOR: #009999' value='#009999'>青色清爽</option>
B@,UIT6uFs   <option style='COLOR: #990099' value='#990099'>紫色拘谨</option> o``9M%xv,?fk
  <option style='COLOR: #990000' value='#990000'>暗夜兴奋</option> pf qT iM)s%s4q:E@r
  <option style='COLOR: #000099' value='#000099'>深蓝忧郁</option> 9J wJ0ch_r[_'M#Lb
  <option style='COLOR: #999900' value='#999900'>卡其制服</option>
,j|/w2[{o   <option style='COLOR: #ff9900' value='#FF9900'>镏金岁月</option> ^ ^)naev*j
  <option style='COLOR: #0099ff' value='#0099FF'>湖波荡漾</option> 2j4q t{)E,|p
  <option style='COLOR: #9900ff' value='#9900FF'>发亮蓝紫</option>
Wy_q2X^j2zg%t   <option style='COLOR: #ff0099' value='#FF0099'>爱的暗示</option> F:b)bM2F
  <option style='COLOR: #006600' value='#006600'>墨绿深沉</option>
0R[ Xt])vP~-zi   <option style='COLOR: #333333' value='#333333'>灰色轨迹</option>
9onu2u B[H   <option style='COLOR: #999999' value='#999999'>伦敦灰雾</option> s4})a`4c7~7@
  </select>&TG*FE$]/{|8L
  <input type=submit value='说话' style='background-color:#ffffff'>er Ha`H7R8?}
<a href=".SCRIPT."?action=logoff title=退出聊天室6fJj,wbt [
target=_top onclick='return confirm(\"你确定要退出聊天室吗?\")'>退出</a>Be S&G uX
  </form>J'mp']4]$\oo
  <script>function check(){if(document.chat.chatmsg.value=='')
xOz0G0E#W {;alert('请输入聊天信息!');return false;}return true;}</script> xL0JKM#o
  ";
Ro2Uap }2mym9K#t/QLC
DP.T%^1Y3m%tN!fC*f
//保存说话E j.tu`u4ex
if ($action=="save")la4]4n4N[
{cu%kRjx
if ($_POST['chatmsg']!="") {
@ndMSI   save_chat($_POST['chatmsg'], $_SESSION['username'], $_POST['usercolor']);
:jck7m1ij#P }!HVtj$[ q
header("location:".SCRIPT."?action=say");F~:c*@nAVX
}
])k D scm%@
&ZJ w8O3f'GN //显示聊天记录
cc3iz"`c if ($action=="show")e&[K@S/S!H2C*R2x
{P/H7og/zSEA-WC)l
echo "<body style='font-size:12px' onload='scrollit()'>";
0K4]`ea&VT h W$f echo "<META HTTP-EQUIV=REFRESH
q,cC _.a CONTENT='".REF_TIME.";URL=".SCRIPT."?action=show'>";
(j l~Iw.WT2w/Q8yB*W&y if (file_exists(CHAT_NOTE)) {(Y}RqV Q
  $chat_msg = @file_get_contents(CHAT_NOTE);
Ur1]l aJp   echo $chat_msg;
D [y9y1O } else {
G ](pOpT/J?3_q   echo "目前没有人说话";'lV(x-g5~
}
s9X [U6]ys/z }
,x"E*h'\ b&|W3DHK F"h.o1sBU7E
//退出聊天室
RI F$btZ)]LO,} if ($action=="logoff")@J1?2K~,AB
{
mwss]H'ih"q unset($_SESSION['username']);"Ki+\%i T,b }#r9i}
session_destroy();us*Yq*w8`7U(Z
header("location:".SCRIPT);
n8J(R0S{b }W'D%lh(P!Q9M

rs O y ktPB.L /* 基本函数 */ v1~8{v F ?jr#A

"~1okgP8r}2T8y3K //保存聊天记录函数
(b\8@*T s a5L function save_chat($msg, $user, $color)
J,lP0^q)Ggq~ {
$bBw2[cj9y U Z if (!$fp = fopen(CHAT_NOTE, "a+")) {
4aX@h6CsP7D&S^   die('创建聊天记录文件失败, 请检查是否有权限.');
TV6HU [ O7| Nk }
qHN\ _ O $msg = htmlspecialchars($msg);6R#lk;^)r6?:U5ar
$msg = preg_replace('/([http|ftp:\/\/])*([a-zA-])
b0tEYV +\.([a-zA-Z0-9_-])+\.([a-zA-Z0-9_-])+(a-zA-Z0-9_)*/', '\.s/})F{rGd q
<a href=\\0 target=_blank>\\0</a>', $msg);6q(r,qjvE
$msg = preg_replace('/([a-zA-Z0-9_\.])+@([a-zA-Z0-9-])e-[.S(iKo*s"^
+\.([a-zA-Z0-9-]{2,4})+/', '<a href=mailto:\\0>\\0</a>', $msg);0sLS v`%pv
$msg = date('H:i:s')." [".$user."]说:
m!V|j"\x n&_r <font color='".$color."'>".$msg."</font><br>\r\n";
pHh x`jkJ if (!fwrite($fp, $msg)) {1_Umx-q
  die('写入聊天记录失败.');
1yGoG/b@^ T }
f%}]8Cp!KG fclose($fp);;g6RN8t,t8I,h
}
q*T#XK H!K //写在线人信息*P(aLP6x
function save_online($user, $ip)
9a x0n7t)?D3Xu}"l {
~5_)P&K8S"E1R` if (!$fp = fopen(ONLINE_LIST, "a+")) {
IZ"nzZ"e   die("创建在线列表文件失败, 请检查是否有权限.");
8eTP h?CP }-O,DJ`Tv3p Py(L
$user = str_replace("|", "", $user); M^ a}#Yj
$line = $user."|".$ip."|".time()."\r\n";/e8V I~"jh
if (!fwrite($fp, $line)) {
I0?C6a2?%x   die("写入在线列表失败.");"WXV)w'R
}E&T L7k6w)|
fclose($fp);
1_%r1?D:Y+Q }1{(S.R$A5mi9y
//获取在线人数S8Y,u"O;`|(G*Qq0l9UE
function get_online_sum()
B8[hM|~ @-tc;k {
-i}9G&Y-T'd/gL if (file_exists(ONLINE_LIST)) {
r3Rp5hV   $online_msg = file(ONLINE_LIST);
z1J ~ O[;W'b   return count($online_msg);hp+Le[|M0j+E
} else { a$d3Ih9QR%Rc{
  return 0;
nV:\R/i7W }
/zko7IIZ W }(M9cE6BQl;r
//获取当前登陆用户IP
Q9l@0d/j9}WL?/| function get_client_ip()
R-Oj:mc G {J'k;X/\"@*A2|7K
if ($_SERVER['REMOTE_ADDR']) {
v g4uS9o] uO   $cip = $_SERVER['REMOTE_ADDR'];
J$S)P k+{'Bh2Rq } elseif (getenv("REMOTE_ADDR")) {
OM[m`F3W'pvq   $cip = getenv("REMOTE_ADDR");GI7BcJ
} elseif (getenv("HTTP_CLIENT_IP")) {,Y-l(^/Xu&}z6b
  $cip = getenv("HTTP_CLIENT_IP");.}#[%q|0i8]"{O
} else {)Zn7vgQ)Wt
  $cip = "unknown"; g)z {/X5o-Y s
}8Y'n]ZyWH ec
return $cip; Hz0Z,Xt,@ K9`
}4@n&fWnH
?>

jixian 发表于 2008-9-22 13:25

原来不能直接复制的啊,复制到文本文件上出来好多乱码---这技术不错哦!

炼域人生 发表于 2008-9-22 23:00

路过  支持下。。。

页: [1]
   

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.