|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
% H' \. W' d( ]2 n; p' x5 N/ [我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。! a% D5 G; M3 h. E5 i
首先我创建MYSQL数据库表。
. e5 d5 ^. j7 V8 Q1 ~/ j8 X9 zCREATE TABLE tablename (
. T: r% ?& b) _2 w) }" U- Cfield type(max_length) DEFAULT 'default_value' (NOT) NULL
% ^4 Z8 B6 ]( {7 C$ @% _}可以使用的SQL语句。* h2 a c* N2 i8 X
CREATE TABLE useronline (
1 h6 ?9 Q' B5 N- Y1 ^timestamp int(15) DEFAULT '0' NOT NULL,
: \: Q% T0 m' X4 cip varchar(40) NOT NULL,( G# [$ R- ~: W( j8 ]
file varchar(100) NOT NULL,9 ]* ]2 f3 J( H8 f" L( s+ ^
PRIMARY KEY (timestamp),. Q- I: o" k8 } X/ i. j
KEY ip (ip),: z0 {: b- i0 C8 j; N: ]; v( W
KEY file (file)* l/ O4 n- v' b3 H4 X W; z
);下面我们是PHP脚本,首先我定义MYSQL的信息。
8 i* A9 W v3 u0 D$server = "localhost"; //你的服务器6 s/ z2 |' K9 g/ L$ a! e
$db_user = "root"; //你的mysql的用户名2 y: G. m- v+ j7 F/ \
$db_pass = "password"; //你的mysql的密码2 L* T- s, U3 e
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)7 k2 N8 y* o6 ?, f
$timeoutseconds = 300;取当前时间。
2 B0 P, E3 s# M4 W: [; }$timestamp = time();上面的完整代码:
: N! c; ?' B5 L4 n. s! j& N<?php
, H5 \% @/ }( e! ] V$server = "localhost"; //your server7 `' Q8 d9 ]& M
$db_user = "root"; //your mysql database username6 W1 }- m7 J' d6 L+ e N
$db_pass = "password"; //your mysql database password if any2 j1 L& M& t+ ~& t
$database = "users"; //the db name9 _1 @6 E) P/ W! k
$timeoutseconds = 300;//timeoutseconds limit
# P, M9 k+ X: u( Q9 e0 G( z5 g( e//get the current time
* S0 a( e5 q( r% u& J2 u$timestamp = time();
* K9 P* Q" `0 h//calculate the lowest timestamp allowed
% p8 z2 {8 X G1 X$timeout = $timestamp-$timeoutseconds;
: v Q. ?8 v: j6 I' ~?>连接mysql1 F# i+ v; h. d" _! L& a# B2 l
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
- V1 U- a2 o0 [8 v! ymysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
9 q0 @" G4 y! p8 y9 xmysql_connect($server, $db_user);查询数据库的代码:" ~' L6 W) N: T( i9 x
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。/ b6 ]2 H$ H( Q4 j
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) y* [/ j# n3 k0 N& D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% {3 q+ }6 ^5 }' ]/ `# g4 R
如果用户用错误信息的话,这样处理。) R1 P0 q' q/ O$ s$ A' o
if(!($insert)) {
, c" B, V0 X! Sprint "Useronline Insert Failed > ";
! F6 z: {# z" c, a( ~" y; X; p! G}然后实现当超过设置的时间就删除该用户记录。- H; K4 n3 V9 b0 j
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% g# O9 u* X' ]$ d
if(!($delete)) {1 G# h: w5 e8 o/ ]
print "Useronline Delete Failed > ";
|" |& V+ F. m' w}下面我们解决数据库中不同IP的问题. W5 K, P- w; T, U" h
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用1 R2 n$ V" a& \( f: Z
mysql_num_rows(query);来统计用户,代码如下。+ Y2 C% C1 F; V( Z$ H* r$ J
$user = mysql_num_rows($result);最后关闭数据库。
& @* X: K$ z$ y. O# E& ]mysql_close();显示在线的人数。) M0 I4 g' B. |6 T" C' F7 U+ ~. D
if($user == 1) {5 c" Y& {5 Q- k% P5 @
print("1 user online\n");2 W. {5 i! z T/ ^6 F
} else {& B) [2 G4 u% p; U0 E: Q% `
print("$user users online\n");7 {+ O3 c$ Z3 T& h& a
}最终把上面代码写成一个PHP文件如下。* |3 }+ I7 a' ~2 _6 T0 A) a4 g+ G
<?php( ^ Z- `/ @, v- j
//Put your basic server info here" G# C% B" ~3 ~# R, s- R* `
$server = "localhost"; //normally localhost
6 W5 T: ?0 d8 b# Y7 z0 R1 |2 T$db_user = "root"; //your MySQL database username
1 `' ~6 L3 n, r$ B$db_pass = "password"; //your MySQL database password* j0 q% E5 K- U
$database = "users";
9 z' X4 q( s2 H2 A3 V' k9 ~$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" U" D$ B! b0 P8 |
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
" J; }- L7 L& o// $timeoutseconds seconds)5 _% E1 U% L+ Q
//this is where PHP gets the time+ O5 D9 f% i8 X
$timestamp = time();
$ t$ a E+ a6 ?. w; s" B//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
& d! _& R" b- q. g5 ^) y% R$timeout = $timestamp-$timeoutseconds;) p) y9 l' G) t2 h3 x2 R! t
//connect to database# Q& y% y1 c: z+ H
mysql_connect($server, $db_user);7 m# m- \0 q0 D; E# p
//add the timestamp from the user to the online list
3 |$ A; U( U! o6 o% R* A+ Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 h7 M' [ |* v! b, s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( z5 ?& R2 Z q/ Q; w; k+ b; r
if(!($insert)) {, F9 J( ^2 N1 c
print "Useronline Insert Failed > ";
. S6 D. F; l0 m8 M}
' W) C! R c; l: @//delete the peoples which haven't been online/active in the last $timeoutseconds seconds., N6 g2 \& {1 E# G/ {9 Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");! |0 q( c+ B9 B$ s7 s& g
if(!($delete)) {
/ U. F( T- m5 i. Y+ a3 E% I1 {print "Useronline Delete Failed > ";
# q+ e0 h+ _; {& h' W}2 o6 v5 @# y, k) k
//select the amount of people online, all uniques, which are online on THIS page
" E1 G" l6 G& A: K/ W4 c0 W$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
' f5 t0 N6 }- |: O3 S( J" Q6 `5 {if(!($result)) {4 [! f5 t1 I, _4 r1 i, z# T
print "Useronline Select Error > ";( y) V6 s2 K4 l; }; F1 N- N
}
: v: @* j" u& x//Count the number of rows = the number of people online$ D* M1 O) r3 d# Z J% a% r4 u
$user = mysql_num_rows($result);6 {6 L6 k8 j% X8 r# v
//spit out the results
3 [1 _: o4 R; i- c! G- bmysql_close();2 F3 t7 N" ?. j$ l( c/ @
if($user == 1) {
! X* N9 J# n$ Y1 Z* `print("1 user online\n");, M% w V2 Z4 a* u ?9 k& J4 |
} else {
" h \+ ]* l6 ~& e$ ]print("$user users online\n");7 J( ]# q/ _" d `1 _: t- D
}7 L9 d2 C( N: H" x9 m
?>" B% |' E) [/ v- P
, C$ j- O3 v- }
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 Q p' Y7 Y: e时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。$ Q; Z5 z- C# R! D9 l+ N
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. D+ \0 V' e8 h! Y3 }3 E, t2 k
当然啦,这两款主机也是相当不错的。' }1 A* _# O) n% G* o# ^
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: y* h5 l1 I7 Q, l6 p" o \标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
% I" g( W5 ^! W/ G' a6 n/ a/ a% ]提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * s8 z# \! Z2 N" I a/ s! T
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ n# z- T' D+ i( D, C自己加QQ去问吧。 |
|