|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; w$ d# X* B9 P1 x我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
f) k7 F$ C- M6 R首先我创建MYSQL数据库表。% y0 V1 ~/ G" t: N0 Q& `
CREATE TABLE tablename (& I. ?7 Y9 a- j$ _' i
field type(max_length) DEFAULT 'default_value' (NOT) NULL
$ a) N& p# P' I# T- Z1 g" q}可以使用的SQL语句。/ k% G/ H% f& F5 O$ E
CREATE TABLE useronline (
5 y- ?0 M( @) W' G7 d- u- g8 V7 j& Otimestamp int(15) DEFAULT '0' NOT NULL,
$ Z8 x! G: n! U- s8 }: v' qip varchar(40) NOT NULL,) q. E! h7 ?5 [
file varchar(100) NOT NULL,
( T. h( E6 m% zPRIMARY KEY (timestamp),4 g9 i: n7 s0 m
KEY ip (ip),
. T+ x5 M0 ]. @7 ^7 A% G& YKEY file (file)4 |% t" E/ q. ]/ Q' a3 V8 I
);下面我们是PHP脚本,首先我定义MYSQL的信息。/ I1 \! |; B1 L2 v
$server = "localhost"; //你的服务器
7 U& t( ~) z; i: U r$db_user = "root"; //你的mysql的用户名
. y' s5 B, ~, M, a! D: o$db_pass = "password"; //你的mysql的密码8 q* l4 L0 w+ Z+ L# \4 I! ?
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 b$ h. M) a: l7 D1 r
$timeoutseconds = 300;取当前时间。& h& a8 R* F/ q4 `! _
$timestamp = time();上面的完整代码:
8 ]# N8 j p: X) z1 f4 U! _<?php2 N+ P' F/ ]) I' B! q9 H: J# B
$server = "localhost"; //your server% J+ i& [0 }$ L4 Y0 a
$db_user = "root"; //your mysql database username V( Z* E3 f+ M5 E2 S( e
$db_pass = "password"; //your mysql database password if any: H; ~. O; A5 `( ~4 ?- R1 S1 b
$database = "users"; //the db name! P! g6 k( ]" d3 J9 [3 Z
$timeoutseconds = 300;//timeoutseconds limit
) q+ o8 U; @; ? B//get the current time
& h, x8 R3 _4 a$timestamp = time();6 M/ z8 Q* t* O: z9 T9 O
//calculate the lowest timestamp allowed( N* ], c2 R0 c0 b# A" ]6 k: w
$timeout = $timestamp-$timeoutseconds;- x( b) E9 h8 O$ \7 b8 N
?>连接mysql
/ e' }9 r* y3 P; I' p! _. Jmysql_connect('localhost', 'username', 'password');也允许使用变量形式。 h8 w7 ]. ~- F3 M* Z- u# }
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
h' s, k; D8 g s( n7 K, |mysql_connect($server, $db_user);查询数据库的代码:# g4 t9 u7 K1 G; O7 p
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。" G+ u5 C* k! l' Z% I( M+ |3 ]9 X
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' V# ?! @1 p3 d, r3 u0 B5 }+ D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# i3 b2 H8 ]" K9 n如果用户用错误信息的话,这样处理。- x2 w, y. A p/ k. i6 [
if(!($insert)) {
8 V' t. h6 K- i! D2 q$ Gprint "Useronline Insert Failed > "; r7 e3 ~( l6 T; C1 M- n( @
}然后实现当超过设置的时间就删除该用户记录。
6 u2 q- A7 M$ h) ]% B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ F! K, a9 y/ l* I
if(!($delete)) {% \4 p8 E1 `7 m- W" D( I* u
print "Useronline Delete Failed > ";! m f3 |% L/ _* D# |* m
}下面我们解决数据库中不同IP的问题
7 \8 u$ Y4 ?) b, Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用! g8 M0 _9 l9 F
mysql_num_rows(query);来统计用户,代码如下。
% T! w( m8 b/ O3 Y0 t* X9 B$user = mysql_num_rows($result);最后关闭数据库。7 s2 u6 l: d* n2 D/ Y4 o
mysql_close();显示在线的人数。
) h& E* Y% }! a6 Dif($user == 1) {
3 J* w1 [7 Q0 b* E4 @6 Uprint("1 user online\n");
* S' {. E3 `& R3 i} else {
2 D$ q @" r0 m6 I6 \/ l* }print("$user users online\n");+ o2 w. n5 a) ~. L
}最终把上面代码写成一个PHP文件如下。
/ C/ }: d+ f) i6 M<?php
$ N- w; f' f: Y J2 z//Put your basic server info here4 k9 z: s. {) w$ B" t7 m7 }
$server = "localhost"; //normally localhost
( ^( m; Q$ a2 P) G$db_user = "root"; //your MySQL database username9 N L6 ] A7 f
$db_pass = "password"; //your MySQL database password9 J0 w8 t' c& ]9 k) ^7 h
$database = "users";
! Z8 j i( b7 O- U9 t. b$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
5 u$ m7 w& s2 Q// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
- E; K) n) b# X// $timeoutseconds seconds)3 b& t# w- A4 u& r9 e4 y6 h
//this is where PHP gets the time7 b7 u* o: C; h6 F2 R1 h4 E
$timestamp = time();' ?! _. N9 R# c2 f' p
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ X& C2 v6 Y0 d6 f4 ]' I$timeout = $timestamp-$timeoutseconds;. |+ x% q7 \; i ^$ W
//connect to database/ M/ S+ k3 i; y% Q; N/ y6 q
mysql_connect($server, $db_user);/ r( `4 s4 {! M2 p
//add the timestamp from the user to the online list
: Y- Q/ C: F% [* D$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! c7 [5 r; x5 W! y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% q/ J. }! p5 ?( C3 f* J0 aif(!($insert)) {
$ Y1 Y' M3 F( {print "Useronline Insert Failed > ";: _7 Z. F' ^$ G. j- v; i
}
9 \" {/ d* z/ `5 z- v3 i# m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- E. ?' N+ Q. J9 I N$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");! @" o7 M4 x/ A$ g
if(!($delete)) {
3 U* F" S! D- t. p0 n# K- Gprint "Useronline Delete Failed > ";
$ h( p9 d: ]1 {3 {}
% {. O& g q' N//select the amount of people online, all uniques, which are online on THIS page* r' o+ k, m9 T. M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
! {0 `! ^1 q2 y4 f% u" ]if(!($result)) {
5 |' h! [. j0 ^print "Useronline Select Error > ";
" \8 a! ~4 M4 I4 [8 Y d}
( @& e0 b0 P; P/ H! W//Count the number of rows = the number of people online
7 I3 Z0 z. t% e$ L" @$user = mysql_num_rows($result);# R7 B% \3 R+ F) K1 ^
//spit out the results
4 P' |# W/ U% t8 c! D3 H% }4 Amysql_close();
) b+ l3 w4 s- B' ]if($user == 1) {, Y( ^% }* w# ~' l% V4 w/ Y
print("1 user online\n");/ o* s2 O3 ?% t; u1 q$ Y1 @/ @
} else {
4 R& T. W3 O, n3 l; J# o" Z0 Hprint("$user users online\n");
. H3 @2 F5 u/ w}6 g; R, O3 r5 k2 _2 a8 Z
?>6 y6 r2 L0 R, T( j0 e c+ r: ^6 @2 h
7 E6 p, K( b4 P7 A
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
4 Q3 w# m; f' y时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 S# D/ T8 O y& j, d" K我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
$ n9 ]; P/ J( C- J9 Z当然啦,这两款主机也是相当不错的。
' ?4 T; u3 J' f) G* O! S* d智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( F& i% }( N( W! R标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
1 O, S9 N1 z) h" w! P, U: x提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
6 x0 l! a8 r% G, U9 N0 x( F空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
2 S. N6 R1 N+ m0 N$ \自己加QQ去问吧。 |
|