
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 y; w6 W8 I& W0 S! n我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& Q) z1 o! g* T4 a$ o/ d L3 ]! j; A
首先我创建MYSQL数据库表。
' L# D0 D- V& q: r1 VCREATE TABLE tablename (
9 R. M. T$ `% ^* l* ^0 g- sfield type(max_length) DEFAULT 'default_value' (NOT) NULL
8 ^: k; Z$ a7 G$ O}可以使用的SQL语句。
% y' r& u% g0 ZCREATE TABLE useronline (1 p) @ s1 _* V! s+ I- z: t8 B
timestamp int(15) DEFAULT '0' NOT NULL,
' Z# |4 V8 J5 g4 ?4 d4 J+ wip varchar(40) NOT NULL,4 S* ` N% h$ x. g
file varchar(100) NOT NULL,6 o" d! Q2 j# d* j- P
PRIMARY KEY (timestamp),
7 B7 \% |% D9 @KEY ip (ip),
& F$ J" }+ B' k, y6 k9 N) N2 {KEY file (file)% k7 y2 U" h$ r3 n
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ P- P* q% O5 E: y9 W* L* f# K
$server = "localhost"; //你的服务器, _! R' }) E/ G- z* V) K
$db_user = "root"; //你的mysql的用户名
- _! ^! {" o' @) S" B2 v: B! s$db_pass = "password"; //你的mysql的密码& M3 ^+ x/ K# R" {3 S& J
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# y4 s# s" y6 m
$timeoutseconds = 300;取当前时间。3 j0 z& j: V! G7 n& G
$timestamp = time();上面的完整代码:+ p1 h% ~% h' Z9 ^: ^
<?php3 w- ?+ X5 W2 J0 o8 X" I
$server = "localhost"; //your server
# V$ K# w( O. k( c8 J3 Q$db_user = "root"; //your mysql database username
/ }/ r I+ \2 u7 w! ~$db_pass = "password"; //your mysql database password if any4 c! w* ?7 i+ D" d: E+ A
$database = "users"; //the db name3 }$ R( H4 f; @/ {) a* ^) L
$timeoutseconds = 300;//timeoutseconds limit- Z0 Y2 c& G# _7 }
//get the current time# i. l# X) Z: {- R
$timestamp = time();/ y" _7 }% V, j) a& Q" P) Y
//calculate the lowest timestamp allowed7 D0 U/ J4 R* z# u2 `0 O! l
$timeout = $timestamp-$timeoutseconds;
8 w% {: y0 I0 Y8 K?>连接mysql
$ b" s w" {9 p# Qmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 O# w( Y" Q* v/ fmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接: ~" l: b6 \* K
mysql_connect($server, $db_user);查询数据库的代码:8 `" P- r4 ]4 ?8 R( l) J
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 ?2 m2 M" N0 `
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, [2 F9 l6 L. U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- ~% F2 b1 L6 m" t7 D
如果用户用错误信息的话,这样处理。
' F) k- s- |2 a# i9 nif(!($insert)) {! F Z! E, |0 e( j4 F9 M
print "Useronline Insert Failed > ";% g. b7 T& H% T# H" l; {3 R
}然后实现当超过设置的时间就删除该用户记录。
# M6 `6 d5 z: _9 e2 U2 \$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 u$ l) s' ^" } p9 Vif(!($delete)) {
# p$ d+ q' n. k& G) I: |9 Jprint "Useronline Delete Failed > ";) `( |+ o/ X; l* f8 \
}下面我们解决数据库中不同IP的问题3 s1 S! k7 l x, i% J s" G! Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用$ n( Q: ^, |, h+ i, N& W) C$ l
mysql_num_rows(query);来统计用户,代码如下。
" Y% |- t3 f6 I. b( t- k$user = mysql_num_rows($result);最后关闭数据库。
" | A! @, h& V% b5 l9 Umysql_close();显示在线的人数。( _" R$ R! r' ]/ ~( j( O
if($user == 1) {1 T" v9 w; z% L8 p% h! T
print("1 user online\n");- l1 b$ H& k& ^# ~ e
} else {
; }$ s3 y% T- _' v% @" mprint("$user users online\n");! i9 U' I: A7 y
}最终把上面代码写成一个PHP文件如下。. z) g) \5 K! l+ ^+ z1 P& B, M1 C
<?php. _& Q8 }# Q" C5 \
//Put your basic server info here
) V% `9 g$ M- ]7 ?# H! v& E* w# a$server = "localhost"; //normally localhost7 S4 v* Q) e. z* t) g8 V
$db_user = "root"; //your MySQL database username
# ?- d0 R7 ~2 a j. @$db_pass = "password"; //your MySQL database password
$ m* C8 P; `. `$database = "users";
' Z& F, `/ W6 n$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are: B# j5 G) F& b
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* }: ^* V; d9 `" u l b
// $timeoutseconds seconds)
" T: ~/ B' L- U7 v4 @) k5 F+ R( {! d//this is where PHP gets the time! a8 Q- T& H4 K0 m* v# ^' p" A
$timestamp = time();
# Y) L' R# T2 h//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
: F9 x1 j7 a' @3 q* m$timeout = $timestamp-$timeoutseconds;9 u* f! W& E% k+ _: d- s
//connect to database M1 M' e$ V" b( x0 E. ?, X
mysql_connect($server, $db_user);
3 @8 g( h; O+ B! d$ H//add the timestamp from the user to the online list
1 \4 j. S6 O1 [. F/ d4 Z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) B0 v, @) C& ^1 E/ [('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( U; c4 q1 W4 Y, `$ }* Q1 Q; D/ g" h9 K
if(!($insert)) {- y4 `. b/ i" ]+ O/ q- A( z7 x
print "Useronline Insert Failed > ";) o% u" D1 ^# H" W0 v2 s
}
0 v, q; b0 B) q- S, o% p//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" v. \9 f M2 l F1 ^' |$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ x2 ^- o6 }( h4 sif(!($delete)) {& [' Y0 p: g( F
print "Useronline Delete Failed > ";
# _0 X( A" D8 R B, f$ y! K. U& m}
+ W. M- L( R8 W5 g4 A+ r8 @& Q//select the amount of people online, all uniques, which are online on THIS page
, Y. |* O2 z) i; J4 i2 i5 s/ U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");$ \2 _) Z- Q7 j3 x! j- W9 P1 @
if(!($result)) {
. }! x9 J2 \- Q% }1 C* I. f8 Dprint "Useronline Select Error > ";0 O$ y E9 ]9 x% Z5 o; v7 s8 F
}; y _! L% y+ \# x& k' s I& n' a
//Count the number of rows = the number of people online
4 y/ @- e; X7 s1 Z& ]$user = mysql_num_rows($result);3 F- F2 S' `. `4 s
//spit out the results m+ E4 \, Y% U3 \7 V4 G
mysql_close();% n; j$ h6 S+ {
if($user == 1) {
9 g) e6 L, s9 v" `" S$ _# K/ \5 }0 oprint("1 user online\n");% m! \+ n& e7 L4 `
} else {
( F. S3 _0 u, f. |. `% h+ Wprint("$user users online\n");
" E( U; g9 w- ^' }}0 r) w: G5 `' K/ c: K; n9 O- ~- k
?>0 b8 ~2 D2 ]" y7 e, P; I* f

1 [. ~! n6 ?6 B& s* g& [9 p/ y' @以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& h! |: |/ R/ `时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。 z/ S- a9 V# x" @
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
; H; W0 M& ]- i# R' y8 ?3 {当然啦,这两款主机也是相当不错的。
1 w4 D% \; [. G2 Z1 {4 Q- \智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年, h1 K/ s* d7 X; ]2 Z2 i
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
. t$ X# t8 B0 B9 V) O/ r提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ ]* `: J1 R( ]2 Z8 x% F# f4 {空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
3 A# d, R+ ]6 G4 b( y自己加QQ去问吧。 |
|