|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!) }! `2 o1 N- c2 i$ ]( g
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
# K- c4 q5 d) s- i; t: e首先我创建MYSQL数据库表。4 z% J8 m% G+ q8 I
CREATE TABLE tablename (
$ m7 F' o( ~, w3 N. ]5 K1 ]field type(max_length) DEFAULT 'default_value' (NOT) NULL
" p0 E7 n5 {; U}可以使用的SQL语句。# @. K+ o6 v' t; ]) L% `+ a/ r
CREATE TABLE useronline (
9 k. w* M+ @9 F/ xtimestamp int(15) DEFAULT '0' NOT NULL,& r8 l `: f( t. S. `
ip varchar(40) NOT NULL,) \) e; o9 U- m' n1 c/ R$ V8 h
file varchar(100) NOT NULL,9 E6 v6 A' M5 a
PRIMARY KEY (timestamp),
- q0 p& Y) a" h. t& SKEY ip (ip),8 q1 M- d% g* O5 C
KEY file (file)
7 D3 q1 @3 m; P2 X/ Z);下面我们是PHP脚本,首先我定义MYSQL的信息。
! u) F* w, P1 q w6 Y$server = "localhost"; //你的服务器+ z, Y; Q+ L8 w0 N/ _1 T s6 k* O
$db_user = "root"; //你的mysql的用户名0 Z! q1 |( \ N) z% X. x
$db_pass = "password"; //你的mysql的密码
* ^/ [# N9 |0 R" Y2 M) D4 s; A# ?$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)3 w+ b* i6 H2 Y* B! k" E5 S
$timeoutseconds = 300;取当前时间。$ {/ g/ e' V5 \ |' h9 m
$timestamp = time();上面的完整代码:
& s4 E, F9 ~, Z' j3 h<?php
* B- J$ G, J, v$server = "localhost"; //your server
8 Q7 e3 n! a* e' G- c$ f$db_user = "root"; //your mysql database username
( ~4 j1 P3 } a& I$db_pass = "password"; //your mysql database password if any
" t0 L7 [9 X/ ~" g! E: W+ r; Z7 l G8 U$database = "users"; //the db name
% v0 V# s3 c5 O' X: K) w$timeoutseconds = 300;//timeoutseconds limit
. I- H9 e7 X \ `//get the current time
9 w* { E4 B4 } G$timestamp = time();
1 ^* e1 ?! ]# }) I1 |: @/ n8 ?//calculate the lowest timestamp allowed3 [5 r0 \* h& @& X
$timeout = $timestamp-$timeoutseconds;4 G! R w `! n7 h; ?9 B
?>连接mysql+ o6 ] g v& h; ~
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。 `6 G+ u# M; o. h
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 q8 ^* L0 t& M7 e
mysql_connect($server, $db_user);查询数据库的代码:! C2 e) z9 h" ?
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。2 n* B. o! X, F" R' K$ `) S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: g; l. Q9 \; V4 B1 U+ O('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 @5 P8 K2 |: t( ^6 K G, i; Z$ e
如果用户用错误信息的话,这样处理。& C+ l7 u( h4 I
if(!($insert)) {+ p& s: x" M! l, X6 P" t) ^7 W
print "Useronline Insert Failed > ";+ s2 B: f( f$ ~& A+ M
}然后实现当超过设置的时间就删除该用户记录。) m/ v; {$ l" U2 |6 H! K1 |$ b/ u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。! ~, g! ~8 ]/ n+ C" ~, a- v; z
if(!($delete)) {
# }) y1 U, O/ F. k; @9 V4 P0 `print "Useronline Delete Failed > ";
- v: q: [( f3 d3 M& ?1 D}下面我们解决数据库中不同IP的问题
" O( ^, {7 `4 D9 o' c) h) J$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
* N# h. x2 q4 qmysql_num_rows(query);来统计用户,代码如下。& m, h2 L' {, ?+ w/ u
$user = mysql_num_rows($result);最后关闭数据库。6 V: E) }' F8 b K5 N# ^2 g
mysql_close();显示在线的人数。& b$ z7 l$ n; Z& T) r- r+ Q8 O/ `: p
if($user == 1) {( }- m% t' @4 O2 z
print("1 user online\n");2 q! k0 w; r; `
} else {
* }/ i+ s' O7 S1 Nprint("$user users online\n");
- z" B& O) a8 n, z" x, ?}最终把上面代码写成一个PHP文件如下。/ T3 a2 v9 d( Q0 x
<?php$ C$ j7 z6 k1 H% s) V
//Put your basic server info here- M; J& b8 }8 e! K- }0 A' b
$server = "localhost"; //normally localhost
4 X6 a; @8 Z0 U6 \, I' l6 h$db_user = "root"; //your MySQL database username
# r* U& v7 n( l8 n/ w( G( r$db_pass = "password"; //your MySQL database password$ F: A! d9 y% N7 w. _3 v9 B, i! ?
$database = "users";' P, H1 s. X/ E, Q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
' J1 R+ a: [5 O5 A* y& L// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 _/ a6 w8 g6 K5 a
// $timeoutseconds seconds)* n& n# F& J$ b/ c0 G2 u
//this is where PHP gets the time
& S5 D9 I. I) }+ z) i$timestamp = time();
( I: x2 A4 N8 E% l" V: e- ^//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed( F0 a3 x8 F0 ?: G$ p
$timeout = $timestamp-$timeoutseconds;- F0 ]. {" x- w( x4 ^1 x) D
//connect to database
( C# Y- Q1 N3 i& W+ U F& ^mysql_connect($server, $db_user);# i! u/ L9 V. C/ w+ C
//add the timestamp from the user to the online list! N2 _0 l8 F; M7 J! S* `
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" Y/ j# l3 C3 \' e
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 o6 r% O O, Z4 [7 s4 w* kif(!($insert)) {
$ x3 _9 ], @8 w6 K5 j" N) Nprint "Useronline Insert Failed > ";' e8 X O# S4 Z! w. x3 d2 p
}! k |% r6 D1 S2 g$ x) W
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
7 \! N7 a2 z! `0 P* W( b0 T$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
; m$ T% z* g* i2 Q! xif(!($delete)) {; `3 _* r+ h: r% x
print "Useronline Delete Failed > ";* x- A, j7 w! H, V
}
6 i8 X9 ]% ?8 L* U; q' O. ]//select the amount of people online, all uniques, which are online on THIS page, I% Y$ H/ ?* D& K+ J5 V6 g) X9 q- D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");' Z9 S1 k- k2 K0 V, g
if(!($result)) {
4 U# V6 a" N/ S8 G6 i. n5 ]print "Useronline Select Error > ";# r$ q" H- ?% p v: A" h
}0 L& S H% A) Z% _7 E, F
//Count the number of rows = the number of people online
2 W- o) K `' b: h9 p, B$user = mysql_num_rows($result);
8 Z/ Z `( B8 g7 o) m+ F `//spit out the results1 ]& P+ b6 A4 u0 A! r$ \" d, `: s
mysql_close();# w! y3 i3 l; [# q% p
if($user == 1) {
1 P: X( M/ _3 lprint("1 user online\n");+ U# H7 Q3 V( [6 _# d- a) U8 e
} else {, c ~9 S+ Y, K- `
print("$user users online\n");
. o, Z: O" {/ @1 O* ]; _! R}
* F0 t1 U, x) }; X: ^?>$ K* R! A3 g# b# E: \0 G% k
& ^2 {! u; V+ M4 _ _
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ {9 ]& o6 r) O2 I' i0 z, }" t时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
1 `3 A9 J) i8 Q3 J我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
1 ?, H& }3 v3 Z1 C当然啦,这两款主机也是相当不错的。
. N% ?; b, y) z: D5 y+ _智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
p' v. J0 K& `标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
: I4 P, M, Y2 Y+ ?' j提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( f) S3 m8 T, R. }5 h
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=554 u% I" I% V/ S+ `8 n
自己加QQ去问吧。 |
|