捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!*G@9o9s!g#[[
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
O CM'~5G9{7P&R#m*j 首先我创建MYSQL数据库表。
G p?{`2x;j CREATE TABLE tablename (
euRBTw field type(max_length) DEFAULT 'default_value' (NOT) NULL
:`;rvF$P!rkh }可以使用的SQL语句。
O)M$r5iC$er3F-X4_gt CREATE TABLE useronline (
%{@#R)E9S5eW0pf timestamp int(15) DEFAULT '0' NOT NULL,r@ ] D$w-H&U
ip varchar(40) NOT NULL,
Z st G;N}UU file varchar(100) NOT NULL,%~W%it)[g
PRIMARY KEY (timestamp),
.n8m"YJ8aCc.I"? KEY ip (ip),
\VR2y.S } mA KEY file (file)KkE7e4y1g7T
);下面我们是PHP脚本,首先我定义MYSQL的信息。
uA]Iq,p*Y'Zt/G $server = "localhost"; //你的服务器
3C|f*u8| k*rR $db_user = "root"; //你的mysql的用户名w?7D!F{U%La!ER
$db_pass = "password"; //你的mysql的密码,F$N8X ni;X`
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8s4W"F"s9v $timeoutseconds = 300;取当前时间。n\!R,I'D hx_
$timestamp = time();上面的完整代码:
,Ckj0u$H-cg`A <?phphIzb8w,g }y2r
$server = "localhost"; //your server$mCYs1j~b1m;h _
$db_user = "root"; //your mysql database usernameiU9K/D:p@X#O
$db_pass = "password"; //your mysql database password if any
e m6BT4fHL-wd1d $database = "users"; //the db name
M%] nDOo $timeoutseconds = 300;//timeoutseconds limit$CI^!Mm,aI'w
//get the current timen3O'^_0^I/kR;C
$timestamp = time();p lSpfB
//calculate the lowest timestamp allowed
Ro.W-SKg $timeout = $timestamp-$timeoutseconds;nak ~ vBv;uF
?>连接mysqloyv j`L&l5x:F%QV
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
%^ k:yZ:| T mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接_)F5X i#wbN
mysql_connect($server, $db_user);查询数据库的代码:
[ V-tR?2M3a1WQ mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。zq&x_Oy#_ A R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
&p E6y,O&r,BF3x&X5O;B ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
]7a:j#Eb 如果用户用错误信息的话,这样处理。#JbD9[%f?^
if(!($insert)) {
3[(uYH7K[ S print "Useronline Insert Failed > ";
nS7d2ao%zu }然后实现当超过设置的时间就删除该用户记录。
%| k`!sf$])qu5Tu $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
.E^a-S/kKVbV if(!($delete)) {u;_'Y$K rU6]
print "Useronline Delete Failed > ";
^?/yAf*dK }下面我们解决数据库中不同IP的问题
oc{;~O7j:|-X $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
V(z3B b7wQm mysql_num_rows(query);来统计用户,代码如下。m7Eb&xr
$user = mysql_num_rows($result);最后关闭数据库。
D~9k.G5S~ mysql_close();显示在线的人数。
~_`^2G5V8ml if($user == 1) {X#N"Yl^ pjo#d&GU
print("1 user online\n");bZ2CD[.K&N^)Z
} else {Cw:UX1bS2v
print("$user users online\n");
*B1E rR;T-_Zo.S] }最终把上面代码写成一个PHP文件如下。
N1\hA3lrH~ W <?php
G{ T4NW'@&~ R //Put your basic server info hereV*^&MK*k-L)jP
$server = "localhost"; //normally localhost
AF:eC#mY:H"m'l $db_user = "root"; //your MySQL database username
Ah[)z6at $db_pass = "password"; //your MySQL database password
:f-pA'N{ $database = "users";
(Y8n"ss:X3_+C $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
w8\w9@6y:T O // offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the lastoM8T$S]B gt
// $timeoutseconds seconds)
*V2vR)^ {]es //this is where PHP gets the time
s;?3gtxL $timestamp = time();0_5B@&ta
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
osJO,aq+^'W5n $timeout = $timestamp-$timeoutseconds;
!h.I+xHiE | _.v:f //connect to database
$VN-e.Vmr mysql_connect($server, $db_user);1?peNe%P
//add the timestamp from the user to the online list
yI%]xWkX3E[(w $insert = mysql_db_query($database, "INSERT INTO useronline VALUESl\G1{inA1J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");^B%zn xA7F
if(!($insert)) {H%C(h F#qCB#h
print "Useronline Insert Failed > ";p;X!L3m/}5^
}5~f MY h G^*Zf\2F
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.sT+o?6]rTU
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");g-~rNA's-{;ser
if(!($delete)) {zx H2C]h.@E
print "Useronline Delete Failed > ";
3Bt5^%`%Y I@ }
V*f!nqB //select the amount of people online, all uniques, which are online on THIS page
`!\ Ir'[g#mkrq[ $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
OA1{4Hkv/X8?u if(!($result)) {w`Ww"[ |1m)z
print "Useronline Select Error > ";b'N&A LRW+g#A]V @
}/`Y)U:^Z W2^
//Count the number of rows = the number of people online4cX+xM-p$| p^s
$user = mysql_num_rows($result);
srmzZh(G cxTK //spit out the resultsgZ,@6|+A6H t g
mysql_close();
4jk_C&^oF.oKd if($user == 1) {4F!zM M5i
print("1 user online\n");R oA~8}Cndh
} else {
XJ2[TN;u1ZZi print("$user users online\n");
#R/MAD7i/b v-X }!ey'{9Em*P-T
?>
/OdD4[? t [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url],_Z4i8zW
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。NX3~$J{
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。|*oJm!KEq
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。(|/OW,r'a3I
当然啦,这两款主机也是相当不错的。
4~zP;Z-La,Y*X1X0L 智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年uT V ~2et
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
_"sJ;b7eyR@T/a2o 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
Xh2Mb,g&Fh 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]
Q^am2I!WL 自己加QQ去问吧。

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


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