捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3W L(Yfnq*z
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
%Gu*pmi6z%Y 首先我创建MYSQL数据库表。
:SBF+nBj9^n)a CREATE TABLE tablename ( Ub]w_R r!]
field type(max_length) DEFAULT 'default_value' (NOT) NULL
e/U O2Bog S }可以使用的SQL语句。1x"@HR a6[%`-v.\
CREATE TABLE useronline (6IF(o+ywc7C|
timestamp int(15) DEFAULT '0' NOT NULL,
8f'ZRUQy} m ip varchar(40) NOT NULL,
pVD]'K-| file varchar(100) NOT NULL,
_/\!dq/w#n PRIMARY KEY (timestamp),vriIw+j
KEY ip (ip),o^%f7J ]7?:fn$m
KEY file (file)Oj1RZq{!yb8z
);下面我们是PHP脚本,首先我定义MYSQL的信息。
S|:{ m[a9QPQ $server = "localhost"; //你的服务器
ra \Zjw)bL@ $db_user = "root"; //你的mysql的用户名*NNfTM#nM
$db_pass = "password"; //你的mysql的密码
D7RAi.a%V $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
A#Vg&Q%k[4e"EA $timeoutseconds = 300;取当前时间。
vo)Q,GZ^B1F3F $timestamp = time();上面的完整代码:
@(z VBKV8fD <?php
NS|I!r $server = "localhost"; //your server9Ob ~ U P
$db_user = "root"; //your mysql database usernameW"R8v{6j+f`x
$db_pass = "password"; //your mysql database password if any
q6n+X~0R $database = "users"; //the db name
S8p5B ])s"}#Y#l $timeoutseconds = 300;//timeoutseconds limit
y)f-C8~J*r;qKw //get the current time
j:s+l*l"Z6L&D-E"B $timestamp = time();
Q6ko|7gO"q"N //calculate the lowest timestamp allowed4o\:C#d/xs
$timeout = $timestamp-$timeoutseconds;@t0|ud^4R"`
?>连接mysql
I3n6k)])Ua&Ibq$iqr(Q mysql_connect('localhost', 'username', 'password');也允许使用变量形式。;j&p$W"v | KZ;JTB_
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接0r8^(X A E.?*ac
mysql_connect($server, $db_user);查询数据库的代码:Yb2L2p;Y2ZCiY
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。&f ?J*O7ihy%N'x0y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES aig%{9E`
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
_'wRR[|b~ 如果用户用错误信息的话,这样处理。
;^;s6Z5VX q GIW if(!($insert)) {
/vT(o6H~ print "Useronline Insert Failed > ";
8]q5GF1W#R.cJ#X }然后实现当超过设置的时间就删除该用户记录。
0_dE8_#lcc $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
Ktot"}g6I{:?$e,O if(!($delete)) {)t3v-Z0VwX%RqM/Z
print "Useronline Delete Failed > ";
5d v@o3G0D S0X }下面我们解决数据库中不同IP的问题E*gw,x;g@^U8o
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用e"M lt"W6M-A]j:{%g
mysql_num_rows(query);来统计用户,代码如下。
!GEiah9FI+Qkr#]? $user = mysql_num_rows($result);最后关闭数据库。-n9a q [/BM!D
mysql_close();显示在线的人数。
}!U*R3e)V q*Z if($user == 1) {
ZT1la*qI print("1 user online\n");c'jA,y#d
} else {5^,q3ZsN[5l)z
print("$user users online\n"); zufZv-Y
}最终把上面代码写成一个PHP文件如下。
uPl\,ttU%Z <?phpO)lfp+T vQ
//Put your basic server info here
A+Y B)duHkz@:m $server = "localhost"; //normally localhost4~.Q~A] f
$db_user = "root"; //your MySQL database usernameQR9l#g6f(B|p
$db_pass = "password"; //your MySQL database password
0N*fWq7^l!u-v $database = "users";T3nA!pY
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are:q[5o `Kjz
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
PO8@}+T0u?6Q4^ // $timeoutseconds seconds)Z^ JaR+|
//this is where PHP gets the time
.u#v)F"x6\E#}BK $timestamp = time();)D/[:B F;x2?
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
[#_{P)A j [ $timeout = $timestamp-$timeoutseconds;
rP-LT+RA^Hf\ //connect to database
?hc3OY mysql_connect($server, $db_user);
~7Z2ktJ //add the timestamp from the user to the online list#vyqg6t4R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
S;m yrDA(Sa ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
:x9ISI ~{ tiS)r if(!($insert)) {`O(d;E(KvQ
print "Useronline Insert Failed > ";
6`pdN1[ nK+U }#gE O,O7K+a6Q.P
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
%qE&o)MZ+A'cg $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2a!KR*O M7fQ
if(!($delete)) {
.nw@V~c(CJe%v ~ print "Useronline Delete Failed > ";
%F:K!kJ3y \^JX } gR]8l.R si
//select the amount of people online, all uniques, which are online on THIS page/B1O]$l6Ae9I$u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");#]kO H4u-Pu T6K
if(!($result)) {,U,M{"aDdRx
print "Useronline Select Error > ";
HX9j?9pN`e.\6o }
#i'? Kc#t)Y&n //Count the number of rows = the number of people online
T4gl DJ@9B $user = mysql_num_rows($result);
8T'A W @{A.`gep1[ //spit out the results
8X3_'t\0[["Rex mysql_close();
f/]%GJ|9yD$uxV if($user == 1) {/u2KGfE fH
print("1 user online\n");
\U j(?@w_"P+? } else {
iWG X,G print("$user users online\n");
(a.U-Y6p~ }6w/o'F:nkn e
?>
2X K H I8o(g [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
'\3o{pHW 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。G4LBA|_2J
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。!U,u9i A:t8\
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
%wx7N&ii SO 当然啦,这两款主机也是相当不错的。
(\vs2y$a 智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
N7p4@zh,@ 标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年i#s2`0i(jC(N xP
提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url] b:a3_r_n/}!U g:R
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]
:W2c_G^#ft G_ ~ 自己加QQ去问吧。

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


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