捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
%B QN)t.L?1E0E 我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。u&o}DB `,j[l
首先我创建MYSQL数据库表。$]| a$Ey4Q
CREATE TABLE tablename (
woj$X&P [h field type(max_length) DEFAULT 'default_value' (NOT) NULLg0v0T:~!Ch
}可以使用的SQL语句。
Q fz2j l'Pv!D;{ CREATE TABLE useronline (@d-g*S1B+]*~tku4U
timestamp int(15) DEFAULT '0' NOT NULL,
8u7gf)j.gbV1qp0I ip varchar(40) NOT NULL,A2ISw7Q]D,li7nJ T
file varchar(100) NOT NULL,^5muO_
PRIMARY KEY (timestamp),
lD{B|I KEY ip (ip),c)\4v E1]
KEY file (file)z aU R-^ Bc
);下面我们是PHP脚本,首先我定义MYSQL的信息。
O!Z^z"q,]C@ $server = "localhost"; //你的服务器
&nO$Xt,V(N_o $db_user = "root"; //你的mysql的用户名
\IaQ {7L $db_pass = "password"; //你的mysql的密码
'[ V5\6P^V"| QrO $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)x\,H`#u2c x%}-RC
$timeoutseconds = 300;取当前时间。
e2HvF`1w }6T $timestamp = time();上面的完整代码:+](H2UU Lhh*I
<?phpB#v.]D#gE x"w
$server = "localhost"; //your server AL.LZ?-h-pw/C
$db_user = "root"; //your mysql database username+xUC+t9s\ dv0w
$db_pass = "password"; //your mysql database password if any
a(ha c._ $database = "users"; //the db name:|!h.Bv M~]!yX
$timeoutseconds = 300;//timeoutseconds limit
trW+c+c?j //get the current time{z#U0OEx
$timestamp = time();
!WeUc,Z U //calculate the lowest timestamp allowed/N#Em8O"X&lQ
$timeout = $timestamp-$timeoutseconds;7r;H&`M(?q/mu(iZ
?>连接mysql"Vtn0G%{v9M
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。 [_2kW%Y D-Z
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接;K1l0hv }
mysql_connect($server, $db_user);查询数据库的代码:.t8F gC3|.Kq
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
,WZ0[ @*~RT5A ] $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
R^/Pk8L!LhH ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
F9a@t h4A;e 如果用户用错误信息的话,这样处理。
)A R'ZHE _ if(!($insert)) {
b WY+ca#[6i1j print "Useronline Insert Failed > ";'_!\9S F7i7_S?z
}然后实现当超过设置的时间就删除该用户记录。
J9c^ {(G.v*`'t $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。]2Dxe {&Dk+qf
if(!($delete)) {
ID8c6|q a print "Useronline Delete Failed > ";
~H#q0s4`-d5roW/E }下面我们解决数据库中不同IP的问题q R'J&O*W
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
N iW K/Y V mysql_num_rows(query);来统计用户,代码如下。W3GKp2AV^Qc}
$user = mysql_num_rows($result);最后关闭数据库。
:P V.e2D;[z$v.r)~T mysql_close();显示在线的人数。(x CQ9Md|b:T7X
if($user == 1) {
DKdPiJ,O print("1 user online\n");&F.f uK7W)_
} else {
gb;Q/`9dMKK print("$user users online\n");MHriQ7]$I.`0Oc
}最终把上面代码写成一个PHP文件如下。?oQEG_ y8\
<?php(] @[$jJ
//Put your basic server info here/O8X6G9@eY`'F
$server = "localhost"; //normally localhost
#f;K9jB:S*a[ $db_user = "root"; //your MySQL database username*r? \[}v p
$db_pass = "password"; //your MySQL database password
Z+r6AL$g_%M7v*n.h(@d $database = "users";
#B!h&XO7}6P$DWU m $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
r'AVqT)D // offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
;SHwx8N*n;]0oT // $timeoutseconds seconds)
A u6Y]b'sN //this is where PHP gets the time
T8I[$j0K!N)g"s8x@$@s $timestamp = time();vR E+]kE T-~5V R
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
Dw)fG ~-{E8Lq2Z $timeout = $timestamp-$timeoutseconds;R~F0G ~:jb x\
//connect to database'LJ/C l\Zq
mysql_connect($server, $db_user); jJ6E*yq1E
//add the timestamp from the user to the online list
-bH/hPR $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
? N Pl@M7g ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1A,h ~(qrJ@ if(!($insert)) {
2zm(Rny4m&yKd print "Useronline Insert Failed > "; H.~+U z;Ovx$?x(mj3]
}R;q6mW;P4kY ? V
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.+] ?5I(cq*I6W Ywl
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");d4uJ ~!R8K
if(!($delete)) {
gY0?3EU.\z,Y print "Useronline Delete Failed > ";
9^G N&Nvx[ }
k8h| Ir(zm%G7q$i R&^ //select the amount of people online, all uniques, which are online on THIS page)@.O n.q[a"L,E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");L NV#f#BSF0Xm Q
if(!($result)) {
V?DnL nY0L print "Useronline Select Error > ";
U#A%NFR:F!V,V }S p:^%g9e,xq&o
//Count the number of rows = the number of people online
/u ko [0_*|gwFC9A $user = mysql_num_rows($result);4i.U T9jO2U
//spit out the results.D(w-t$|8];n
mysql_close();HJ-\ pil9FhSQo
if($user == 1) {
0d"Jl%b,D WgU$t print("1 user online\n");g9o B.[nA
} else {x[g3E Yvb
print("$user users online\n");[%KG#h2rsuZ)SK8t
}b n7eax%J2l9Z
?>`&m3c1N,je8k{9fjD
[url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]/AE\[ f'n"W x6a
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
nW5k8p[/H%T 时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7V6oQ hb iy 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。^4ogP"S[-}
当然啦,这两款主机也是相当不错的。z+RoIOnGBMz
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
g%{l L}k'iEE 标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年%Xh ~1g}
提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
!x~QEnH$vBjX 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]
0}4{Aft-? pq2O 自己加QQ去问吧。

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


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