|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
* @9 H* F( ^+ ^ l. Z% J我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 ?, h) ]" d' O m: i/ j9 l: ~首先我创建MYSQL数据库表。
3 v$ ^7 v% G) Y( v2 wCREATE TABLE tablename (6 k& Y! }0 T6 b. p
field type(max_length) DEFAULT 'default_value' (NOT) NULL
' |" l7 E8 p! ^}可以使用的SQL语句。
j; k5 @# @8 |1 t" N+ f7 x3 UCREATE TABLE useronline (1 a" x H! s4 b( q$ B
timestamp int(15) DEFAULT '0' NOT NULL,
# v9 W* V) T* Y- d. y" Wip varchar(40) NOT NULL,
0 e- _3 s2 V' O/ s! ?4 B; gfile varchar(100) NOT NULL,
& Q9 @4 M# m( {3 h2 m8 s; `0 zPRIMARY KEY (timestamp),
1 O w7 u! H% A) e3 e6 k3 W' y; IKEY ip (ip),1 Y$ v4 H7 P2 G' b$ X t, e D
KEY file (file)4 P' x1 S$ F5 d
);下面我们是PHP脚本,首先我定义MYSQL的信息。
/ Y4 }6 ]. X) ^2 Z9 ~/ \) |$server = "localhost"; //你的服务器
+ A, @: g% M! w% z4 ^; u5 U$db_user = "root"; //你的mysql的用户名
4 d3 ]# r/ E2 M) J% @8 j$db_pass = "password"; //你的mysql的密码
( u1 w2 a1 p1 l2 P$database = "users"; //表的名字设置统计的时间(多少秒内在线人数); y9 W2 a7 ~0 ~* k4 C
$timeoutseconds = 300;取当前时间。
. |: `5 ^4 _/ g% n# l$timestamp = time();上面的完整代码:" J9 p. K0 w0 _$ G( J* L! p
<?php, Y$ Y$ k# K* C$ j% G
$server = "localhost"; //your server( @2 ?" l; z9 ?+ e& L1 T
$db_user = "root"; //your mysql database username! D2 ?6 S, {2 N7 U4 o: D" F/ t. e. n/ o
$db_pass = "password"; //your mysql database password if any7 g- O- w- {$ s' |$ w0 n/ ~; }
$database = "users"; //the db name
( V; q! f1 x' [+ I0 @$timeoutseconds = 300;//timeoutseconds limit( ?9 l$ r! ^) e; \& ^# q) S4 q" |
//get the current time
+ P8 T: A+ j; I* f$timestamp = time();$ ?" z9 j' {& _) d( j, o
//calculate the lowest timestamp allowed3 V% G ]. ?, i- o6 y
$timeout = $timestamp-$timeoutseconds;7 I+ r% _$ Q% \" D6 Y @7 A
?>连接mysql0 a; q9 [9 O. T) p7 y- ^
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
( O" A% x- K$ r& l* qmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% v& {. ~: G2 i' w
mysql_connect($server, $db_user);查询数据库的代码:
4 k8 d. r& V# C/ k" \9 s9 kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
$ T+ s F9 `7 t% d$ \, p F$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ ?+ A2 s3 `7 P" N8 b/ t8 b Y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ V3 c) d1 {3 m, Y5 n8 T+ d# Z
如果用户用错误信息的话,这样处理。
) W: G' `. h; O) r* qif(!($insert)) {: e" P+ T0 x8 o/ i7 R8 x
print "Useronline Insert Failed > ";- r+ O" U' j( }2 @, b+ K* l
}然后实现当超过设置的时间就删除该用户记录。+ \1 |$ r7 V0 f
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, Z" M5 o) h! vif(!($delete)) {; `! F. \% ]! S
print "Useronline Delete Failed > ";
- ?8 v8 g0 [. r& h}下面我们解决数据库中不同IP的问题( p6 `$ V" y4 g+ X
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用% z: S. T+ X s% b7 a& q) b \
mysql_num_rows(query);来统计用户,代码如下。) b- e: P+ x+ g' l9 A+ o* {
$user = mysql_num_rows($result);最后关闭数据库。
- P( s% V, R" mmysql_close();显示在线的人数。
$ n' q* m) _5 w( Aif($user == 1) {
) r2 x+ ]4 h$ ?4 C9 ?" a# nprint("1 user online\n");3 R! ?) F8 v3 d/ H; z5 x
} else {
; l k- R6 I/ B6 T, J% Oprint("$user users online\n");6 z2 M% w+ Q) T3 ~3 i2 [5 L5 K2 ? o
}最终把上面代码写成一个PHP文件如下。7 z2 f$ l( p/ c1 p7 _ A
<?php
, [1 b3 l$ M7 }* U& Z' S//Put your basic server info here
: Q. \6 a! D. `6 j$server = "localhost"; //normally localhost' }3 y2 ]- S: b- G7 c
$db_user = "root"; //your MySQL database username2 V: t+ J& b# g( E5 H! J
$db_pass = "password"; //your MySQL database password% ^% C0 I: h0 |% v" t: O1 L+ A' `
$database = "users";
6 L* d8 N8 y( f) B* _1 r' w$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
Z6 O' u/ v/ v, s. G8 _9 F _// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 V/ x% f- s0 c# c! v
// $timeoutseconds seconds)
w, Q6 m' \/ R6 B+ p1 M. h8 Z9 K: a//this is where PHP gets the time
% P' k( w; ^* u; @5 [3 E$timestamp = time();
. {5 a* K& v* j/ x& P! g//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- U6 O* B/ U u$ }4 ]
$timeout = $timestamp-$timeoutseconds;
* `( S, e* Y9 A//connect to database
4 q9 h8 s% t0 v7 z$ J* ~6 @9 F/ Umysql_connect($server, $db_user);! e, ~8 ~: y$ g, V; S
//add the timestamp from the user to the online list+ y ]9 P! ~! {# d4 ^
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) w% ^3 ?& p e" r j& z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");' C0 }7 b# H0 @
if(!($insert)) {, F0 ^9 K# ~6 t8 d6 x/ J; b
print "Useronline Insert Failed > ";
: m7 p; d6 Q3 ]1 t$ z} m$ J; ~- X* P Q5 ?! C7 z0 c$ o4 i
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" `, M0 Z" x' ^$ {$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
0 x) S5 l" u8 R* r( ~5 T! yif(!($delete)) {
! [. o/ K) y/ T/ [print "Useronline Delete Failed > ";
9 c0 Y. Z, S' _4 h0 l U& I( n}
1 O% ~- N. l( C" _3 ^, X//select the amount of people online, all uniques, which are online on THIS page; o5 A( Y4 U* A7 B) y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ o( ]' r# I# [/ V
if(!($result)) {: F; @: G' O& p8 ]" w4 S
print "Useronline Select Error > ";& X6 t: ~$ p" F% L3 x
}5 s7 c( S4 `+ n" W" ?
//Count the number of rows = the number of people online
- Z2 \, e) V3 z" L$user = mysql_num_rows($result);! m) `& g7 d4 V
//spit out the results
$ Y' }- v4 t tmysql_close();
7 [. T, m1 L3 E* F! M7 ~( _if($user == 1) {
+ A" Z" W' v/ b: u5 c6 m3 ?" Hprint("1 user online\n");& o. c: M; ^3 A
} else {3 D. ]! V7 e+ _
print("$user users online\n");5 M. M+ E2 O/ W2 m# \0 Y( l
}
, ~" K' d; h" u0 e+ e _* H?>
( d |6 i& Y* ~; D ^8 ?6 j7 i * I/ t. _" q, I( K1 {# j
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。5 a9 x1 d- Q" ^
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 j* A7 A% d: h f1 X0 ], b我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" J: [: {$ @) m. }% e0 c当然啦,这两款主机也是相当不错的。
_/ ]' f" K" [! h v* p智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年) E, v0 T% \- i- _' x* A
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! ], x, Y* Z5 A5 R提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% {+ E, }( P* W% x% F1 R空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
+ v% d: }0 n" X( Q# ^" o. ^- D7 ^自己加QQ去问吧。 |
|