|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
2 }9 t" E% {" Y! ?; t! g我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' s" \/ u7 X+ N
首先我创建MYSQL数据库表。; p! g% u) s" g! m4 z& b
CREATE TABLE tablename (/ d9 h7 P1 k1 t$ m' H* }
field type(max_length) DEFAULT 'default_value' (NOT) NULL I5 j$ T* Q$ ~( l z# X( }- b
}可以使用的SQL语句。7 v+ P( b! y6 C' T
CREATE TABLE useronline (
5 L3 d" y/ y% l+ q, Xtimestamp int(15) DEFAULT '0' NOT NULL,
( @* L3 X% h, `. i# y7 j4 j2 P7 ?ip varchar(40) NOT NULL,
( p; o# z7 }% b0 C$ F8 ufile varchar(100) NOT NULL,
+ @, V+ H0 `% N/ `: ]PRIMARY KEY (timestamp),. K9 T4 i% V& Q6 J* i, S3 O, | K
KEY ip (ip),/ P- `; t5 ]6 ]5 ?
KEY file (file)! l; k* Q1 m4 D3 d! S
);下面我们是PHP脚本,首先我定义MYSQL的信息。2 P% U. b. L) Y( @/ B! P5 z4 x8 M% L1 s; P
$server = "localhost"; //你的服务器+ [9 w0 g+ ^) l# ^& {* i* D# r
$db_user = "root"; //你的mysql的用户名
" I8 C& a, O/ Z# K$ X$db_pass = "password"; //你的mysql的密码- W1 x' F% n( F/ N
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 [5 W h# e! @2 D
$timeoutseconds = 300;取当前时间。
1 d$ ?4 K% Z& z$timestamp = time();上面的完整代码:
5 H' B v: z: b( g( f1 D<?php
$ i: r& a& M( f# G: K) T$server = "localhost"; //your server3 }& V/ O$ W" s" K' S
$db_user = "root"; //your mysql database username H, E0 e% R" v+ G( o( `
$db_pass = "password"; //your mysql database password if any
& L U$ p. \7 T0 O# |! Y$database = "users"; //the db name
9 j9 G) B) N' O s) O$timeoutseconds = 300;//timeoutseconds limit' l2 p! \; C; ] |; E, f) b
//get the current time) d4 g. r; w8 D0 m" P/ {
$timestamp = time();% ` G3 F1 ]* g3 q: S
//calculate the lowest timestamp allowed
: M, D7 j$ c9 X$timeout = $timestamp-$timeoutseconds;
1 S" l) n3 M' Y( u: D$ ^?>连接mysql, W3 J$ c7 u( Q% N, Z
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 }* R$ I$ y# l3 l" O6 Lmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 `6 z/ F% x9 t0 S. E$ Amysql_connect($server, $db_user);查询数据库的代码:
/ E* ^0 Q* S6 bmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. }" u' A5 `0 S, o# @
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% f" L$ [: W( v0 U+ L. G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 I' M* v0 Z( w% w% ~- F$ x' }
如果用户用错误信息的话,这样处理。- u% o/ W$ @1 }1 e% e$ ]1 E
if(!($insert)) {2 P; z O4 d1 U3 ?* l6 y( I: o
print "Useronline Insert Failed > ";" k, G" M3 c! `5 b& H& [8 s( S' k
}然后实现当超过设置的时间就删除该用户记录。! p# T+ m! m& u* y) j( K1 @2 G. D
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。3 U# \4 S. x* J& a3 m/ U7 t
if(!($delete)) {
$ H' T) h9 [0 `4 K: Wprint "Useronline Delete Failed > ";
: C! J1 ]. ? N9 N! D8 y: B}下面我们解决数据库中不同IP的问题8 T9 a1 o5 L' Z; b* R! I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
! i/ D7 n' ]6 j' o: }& V4 I1 Tmysql_num_rows(query);来统计用户,代码如下。
; `% ?+ o. g5 l$user = mysql_num_rows($result);最后关闭数据库。
0 e! k. m. R* K: c) Hmysql_close();显示在线的人数。
7 e5 \& P! D$ H- Y& V: nif($user == 1) {
0 @- E3 J3 z9 oprint("1 user online\n");
* B9 I$ m, r) h7 d S3 }$ k* j} else {" i! B! N/ u( y& b! Y
print("$user users online\n");
8 q, O% F9 k: V1 C3 H& e p* T- ~}最终把上面代码写成一个PHP文件如下。, {9 {" R2 v- s. r$ |, [" `# R" ^
<?php2 @4 C/ J8 {3 J4 `9 J
//Put your basic server info here
) E$ q9 g$ D6 u q/ B" i5 k$server = "localhost"; //normally localhost+ m$ a, i [) P* @6 B
$db_user = "root"; //your MySQL database username- \$ M3 Z; t0 l. `
$db_pass = "password"; //your MySQL database password" z2 @/ _" S0 G( l" K
$database = "users";
/ Z% ]* |; j. p! k0 b' n. \1 x$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
) G C4 x. L; c: U/ @3 t4 d// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last7 P6 D0 S4 ^: S1 G; W
// $timeoutseconds seconds)
3 M& Y6 o1 \& X1 e/ M8 V//this is where PHP gets the time
; w0 L! r: i& {, c3 d ~" B$timestamp = time();
# u/ b. V% _- O( V; ~' N//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 N/ ?0 p$ x0 C
$timeout = $timestamp-$timeoutseconds;0 ~* r$ |5 o& Q8 N# j+ p4 d$ {6 \
//connect to database
: q3 e0 B- j- c1 nmysql_connect($server, $db_user);4 c% s9 J' P i& N1 X
//add the timestamp from the user to the online list
# D9 e+ X( D8 {; e! f$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. A) A* Z2 ]; w* i( x6 G('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: k) O L5 c7 V6 q# M Y4 Cif(!($insert)) {7 \5 } G" x, v' k' {+ X# ~
print "Useronline Insert Failed > ";
; i9 d. U7 G; J}
+ [- r9 v& T% C, E" P1 p+ m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.% d: @: t4 A( D, S+ ]7 M& V# l
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* E M7 R" C4 S: @ {7 G$ ^" _
if(!($delete)) {
" i9 D$ x0 T& I; mprint "Useronline Delete Failed > ";8 \' S; e0 e. ]) A; A: L& I2 R$ a& ]
}* w5 [% x1 a7 A4 R5 u; a. D: ]
//select the amount of people online, all uniques, which are online on THIS page
9 E/ t2 D9 ^; ]' j* K/ }$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ |8 k& m& g& ~
if(!($result)) {- O8 ?9 w: ?8 b/ k9 B( S4 ^
print "Useronline Select Error > ";, m$ K, j2 S6 y$ L5 e. \1 R z. P+ l
}0 I9 b# l( @5 T( h2 z/ L
//Count the number of rows = the number of people online
- [3 y' w# I5 w& {0 x, r$user = mysql_num_rows($result);# w* o7 b2 b2 R9 x4 ]
//spit out the results0 x [& w. k& U+ k7 I
mysql_close();, k; N1 N' I |' K- e
if($user == 1) {4 z* o; Z$ r$ p) o, {$ }
print("1 user online\n");1 _) n; p" R8 @. e, H
} else {
, c5 `2 G2 ] }( y* j& W/ I9 Vprint("$user users online\n");( a6 U3 f- C' O; H9 g5 w" a% _$ v, C
}
8 n+ p3 J* A# p$ q- l?>
1 d) F8 ?5 K2 g% q 1 M- h/ D4 y/ q$ g% f* d
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 V. J; r- Z6 N0 C- {时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。! b! o) b9 p$ l! T! {
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 B3 Y" w! ^7 ^0 |
当然啦,这两款主机也是相当不错的。
8 E0 Y g" e- \" z智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. ^, w1 N9 Q- U' `) V9 E标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ m# e3 g+ W5 K
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ) |5 z& c* j# r
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55' T( v; C; g2 c' I) w
自己加QQ去问吧。 |
|