捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!m3G#uATK5?
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2T @K$GS%Q.|)Y 首先我创建MYSQL数据库表。/NTB(J#k?rDN`
CREATE TABLE tablename (5}n i2dp/_i(JI1Z
field type(max_length) DEFAULT 'default_value' (NOT) NULL7`Xt2H;L6a.y2Y*z
}可以使用的SQL语句。
&VTYk E K7sZ-ac CREATE TABLE useronline (
b0K)?i(? timestamp int(15) DEFAULT '0' NOT NULL,
&s7`N2_+J]~A ip varchar(40) NOT NULL,
)q+f7SV;e*q7SP file varchar(100) NOT NULL,
Euob?+j PRIMARY KEY (timestamp),9Bc c[3B
KEY ip (ip),
w"wa$K9on4M$ywv KEY file (file)
4RMB{(Q:K );下面我们是PHP脚本,首先我定义MYSQL的信息。w [wZAz^"K
$server = "localhost"; //你的服务器
v'|V2QL [Q9G y $db_user = "root"; //你的mysql的用户名N6l[R T?
$db_pass = "password"; //你的mysql的密码 F$l6A'^3` i W*D2V1mE;N
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数) t^c ?,h e
$timeoutseconds = 300;取当前时间。
:Ph^hl?$a6~W $timestamp = time();上面的完整代码:
c)j"^+}Z+a,M[ <?phpn^8oO8@ V
$server = "localhost"; //your server kU4P1f X!P
$db_user = "root"; //your mysql database username]:W$ry/e
$db_pass = "password"; //your mysql database password if any
eblwGP'^+Wvx"A $database = "users"; //the db name
RvV_+r6]#S^ s $timeoutseconds = 300;//timeoutseconds limit
vk/n2VG F*Y)BN //get the current time
w m j"af $timestamp = time();GC3T gTd1s
//calculate the lowest timestamp allowed8K.^![O_:P
$timeout = $timestamp-$timeoutseconds;
Ebo"p-A1e9U ?>连接mysql
?;aDA%k^.tV%R Y(E mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
/d^ C \@#_] mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接$b3`9H3@7U
mysql_connect($server, $db_user);查询数据库的代码:)h"s'I,~ T J
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。 z;oM C.O+Q3sj_R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5Yt1a Ii$u@qmK ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
"YJO-lN`0O|P 如果用户用错误信息的话,这样处理。*y W `f3}7n7mk
if(!($insert)) {
sM}zYU print "Useronline Insert Failed > ";
T^8Mp4cC-S,a }然后实现当超过设置的时间就删除该用户记录。
I"j3]6B,cY&` $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
5w&gH ]wwY#Uh if(!($delete)) {*Qtb1v&hwn@_
print "Useronline Delete Failed > ";B-WP.Cg9Q
}下面我们解决数据库中不同IP的问题7g[X%n~
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8VkWB%qxt+p$syST
mysql_num_rows(query);来统计用户,代码如下。9J#ty @'`%a-sG/z
$user = mysql_num_rows($result);最后关闭数据库。
5mj9} d{Lr[H3y@ mysql_close();显示在线的人数。
p4Oglsv%R8ff if($user == 1) {T*VlXi0g3wxi
print("1 user online\n");#y4a@&_6[ jq
} else {[g4d$JA`!~
print("$user users online\n");
$d o+D+o){Q(r }最终把上面代码写成一个PHP文件如下。/BeKy~ka;x6i
<?php5jja)yh8ues2B
//Put your basic server info here}+E9Y_kxT
$server = "localhost"; //normally localhost
C@xs/V $db_user = "root"; //your MySQL database username
;oQ~7Nf;Q&b'D? $db_pass = "password"; //your MySQL database password#X7G"J2h-P/`J
$database = "users";
'Fu-w]7M $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3m7Ni_3b }0n|k;@&i}f // offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
-c} w2Q8J(`%r"`;PS$G // $timeoutseconds seconds)_;jB;qvdi]
//this is where PHP gets the time
Lk^ q!q&? $timestamp = time();
~p^^{ //counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
"fS~*@,}\ g $timeout = $timestamp-$timeoutseconds;
p/xo5~Bo!{-Ys,k_ //connect to database
n"o-MTG2v z mysql_connect($server, $db_user);
JMwoUOC //add the timestamp from the user to the online list
0x9`"ad)g $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
,h6\i%c9kg ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
Q3]3{.kQ+[ if(!($insert)) {
rB{ q3d%e7H-oO'~ print "Useronline Insert Failed > ";MB \IAJOB
}
m:x7A1n _gk //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.o!L0_j H
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");$ZC8Ok:wVE3O Y
if(!($delete)) {l.kr6f(RSH
print "Useronline Delete Failed > ";
#kG:D(Cu,s/y^ }|DZ@}cEqJ7x&U
//select the amount of people online, all uniques, which are online on THIS page&i-p:S$~H0f?/v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
U*Q1m]c0H if(!($result)) {
Fcd0sm^Rq print "Useronline Select Error > ";$b;]#rb$q@
}
Pc7X"Ljii-[5_1s9m //Count the number of rows = the number of people onlineH7xG1}GOK^BhpRL
$user = mysql_num_rows($result);
#lf l,Bg //spit out the results
d v dc-nil mysql_close();/C,o5d+@jm
if($user == 1) {
kJ jlAp/t] print("1 user online\n");R$O3^2\4@k%E3z
} else {,o-c]k @ Hw
print("$user users online\n");HP&]!zDrb
}
|3`h7J R i"WN ?>
T#E,I-B m$bX4F#H [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]g?!Y*V1[ G-_8Q9E
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
9v|qN_LH 时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
jnQ7v#r 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
T tm(i;TkV@,Y 当然啦,这两款主机也是相当不错的。_UF0t)Ma4w Z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年 ~6l'M S!f
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
Q/Gm0Z,@&p6qr L(p 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url] xt*pUp
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]
s/J:L#paQ 自己加QQ去问吧。

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


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