捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
e#Bem5K X*r0e 我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。uR&V2cv%r
首先我创建MYSQL数据库表。4K(OMPbt9f@0}C
CREATE TABLE tablename (
c~]!{:i,_2[ M2f)W field type(max_length) DEFAULT 'default_value' (NOT) NULL
Z5M Q,vd2]'N }可以使用的SQL语句。
{*]2U W3kW%J/| CREATE TABLE useronline (
)u s!h.e"{]CT$u timestamp int(15) DEFAULT '0' NOT NULL,b Jwm:[)QP
ip varchar(40) NOT NULL,
9T,f.?e_'}7[ file varchar(100) NOT NULL,
u/]mn,Z5E PRIMARY KEY (timestamp),nbi%X}|
KEY ip (ip),
,Gd6K`9X3a{)r KEY file (file) ?*[&IGB)ZCo
);下面我们是PHP脚本,首先我定义MYSQL的信息。PE[2T9JI9F+h*~)B
$server = "localhost"; //你的服务器
X5P C;WXv $db_user = "root"; //你的mysql的用户名 JngdpLPo
$db_pass = "password"; //你的mysql的密码
u@S?$T:A](_\ $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
VEvGf,j:L $timeoutseconds = 300;取当前时间。Ki XG1\~"~0Y;p
$timestamp = time();上面的完整代码:zH7h&tINPV7Q
<?php
z2d%EPp.b&AB $server = "localhost"; //your server!p.e%AzS
$db_user = "root"; //your mysql database username
Hl e p@ $db_pass = "password"; //your mysql database password if any
;K#Di9_}!B@O \.G $database = "users"; //the db name
K(b$Nu2v5gs8A $timeoutseconds = 300;//timeoutseconds limit$A#i6E*VDj
//get the current time6Lv~2yhi
$timestamp = time();
s.dT+@1O{ w Q"W9F //calculate the lowest timestamp allowed%A bHF2H\ Q)B
$timeout = $timestamp-$timeoutseconds;#Iv6s#T;U[0K
?>连接mysqluq:\rmSx
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
&AQwSo c mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
xg;P&Q5z'tpA mysql_connect($server, $db_user);查询数据库的代码:
;t [{ CQS!n mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
s-tz |)Ft] $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7^*O*q z4q!m!g*y ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
Od!ka6[(b 如果用户用错误信息的话,这样处理。
%t H+I#lJ if(!($insert)) {mM0SLK ^P
print "Useronline Insert Failed > "; Vr7@R'v/K'U$q8m;^
}然后实现当超过设置的时间就删除该用户记录。
M%D"@:M+jt{0nv $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。R:gc(~3g
if(!($delete)) {
&R#t'eW5` print "Useronline Delete Failed > ";i+{8j/D d]
}下面我们解决数据库中不同IP的问题
+p9SD&EWw'gq(M $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
;@e8Kd_#nuL mysql_num_rows(query);来统计用户,代码如下。l4mSQy/O?+f
$user = mysql_num_rows($result);最后关闭数据库。
n.u!n(B.C il-J mysql_close();显示在线的人数。
@ Y s2L^#xt5q+N if($user == 1) {9_$G ^.P8{"w
print("1 user online\n");
d;B^)i D+{6C } else {AAW*hZ2pCC~r4mn
print("$user users online\n");
$J7| oK5E n+zK }最终把上面代码写成一个PHP文件如下。^'`|x*a0I-R6I\J s;K
<?php
*w;@ hx i+L`|:\ //Put your basic server info here;WOtI!K P }
$server = "localhost"; //normally localhost#rah-o N d t
$db_user = "root"; //your MySQL database username
'p0H-nqY;S2U [y $db_pass = "password"; //your MySQL database password
k2R\-Bord$W vbi $database = "users";
/SA3h)x'HZ $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are T"W0I_p3H)X6r
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the lastf9?k['O}V
// $timeoutseconds seconds)
&a"sE ]P BU //this is where PHP gets the timeaN8k0p0PE{/L
$timestamp = time();0vtu5na0of
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removedOb}UW*B L~
$timeout = $timestamp-$timeoutseconds;
;Zd*St#])O8i~P //connect to database
b&j/c C[n2S@ mysql_connect($server, $db_user);Z!lmWZ8\
//add the timestamp from the user to the online list0?FjF[o4L-BCU b;jo
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$e)c-A!P)zYU ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$K `)R?7E(\:odI if(!($insert)) {
t5a"of0C+i%C.~ print "Useronline Insert Failed > ";B/f6Im)_&^*v'X"c
}NVY ~7m1T{b
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
;b-?#U'} p1]0k $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");1Jxe#T;x#{{1m"~
if(!($delete)) {k io/@T-X
print "Useronline Delete Failed > ";
P]:DL lH]7[N }
1J9K(t~KKWY)W //select the amount of people online, all uniques, which are online on THIS page p+W L2b0ePu)CN
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
d6`aXn:T1P;Y if(!($result)) {
WJ(V5N} print "Useronline Select Error > ";
;J5q4rM1H {Ln }
/R3N#h_c'E)Z3_;CZ*e //Count the number of rows = the number of people online/[uU h D$Y bU
$user = mysql_num_rows($result);
'`?],C4s:X1Zp%M //spit out the results
We Z(RNx y mysql_close();
|rB3E:i if($user == 1) {
YHwRp[ print("1 user online\n");;N/L to?
} else {
8k$[KP*uo{#R8R print("$user users online\n");{9ob]4v
}
R(uWt9n(yt3S] ?>
{}pa'I'o}&h"L0sAw [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]c"c/~ M K E
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
j M'K2uq6}{ 时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/SW7o$Mut-I$O 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。4Ekb%c1]L6U
当然啦,这两款主机也是相当不错的。DZN Kjj_
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7IT n'J$J_g:FR 标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
]3F4Fe1jE;D B s 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
k~HPqT"nLK 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url] U(rN/K.uL@A*H
自己加QQ去问吧。

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


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