刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
1 X3 S! @! Q: _8 l0 A
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
* g! D) Y# h8 r3 e9 {$ b5 G8 l+ c首先我创建MYSQL数据库表。
5 w' @" I7 H7 o) m9 k6 ~0 h
CREATE TABLE tablename (
+ X, Y. o3 y; v- i+ j. {7 Tfield type(max_length) DEFAULT 'default_value' (NOT) NULL
$ |% a9 G9 r l' o, ?- j; l
}可以使用的SQL语句。
* ]5 U1 E/ Y7 ICREATE TABLE useronline (
4 ^; x( d2 g+ E1 d( itimestamp int(15) DEFAULT '0' NOT NULL,
* t. b3 P) j4 ^* X3 U0 d' qip varchar(40) NOT NULL,
' B7 z( W' y- ]: }, v$ Rfile varchar(100) NOT NULL,
; R4 J% C2 P4 |7 M) Y7 P
PRIMARY KEY (timestamp),
6 A! s* i% v( c& w# s2 e
KEY ip (ip),
: ~! b b/ @9 k; b; {7 E/ bKEY file (file)
( o3 f0 ?" d' Y3 s' p$ Z);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ i- A5 n1 ?. @3 M G9 r! i. S6 a$server = "localhost"; //你的服务器
2 z3 \7 |0 v# c( V0 x# D( p
$db_user = "root"; //你的mysql的用户名
2 U [" O8 x6 j0 g. n( j. h
$db_pass = "password"; //你的mysql的密码
$ q k: K5 ~. d M6 T4 M
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( x& Z9 I$ J+ I# h$ O$timeoutseconds = 300;取当前时间。
$ l1 X2 [( f; Q' A9 l3 ^+ N
$timestamp = time();上面的完整代码:
! T( A$ d9 q" u4 G<?php
' O" o' v' ? O; ]+ F" [* }$server = "localhost"; //your server
5 W9 E- z# t9 M4 D
$db_user = "root"; //your mysql database username
1 `* ^, q- {$ Y% ?
$db_pass = "password"; //your mysql database password if any
& `8 ~# c2 c7 R5 {' ]6 ~1 z# X
$database = "users"; //the db name
; w; I {! @ g
$timeoutseconds = 300;//timeoutseconds limit
. J0 }9 R/ K' o//get the current time
; P/ Z: |! e9 Q$timestamp = time();
& }" K+ U& r. d. P0 x//calculate the lowest timestamp allowed
; R% V `7 u) P; b8 I/ m
$timeout = $timestamp-$timeoutseconds;
9 z% V: Z& i/ V: B' G9 n; g5 l# W?>连接mysql
# N# d* `5 m! F" Ymysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& H$ f1 U; L* P- w* Z" l! a4 g
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 h! s! O8 y% o6 Qmysql_connect($server, $db_user);查询数据库的代码:
/ [) h7 [ I4 s" a4 jmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
6 D6 u: J5 }6 M9 d+ v
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( A8 B) g, O% Q7 I% i/ c; x('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% z0 E2 I5 V/ q6 i
如果用户用错误信息的话,这样处理。
: Y% F- n/ |9 m
if(!($insert)) {
+ u. s# |/ I5 }* Y: o& ]% S
print "Useronline Insert Failed > ";
. t; V7 S) q/ \, r* T0 A& N; }}然后实现当超过设置的时间就删除该用户记录。
* J1 M, @5 ~. b4 `3 ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, F% N' c2 F8 |. g
if(!($delete)) {
3 c9 |$ y$ [! s8 B# d5 y5 q
print "Useronline Delete Failed > ";
6 s1 Z" f' t. \) @" r}下面我们解决数据库中不同IP的问题
- K2 ~. [* Q9 q, a; Z# j
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
1 C: ^8 b. k. S
mysql_num_rows(query);来统计用户,代码如下。
9 \: g: q4 Y; R) h" a1 I. W
$user = mysql_num_rows($result);最后关闭数据库。
6 d9 H& n2 Q5 ^2 a" Y1 l1 m3 p! r9 Pmysql_close();显示在线的人数。
9 w e! ]3 A) ^! l& j! uif($user == 1) {
# r+ U; j+ M4 q* a5 }% pprint("1 user online\n");
* }0 [* r/ p; _/ s
} else {
S& L- M" V9 l: V, ]5 n5 k+ [* Qprint("$user users online\n");
& v+ o4 o* c4 ]2 I! u/ N" E- ]1 i
}最终把上面代码写成一个PHP文件如下。
/ P1 \$ c/ i: V' a& U2 J
<?php
; S H5 U* S) T* R( k( r//Put your basic server info here
+ _- E4 @+ z. Q: m: D2 Q' i4 R4 P
$server = "localhost"; //normally localhost
! }3 r' u E1 s( v5 J2 C$db_user = "root"; //your MySQL database username
* W( Y. F+ F1 P i$db_pass = "password"; //your MySQL database password
, I: |4 y& D V$database = "users";
$ G! y# q" r3 G' F6 e9 O- a$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 ~6 Q' D0 f' J; b! z% ^: F$ A# J// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
" t+ a2 y0 V1 F4 t# g% C
// $timeoutseconds seconds)
9 e9 B& }0 g3 L7 w- Y1 X- I//this is where PHP gets the time
( _% k$ U7 c# y* x( t
$timestamp = time();
1 G; i* @% m& r9 t7 ?//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
) M$ k! e! E5 ^( u6 n1 w6 S I$timeout = $timestamp-$timeoutseconds;
9 Q+ z9 R# l4 c5 O" o+ H% j% o
//connect to database
/ ?2 q* d1 B3 [mysql_connect($server, $db_user);
% ?, M7 K- t: ]$ Q//add the timestamp from the user to the online list
# C( S- ]$ @) S4 f( y" E) Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) {" \" S' K9 E4 p. b: l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( H1 E% x8 d2 B* o
if(!($insert)) {
* `- O2 E7 Z8 N' H( B8 a
print "Useronline Insert Failed > ";
* {9 a l% u H; u! K: s5 n
}
. P% [: x2 Y! E4 i8 S0 I//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
* c; H% W2 W7 s% t' V$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) S9 X- z: u% i n: j7 k5 N4 K. l( zif(!($delete)) {
" T9 P6 W9 {7 t
print "Useronline Delete Failed > ";
) P( ]: i6 L' i* C6 K/ r' x}
" |) S+ c# m" Y5 ?7 |/ C
//select the amount of people online, all uniques, which are online on THIS page
8 v& V. H" f3 k: L/ Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
( k+ |/ D" e) y) o
if(!($result)) {
1 Q9 X+ A% r; S. |print "Useronline Select Error > ";
- ^4 [( h. ^% [5 t! K- ~# ?
}
H$ t, g; a( ]/ Q4 K' k$ E//Count the number of rows = the number of people online
7 `- `( K3 F1 j0 o# }
$user = mysql_num_rows($result);
& J# y! V2 P+ Z, r0 A
//spit out the results
& K, `! @& [( S/ G# G
mysql_close();
/ `& ~- m. ~2 A7 y- c! ~7 p, vif($user == 1) {
9 a* I& u3 X, C$ q4 z% @% D A8 qprint("1 user online\n");
h6 I' J5 {: i) _7 a; f; x} else {
, |# t& d$ ?, I1 o# e2 a) Q3 `2 @print("$user users online\n");
6 Y- l' [5 L: B# @& e7 s! {
}
9 e, f% U+ Z! t4 P?>
& g: I; w. ~; h, t$ }
; t* M" t, i; m* d1 K
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! E6 A7 N3 ~$ k! |6 g9 j- |
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
5 e2 \, q3 h6 E: m7 D我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# e9 r0 j" m4 ?( h# c当然啦,这两款主机也是相当不错的。
, b9 O5 M9 W; S5 [) x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 J. r; E7 \! V3 T2 A* Z标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
8 f ~ ?+ E- j; z: a
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
2 }4 L. I/ L* Q$ S( b" M空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55) r+ `+ ~! J0 x0 e
自己加QQ去问吧。