捌玖网络工作室's Archiver

lilcy88 发表于 2008-5-28 10:40

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
h(Cy/n^pOjL8a 我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。*PAc7ljhax
首先我创建MYSQL数据库表。
xC.D/L3c!} CREATE TABLE tablename (
+@e%]utN8P field type(max_length) DEFAULT 'default_value' (NOT) NULL tgl B_ t8s
}可以使用的SQL语句。
g8S `'QY C$p CREATE TABLE useronline (o ]6qf8~(uE
timestamp int(15) DEFAULT '0' NOT NULL,
2Equ^&JA~F ip varchar(40) NOT NULL,
ir$]~;n3[#om4e file varchar(100) NOT NULL,
];X _?p0h(@ PRIMARY KEY (timestamp),$W n KdHB7@v#z
KEY ip (ip),$q;A2HU yl dI\ e
KEY file (file)&p&[0EX w5]
);下面我们是PHP脚本,首先我定义MYSQL的信息。
LO+w/F/~ Gj;D [PU $server = "localhost"; //你的服务器6m-~0f s\^
$db_user = "root"; //你的mysql的用户名
?FP#jag B K&] s $db_pass = "password"; //你的mysql的密码
[WdKn A $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
@;HuF9n4W#[$U $timeoutseconds = 300;取当前时间。+W EN Q*ia
$timestamp = time();上面的完整代码:D3|F|G$zqp/Y
<?php
QeI+J!?D $server = "localhost"; //your server(S zM w'P]wE
$db_user = "root"; //your mysql database username:?lMU$bz:`UU^
$db_pass = "password"; //your mysql database password if any
s0Xe3a.y-]k5g }(L:^5a'X $database = "users"; //the db name
?B q8r)i m $timeoutseconds = 300;//timeoutseconds limit
r x2uQ!n ?:J E+c)v //get the current time
,^9O-]#R#a{ $timestamp = time();|7lK} zj!\ s;w
//calculate the lowest timestamp allowed
J T1L-@*Xi $timeout = $timestamp-$timeoutseconds;
F8}S u@T7]DZ ?>连接mysql
BtTPnH2i)wr2E mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
h MS^| mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
kN|4F%?6two%c mysql_connect($server, $db_user);查询数据库的代码:
)mxFB!}| mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
1|I s Y9}S'VQ $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
*^R ? I_*l ] ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");)Fw-A0ns0P*Fx2A
如果用户用错误信息的话,这样处理。(tEy8G\
if(!($insert)) {
H&Q5Ty&Wn-n print "Useronline Insert Failed > ";^ O#n] N3B
}然后实现当超过设置的时间就删除该用户记录。
_m,c uZ $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。'l-F ^ a[N
if(!($delete)) {
:fwj&Wah print "Useronline Delete Failed > ";\\6L,H|?-BM
}下面我们解决数据库中不同IP的问题?V![nf Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
dNX5mVS'x;PL mysql_num_rows(query);来统计用户,代码如下。
nsCn#YX(],H G $user = mysql_num_rows($result);最后关闭数据库。;c ygS2z!N&l)NuZ
mysql_close();显示在线的人数。0B&`.B|/H'gO&V+{o5K
if($user == 1) {
)wYr^R3U print("1 user online\n");,X`,zM0r
} else {
m:dI)_&UK print("$user users online\n");
:h*pB0{%[U'A }最终把上面代码写成一个PHP文件如下。
hQ e"u5M!w <?php
N`8jU5|BwX;[ //Put your basic server info here4W5XHbkPl
$server = "localhost"; //normally localhosti.d5lfe/Nl [
$db_user = "root"; //your MySQL database username
h5O9bZ]]%|?p`3V $db_pass = "password"; //your MySQL database passwordOl[lFv@R1m
$database = "users";
#a3egY-e U $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are"LFs%y8u7cj0m
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
4N.s8SKUEEO // $timeoutseconds seconds)
:Md#t m-Vu z(y //this is where PHP gets the time
"f Q)RLB)NX(V $timestamp = time();
5y#K.F[#v //counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
N1dYM9D}%u&T $timeout = $timestamp-$timeoutseconds;IPzYA
//connect to databaseF!S N6R7\/|
mysql_connect($server, $db_user);S q^Si
//add the timestamp from the user to the online list
p u&A L)UD $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
O Q$c%m H5tG ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
c,A.Y4TT#x+H if(!($insert)) {
:P*A[ yX*Xd print "Useronline Insert Failed > ";Q;T]$Ny b"`+?2Ep
}'IV {_-S
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6DA6u0Ln8H;}
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout"); l@Jq9oD*CKF
if(!($delete)) {
`Y#YbtO print "Useronline Delete Failed > ";#CY#A-G%w ~9O2wP
}
-x4Tw pSd //select the amount of people online, all uniques, which are online on THIS page z~G1|eP
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3z2e9z Uvn if(!($result)) {
4}jW9US(J:h(J print "Useronline Select Error > ";s.kh"D}F lPMs
}/zM"V6Xnj&uY
//Count the number of rows = the number of people onlineMo~jXU/k"P)rOL
$user = mysql_num_rows($result);
2q#d.Q~j}t //spit out the results
L ZNx2n5~rv~ mysql_close(); I Mn$O5N-`
if($user == 1) {
5A,[u%O^h*KyI print("1 user online\n");
i*Qv_\5X4H } else {0N5hA sbvy
print("$user users online\n");
P \LQZ+vx }
#C;T}+[5|-M9O/a1K ?>u U2EB)F arU H
[url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
0vM.q b9K Y rTr 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。YK N*{ ro"I
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
u0KR%^QR? 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。M q1Ro0s0w~
当然啦,这两款主机也是相当不错的。SKg/@*nR${6i
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年%_K` P} gvg
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
q_"Q)MS*Vw 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url] (jy,?ilr%z)r:@
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]U9m_Z A$oC
自己加QQ去问吧。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.