
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 b/ a9 Z1 {3 w# p我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。1 R: _( M# q o5 C
首先我创建MYSQL数据库表。
' D$ h9 ^2 I) d( BCREATE TABLE tablename (* h7 f1 J0 c: \( z$ x% N) E# b
field type(max_length) DEFAULT 'default_value' (NOT) NULL( W, x n9 z B3 D" }
}可以使用的SQL语句。
3 Q u& w5 _1 k* R4 f* z" sCREATE TABLE useronline (
/ c' n! Q4 h. v0 m2 e) Ttimestamp int(15) DEFAULT '0' NOT NULL,
' g1 ~' W- G1 |ip varchar(40) NOT NULL,! Z2 Z. k" h" e* a
file varchar(100) NOT NULL,
' O. u- w: o8 M3 _0 d2 u; O YPRIMARY KEY (timestamp),
' I9 _ t2 n1 w2 xKEY ip (ip),
+ M& x; @: a$ ]5 J6 n1 ZKEY file (file)
1 F `# p$ S8 x);下面我们是PHP脚本,首先我定义MYSQL的信息。9 q5 l! G) Y/ G# F
$server = "localhost"; //你的服务器9 x$ j4 w& p- c# e6 I. u$ t' y
$db_user = "root"; //你的mysql的用户名 R( v0 E$ m1 \& k8 d7 V
$db_pass = "password"; //你的mysql的密码
2 f' t) L5 p }9 W2 v) V& X$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! N" z0 @& t% |' E( `+ e$timeoutseconds = 300;取当前时间。7 p6 W, F; p( m8 v
$timestamp = time();上面的完整代码:
) b/ e$ f2 G* f1 |2 A, i<?php
7 P; c2 }0 N; @$ a$server = "localhost"; //your server9 d$ X4 I; a" g+ D
$db_user = "root"; //your mysql database username; y2 h- j0 R1 W3 w
$db_pass = "password"; //your mysql database password if any" E. B" K! {9 Z. \3 f- G
$database = "users"; //the db name
8 o* X* ]& G8 ?7 k$timeoutseconds = 300;//timeoutseconds limit
0 v# F9 c$ d: p+ c V//get the current time( l7 L/ B6 A& d" w3 l
$timestamp = time();7 m& O; F% R+ }* Z6 c
//calculate the lowest timestamp allowed
3 {( @6 I, w3 k/ j ^$timeout = $timestamp-$timeoutseconds;, [# E3 L! Q$ F: E2 U7 d G# u
?>连接mysql0 D9 j% D0 ~2 K& b6 s( [" I
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ v2 H6 Q! {# L" z; Cmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 c0 }7 o2 p0 e6 d3 u, {
mysql_connect($server, $db_user);查询数据库的代码:
1 f# _; _. F% b" l3 f( smysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
$ D9 I5 f, j+ L3 o$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! ?3 D" t& D0 o" y9 z& Z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 B* ?: Y% O$ o! O
如果用户用错误信息的话,这样处理。
4 k: A: @( y- S! b& E- Qif(!($insert)) {! n w% L* v9 Q9 r$ F
print "Useronline Insert Failed > ";" [6 @5 e( n3 V/ o
}然后实现当超过设置的时间就删除该用户记录。; i6 U, T# N$ X! H& h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
5 w2 Z) z# l3 k5 M$ g/ fif(!($delete)) {
* {( A* I6 w# xprint "Useronline Delete Failed > ";, v9 k8 l6 L: a
}下面我们解决数据库中不同IP的问题; j- Z2 O/ I$ U% B# C$ D! u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 R" }+ W5 R6 Gmysql_num_rows(query);来统计用户,代码如下。
& I, [. ~6 R; m" w1 U% ] f$user = mysql_num_rows($result);最后关闭数据库。' D# j' @7 K4 ~' q8 n8 }7 s) H
mysql_close();显示在线的人数。
) U9 o( A) g- r6 _( _' n2 Nif($user == 1) {
' t1 M! F# e) }* s: o1 pprint("1 user online\n");
+ x$ l9 F& B9 \% ?9 `8 n# D4 |} else {
! N( w& o8 ~' S: Y3 x m5 e# aprint("$user users online\n");$ ~- \* F8 c4 K9 z& F" [
}最终把上面代码写成一个PHP文件如下。, G4 L, P+ H9 e. A6 r% k
<?php7 I0 i- ^* @' ~ i, t9 v
//Put your basic server info here0 c. R# C4 R2 { u/ t3 B! R, c% c& N
$server = "localhost"; //normally localhost
1 {8 ^8 \- `1 i$ O- h$db_user = "root"; //your MySQL database username1 |& V$ {" `5 f
$db_pass = "password"; //your MySQL database password
/ K- o2 j8 h& U0 k, d$database = "users";- u- j/ W" [ r9 T. y/ y6 G
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ [* z' z& [! \7 P6 n/ T+ p) r
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 \2 V9 }% r; O
// $timeoutseconds seconds)
+ |# `! d1 V1 P3 l//this is where PHP gets the time
# f# U2 R+ a9 H. Y5 `+ L$timestamp = time();
0 M; d/ n' L% G& |5 A* l//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 q1 L. ]7 L! b
$timeout = $timestamp-$timeoutseconds;0 l% s% z3 ^$ k8 R5 E6 ?$ D+ K
//connect to database. s( w2 J8 ?' R0 K; t& F2 F
mysql_connect($server, $db_user);7 ~, Q0 c; X O* y& ^2 ^) }
//add the timestamp from the user to the online list
" e/ K! G( E, z* _0 y g: d6 s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 B1 U+ e. L( m' ]: t" Z9 f('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: `2 Z7 G: I+ m7 [" K4 \: }3 i
if(!($insert)) {
7 @2 g8 S u& S: U( dprint "Useronline Insert Failed > ";
) [7 N" |. _9 \3 B4 m* P* o}
) J$ C/ H" K. J! H f3 @" Y, V, ^//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" V4 a8 W U; ]. u3 u$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");) e) p/ Z6 [! b0 Y" _4 n
if(!($delete)) {
9 Y1 w* x; e( s# t# t' U- mprint "Useronline Delete Failed > ";% f7 w- W |( l# b. I
}
; u$ p0 J7 g, f//select the amount of people online, all uniques, which are online on THIS page
; }3 o7 J. h: k$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" w$ m3 v+ [0 }, |2 rif(!($result)) {3 t* a' ^, a2 P7 d$ K' B) Y
print "Useronline Select Error > ";' R0 h7 X3 U& a7 w9 z7 X, m2 z( c; J
} d) l# Y. }7 ? C# b; N# B
//Count the number of rows = the number of people online
' \. T& N- T# B" E$user = mysql_num_rows($result);
! V8 ]' ]# A+ t, ^' o# N8 ]/ Y//spit out the results0 n% O' l: @8 p5 d1 U
mysql_close();0 f& n( Z! }, M/ e5 Z9 J
if($user == 1) {
9 u! U. ]8 J2 ~! p. _3 O( jprint("1 user online\n");* y. F2 h! ~( A9 M; Z! }" ^ D
} else {
) C& \& W. G# f uprint("$user users online\n"); z* F) s* N7 X1 l0 p) t
}
! H% [, w6 m. p1 O+ W, _& f" y- r' A$ ~?>
* O- |( r- P8 u0 }8 \, y2 ]( u
s2 C! j. i, q( C以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。3 r2 ~6 n f( ?; Z L
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。; [% H( B9 g, D8 W% W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。6 E' ?% I' I* c: a2 Y
当然啦,这两款主机也是相当不错的。
: M. v: g$ l, N' p8 v智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年' j3 {& ^" b& @5 }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ }* M. h$ {% \5 N3 [: z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 B+ [( h8 t/ W3 T
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=555 m; u; I! c0 j5 x
自己加QQ去问吧。 |
|