捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
H3l f to |7t 我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
.aB f1s;R/a 首先我创建MYSQL数据库表。
o0j9c:p+E1i RE;L6{ CREATE TABLE tablename (
,l4H2D#y P Q yO;u$[ field type(max_length) DEFAULT 'default_value' (NOT) NULL
S#@6^Ov/T Pi] }可以使用的SQL语句。
t9w,Ut6I)^3`} CREATE TABLE useronline (
~+v EG,P@3B timestamp int(15) DEFAULT '0' NOT NULL,0z?}&TJ*r
ip varchar(40) NOT NULL,wGIK.t
file varchar(100) NOT NULL,"EV{}pJ3rWQ
PRIMARY KEY (timestamp),A*Tv Uc,m9];F"Wa1q
KEY ip (ip),
4yd6k8D5C1F4qz KEY file (file)iV4f8Q/b[8M2yP"g
);下面我们是PHP脚本,首先我定义MYSQL的信息。"ty$GN.P[;a K }`
$server = "localhost"; //你的服务器
~9\2J Y9mm $db_user = "root"; //你的mysql的用户名
(L#k7l^%q $db_pass = "password"; //你的mysql的密码d b5PD9g0c6Y
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
%VTgTf.Q!M $timeoutseconds = 300;取当前时间。p(a$Y _2v
$timestamp = time();上面的完整代码:7X9d'r[)N`@"p
<?php
:^j"J\!DM $server = "localhost"; //your serverW5|:kOSfB
$db_user = "root"; //your mysql database username
`[ wAB:QE $db_pass = "password"; //your mysql database password if any%h'd,F6s q-q2C
$database = "users"; //the db name
1AIsp3ss-S5S $timeoutseconds = 300;//timeoutseconds limit
3jT/\iT$`-~ //get the current time8F:}'F p!q}:F
$timestamp = time();)~ I q/KMc-o
//calculate the lowest timestamp allowedd:qAD8JYah
$timeout = $timestamp-$timeoutseconds;
QZ}8fXq ?>连接mysql`"AF"Uy.N
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
r3?3Z2d x e:f mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
WU2^oK [[8z(}m3t mysql_connect($server, $db_user);查询数据库的代码:
2S X e*fG/N&E#G mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
j-?W@6@To!] $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5w"G ys%Y#wpd ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");"HP SX+} ^ b6O
如果用户用错误信息的话,这样处理。
#q:r9kw-^6[FA#ya if(!($insert)) {
v S&q o.vR,iZ5_5T.` b print "Useronline Insert Failed > ";
1P biCr6r N x }然后实现当超过设置的时间就删除该用户记录。 | U-h'@2p+r*U
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6TeD\O:m
if(!($delete)) {
n4Sf#z/X,X3k print "Useronline Delete Failed > ";j;G/pr;I/`B
}下面我们解决数据库中不同IP的问题R7L!B!_h(w
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用X g\C&c(Gu"^`b
mysql_num_rows(query);来统计用户,代码如下。3@9Q2T sg^ hT
$user = mysql_num_rows($result);最后关闭数据库。
-xo,T'B qn@D/w mysql_close();显示在线的人数。5i]bqob
if($user == 1) {
)^l1p$K2~ m print("1 user online\n");TmF&a5r6^4A$\
} else {dp(Y:y;NS9y%F!{
print("$user users online\n");w!AbZ7kT"M c
}最终把上面代码写成一个PHP文件如下。 ZHZ'fKfcp_
<?php
-Jo2e$]"O G W_M kZD //Put your basic server info here.F9MI[$I-\Y.HY5r"AT
$server = "localhost"; //normally localhostH)n5pY [4pz
$db_user = "root"; //your MySQL database usernamei3VIv~oEG%T
$db_pass = "password"; //your MySQL database password
M/N x"yeU%gK $database = "users";%` u I!l*^
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are,S4Qqp r$[7z*BQ,Z
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
2I"aJ*b%r]\-[3q%O // $timeoutseconds seconds)
L+KhH2jm&|I`)f //this is where PHP gets the time
};CO:o4_t)j $timestamp = time();OX L4}4g Rse,D
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed&W [~pKo2~Cz? S
$timeout = $timestamp-$timeoutseconds; XK]1lh2s'U8u
//connect to database
aN OH RSE"ML mysql_connect($server, $db_user);
y%`4mCA5X //add the timestamp from the user to the online listM;Z:~ UK!h:K]*]-S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
}!R!\vL\mJ ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");Tg!mv:iH#G Z#q
if(!($insert)) {
+g2k%_ k5H"[ m b H-HR print "Useronline Insert Failed > ";
:P-f:Gm CI }
oW;h8~1w1Q0?8g //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
ji%xNU0r){,C $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");f9FEQ8j&AX w2T
if(!($delete)) {v{,c{`:K){B,xQ
print "Useronline Delete Failed > ";6[ ] v _ x~7S_6b
}vb)|!`4gN ^,e R
//select the amount of people online, all uniques, which are online on THIS page
&\hx5w;qF.Y $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
G WMh6?h+Wc`9Zg R if(!($result)) {2a@uc.D!q4C
print "Useronline Select Error > ";
$Z/pbcA E#H^ R } t m,aHgW2IWM
//Count the number of rows = the number of people onlineG)@;rU+a.vN5pg Kj
$user = mysql_num_rows($result);c.OCK{ jW YTs
//spit out the results;g#ANoD&K
mysql_close(); nGL N!Wf0i
if($user == 1) {4V}w8^e^
print("1 user online\n");G joKu CE"@Z
} else { L5Yro3x K{f"~)h x%V
print("$user users online\n");
x,V-s)nH ?S(^a$F }q#`8R,I,["I-I3q
?>GTJm"r%H%h,x
[url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
^&P4Wh+O??k| 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
f-I0n;db |;Rk O 时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。'^"sM;`1P'j hr
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。v,wf_*R1d*w*Q.y"f3H b
当然啦,这两款主机也是相当不错的。"t4LHg5J5} h _ ` D
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年 }X;Pw8S$gmkM0o
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
RL)M2y w"a 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
@!W%M+rN{ 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]:L~0lr'm%v
自己加QQ去问吧。

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


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