捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!-gAQ:@Z"rpNi
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。$_ _ ERmK[is
首先我创建MYSQL数据库表。M bo4RA2z
CREATE TABLE tablename ({4\s%? rY3SZ)aNE
field type(max_length) DEFAULT 'default_value' (NOT) NULLfY%y#vZ
}可以使用的SQL语句。
0Q,a~2C e M m^p CREATE TABLE useronline (
$j/Bz;JK,USE(c timestamp int(15) DEFAULT '0' NOT NULL,
z3u+F'W%~ue ip varchar(40) NOT NULL,3aGyz{1H
file varchar(100) NOT NULL,.|D5@"^,|2o#je,P
PRIMARY KEY (timestamp),
%a7s9t5g H KEY ip (ip),
j)qa9cIxOKu"{ KEY file (file)
M7v5{9}G#ev"Ft;C4S );下面我们是PHP脚本,首先我定义MYSQL的信息。
q"eTTHm:S $server = "localhost"; //你的服务器
"HF4R2uP?"d9~t,ZBY $db_user = "root"; //你的mysql的用户名
,qU|&h.O4^;s|2l X $db_pass = "password"; //你的mysql的密码
9Pa}1[*i r $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
jpe9xG:T C $timeoutseconds = 300;取当前时间。
n/@8F1S:E3N!`F $timestamp = time();上面的完整代码:0hg6|)H3f-U
<?php
%tbO?0Q1a w $server = "localhost"; //your server
4uh O]N a p P(_ $db_user = "root"; //your mysql database username SC!vEO)S;A
$db_pass = "password"; //your mysql database password if anyH/n(f \ n6m
$database = "users"; //the db name"f3j[(Y4r9] R'G
$timeoutseconds = 300;//timeoutseconds limit
!a7[\yE //get the current timeD_Q&h_
$timestamp = time(); ~-wts6P
//calculate the lowest timestamp allowed
1{Xs}(wNu $timeout = $timestamp-$timeoutseconds;
d)pb]#eS3C ?>连接mysqlw E2?q+@ceH w)r
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。E'{l},mXTR
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接-B5i;sT)M;U#x2K0V;F
mysql_connect($server, $db_user);查询数据库的代码:
'{WwDE,L.SX mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。-?dvG?ZR.P
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
.R^-QQGN ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");'N x{)cb'FqM S/jRb/m
如果用户用错误信息的话,这样处理。j&PH A{%BR:v.n
if(!($insert)) {K%XD m,PFE
print "Useronline Insert Failed > ";
R a;m%E6w)M'\U1r }然后实现当超过设置的时间就删除该用户记录。y$P8U @/FpGv
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
eR*W;v$YRVo if(!($delete)) {4~-y f:Te6\
print "Useronline Delete Failed > ";}GD[]M
}下面我们解决数据库中不同IP的问题
LsjUZ,Q&Fc.a $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4F#iVP/XCw2MF mysql_num_rows(query);来统计用户,代码如下。
&K |P2F*Mf&L $user = mysql_num_rows($result);最后关闭数据库。
&y7@9H7^f mysql_close();显示在线的人数。~0t6ei }L,u6~7Pg
if($user == 1) {
,Cj#^.K#D;z^dwYk print("1 user online\n");6`L:^-pf#Z|e
} else { L0n ~:n[$T"_
print("$user users online\n");
Who&Ks }最终把上面代码写成一个PHP文件如下。
}%_ ^J,[{ek <?php
!|ta3eu@Z'HM //Put your basic server info here
8V,yhX y $server = "localhost"; //normally localhostz1g"n%U },GH%yf
$db_user = "root"; //your MySQL database username
V$h ^P;IMU $db_pass = "password"; //your MySQL database password!TQ!m;cDdt*Ok
$database = "users";O+YCa1^mqXr/UY's
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are3^ v:D)G-_L#M9~
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6KAL5Ls1i^
// $timeoutseconds seconds)
)nx/X"z e0C$f9c*?q|K //this is where PHP gets the time5v\-f?/Ko0lK!?,|
$timestamp = time();
6xl7P:@c //counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
|7s s;eaj9rIwi $timeout = $timestamp-$timeoutseconds;
(LM!D5~%p%F8Dv-M7uX(i //connect to database Cr8LmU"iY6eq%lC(z
mysql_connect($server, $db_user);
a gx u#Xx Je2HU //add the timestamp from the user to the online list)Ff*R9a,^(g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3`#YVX4t!g4|8a ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
jZ2g7ZCv if(!($insert)) {_s'G!aH1\*T2I
print "Useronline Insert Failed > ";a&rMx7Z'gS.L
}
&qW7|r3qF-cgJ //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
d|l z6[|mO $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");e~_4G#U-{e~
if(!($delete)) {
j H{Z6e.}n3q print "Useronline Delete Failed > ";7Hq!j%DL:bu
}
b)@.x%ne!T9O9cl //select the amount of people online, all uniques, which are online on THIS page
L$@fz!e xW $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");)q9CrwhB V
if(!($result)) {z|.D I4D`
print "Useronline Select Error > ";
ZVcb&{k(\d }xbB*]`z6S-G
//Count the number of rows = the number of people onlineZ B0L:yGtb;A'F}_
$user = mysql_num_rows($result);
p$fWn"|,g9[6H //spit out the results
@O R?7WM7X1}a mysql_close();
$@3mOA,tv'_r if($user == 1) {
(P"DR%j[8ff0z-V print("1 user online\n");
V}hU9a6} ~i2v y } else {
Ss,eo9J$S'v print("$user users online\n");
O*],q/Gv!k2\Y }
y4]` W2j;M$gE ?>.OSE&Jbv
[url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url],F+} j X(M0gM0BQ1o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
2~rhJ1Z:Be 时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
]~NxQ ZkB.] 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
?,| @wr-N 当然啦,这两款主机也是相当不错的。
jV&Z7J-tcYr 智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
Hri,L7h3YN 标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
u(BM4ID[IB 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url] \)j)R7?;m[
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]lz F#hF#n`RJ ]#g
自己加QQ去问吧。

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


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