|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!- F) N, a& U( D4 q' [
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 f5 u# m6 `3 f4 N首先我创建MYSQL数据库表。- ~6 k- O1 o; j: P) H
CREATE TABLE tablename ($ ?- C4 P# }2 l
field type(max_length) DEFAULT 'default_value' (NOT) NULL
5 i. S/ M2 j1 c2 L2 \* G# A}可以使用的SQL语句。& H) ]+ B/ {# ^$ }
CREATE TABLE useronline (
. m# A6 e& i9 R( @# S. [/ \9 \timestamp int(15) DEFAULT '0' NOT NULL,& `* ~4 _1 \3 Q I! o) O0 B
ip varchar(40) NOT NULL,. Y2 s, O/ K+ y1 Y5 p- c3 f2 {" b
file varchar(100) NOT NULL,1 n6 T7 E; ?2 `$ M. Q5 A
PRIMARY KEY (timestamp),9 Y' b1 T+ m& a0 [( r+ V
KEY ip (ip),9 L: w2 P" h; l" N
KEY file (file)! R( ~- w7 Q6 I% r
);下面我们是PHP脚本,首先我定义MYSQL的信息。
- v2 H' U: g$ x# b$ @) W. T$server = "localhost"; //你的服务器( _( k; O7 M2 C" j
$db_user = "root"; //你的mysql的用户名8 o+ z8 W$ h$ i
$db_pass = "password"; //你的mysql的密码1 Q N) @# K/ L; W/ r2 C
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 x5 p% _% Y Y+ B% R6 Y1 p' F
$timeoutseconds = 300;取当前时间。) D- M; I, D( d
$timestamp = time();上面的完整代码:
+ h2 v0 q$ R, K+ s% l6 h0 n<?php
0 D4 _ g6 e+ S- u6 h0 q$server = "localhost"; //your server
1 Q5 o6 K4 o; F9 _8 |, f, Y$db_user = "root"; //your mysql database username
9 |6 P) n# T/ q) R2 B" x$db_pass = "password"; //your mysql database password if any+ n- u+ R4 h6 _. h: h) a
$database = "users"; //the db name
0 I& u- ]. W6 i& C( @# o2 A9 @$timeoutseconds = 300;//timeoutseconds limit
9 |: A2 u# ?0 f! ~/ B" x% a( u0 V//get the current time" T+ n8 k7 y4 T" I1 g" g
$timestamp = time();2 X+ i; r3 B2 ^, z' s8 A4 W+ ~
//calculate the lowest timestamp allowed& v% L& ^- Y) ]. `/ _: l
$timeout = $timestamp-$timeoutseconds;
, G% }0 d$ m: X K( J1 a?>连接mysql
P0 U0 \) }6 [! v! {6 Nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。% w+ j$ s- ]* g* U
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ Y& R5 I' u5 b% t7 L( E# j
mysql_connect($server, $db_user);查询数据库的代码:
1 {5 k6 e2 S, D, m5 K0 Nmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。+ [- [: t p( `. i7 L! b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 _+ o' B7 O7 x('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");. u( w# j7 \& s5 \5 u
如果用户用错误信息的话,这样处理。; h9 y% N: [0 T7 X' j
if(!($insert)) {+ L' O) X0 k u$ F' A
print "Useronline Insert Failed > ";
4 p# F5 t' R0 _3 L}然后实现当超过设置的时间就删除该用户记录。
: E* E' l! H" y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 ?9 a5 C1 S& c1 Bif(!($delete)) {
+ |, [5 e, c- x/ Iprint "Useronline Delete Failed > ";
$ ]) Z2 n- l: U2 {1 u}下面我们解决数据库中不同IP的问题
$ D& z! ^, V( W$ Y% j) u* @' ?$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
* a( \( Q+ F* @' Omysql_num_rows(query);来统计用户,代码如下。' L1 I% Y) Z! Y" R* Q- X
$user = mysql_num_rows($result);最后关闭数据库。
- `; x/ _8 `) \3 m3 emysql_close();显示在线的人数。8 F! k q/ W5 ]- o. V' b1 Y
if($user == 1) {
& ^; v2 V, Q/ O% `0 \# lprint("1 user online\n");
* K, e- |7 P3 @$ |" \& h} else {
- `( F) m' n) _+ W3 }# u' m9 uprint("$user users online\n");' c) T/ u2 C1 @) P R
}最终把上面代码写成一个PHP文件如下。" H2 J3 P6 d c) f) N
<?php) \' W. h1 D- E' ]3 t$ U
//Put your basic server info here& h4 z6 R! j. D+ E1 ^
$server = "localhost"; //normally localhost
; o. H- ~9 h) B$db_user = "root"; //your MySQL database username0 k) j4 y/ t& C. ]; Q
$db_pass = "password"; //your MySQL database password
+ Q( C$ n7 a( s9 X) k5 g5 J5 ?8 ?$database = "users";
. @$ F @! ?( b& G' m# g' g$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are9 \) |$ Q6 o8 f* @9 l" ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last. ] Y# j9 k& M5 G* z# {5 o$ X# J
// $timeoutseconds seconds)' V- e9 v8 s! d
//this is where PHP gets the time
( L5 B3 `9 d' F7 U+ L. G! ]$timestamp = time();
- g6 z, a% P0 u- n9 O1 I6 k//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: b3 x0 h' w0 G) t& U% n. H K
$timeout = $timestamp-$timeoutseconds;
8 w9 P& B, x0 C3 Q X" H0 P9 ?( M4 @//connect to database
8 a- R$ H2 e' `mysql_connect($server, $db_user);
0 U2 G0 R S3 E2 [, B( N1 I//add the timestamp from the user to the online list
% T& N' ]7 f) Y5 K0 a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 m5 V$ M C' o) D6 [% Z" ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) Z) @$ [2 @9 }6 H( `& bif(!($insert)) { c7 O8 r9 p' U6 i$ k8 R
print "Useronline Insert Failed > ";
p( o9 N# { v1 U* ?) b}
/ x) R4 ~8 B7 E% H//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 ~2 ]( S0 t, z8 @ R7 h$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
, H- }1 D D; dif(!($delete)) {1 n& o. Q9 X! G
print "Useronline Delete Failed > ";- ] b+ L- Q; H: I& C
}
+ l; f* `- U! T5 Y//select the amount of people online, all uniques, which are online on THIS page: q: C8 Q- k% y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
+ h N( V% ?' C) c" p5 ~ Q5 y% }+ _if(!($result)) {
. ?- m; a: p$ A9 V. Tprint "Useronline Select Error > ";
7 d: k$ \3 x$ y; }}! v. b& C2 h& _' Y
//Count the number of rows = the number of people online
0 n. T3 i7 V) u4 T2 H$user = mysql_num_rows($result);
& f L; {0 p3 [9 g( r' y//spit out the results
# \* E- v( O$ A3 m. Xmysql_close();
3 }, K) y+ A- _, y# Zif($user == 1) {
5 z& b1 R6 s2 u. sprint("1 user online\n");
4 I: {* }9 p& ~) N" g' H} else {. v. k" Y/ t2 L& D* M! N- D1 l0 E
print("$user users online\n");
" i% U9 o9 n$ o: |, z. q}- j- X2 |3 C7 `+ a, u
?>
3 v0 G4 _5 I1 m& Z7 m) Z
$ ]) L: H( Y& l$ N) j* ~+ y以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ V( z0 z8 |$ T, ~ M* x
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! i! R- {5 m5 E& }( H# {' H我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。- K# p+ N- ]) y
当然啦,这两款主机也是相当不错的。. } W; C% A* I/ [( S& `8 o
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& L, }" {. s! T0 ~1 @5 n标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年7 e' {4 l" w& \4 c2 q/ L
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
7 O+ f5 f) F9 x( r) C3 ^# j8 w4 W空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55& v% a% K/ D$ @! t
自己加QQ去问吧。 |
|