|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 K* i, Q& t1 x! T/ B2 R( B4 l我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. E4 ^% t% q# s0 I0 h" Q
首先我创建MYSQL数据库表。" N$ w1 H# o: \; b( A/ p3 c6 U0 B( e
CREATE TABLE tablename () A9 a# F4 E- @- k8 I0 Z9 \
field type(max_length) DEFAULT 'default_value' (NOT) NULL9 q$ _$ N ^# O6 p+ O
}可以使用的SQL语句。
2 f7 G. O, f/ f+ I) LCREATE TABLE useronline (: {2 ~% d& o$ P6 B# `! R5 O3 _9 M# |
timestamp int(15) DEFAULT '0' NOT NULL,
- c" e+ v- _/ `8 ?5 nip varchar(40) NOT NULL,
- D0 t$ X' L4 o, J8 hfile varchar(100) NOT NULL,
# G% q9 S; I. e J- F1 i. l4 ?PRIMARY KEY (timestamp),5 G: S5 i7 K- o* w
KEY ip (ip),6 f! E& B* |1 S" I9 }$ L% V
KEY file (file)8 f2 [/ G. i5 p" |, H& E, T% O; ?- z
);下面我们是PHP脚本,首先我定义MYSQL的信息。6 e/ u* ]( [6 N
$server = "localhost"; //你的服务器+ x9 ~/ m3 S+ P, n
$db_user = "root"; //你的mysql的用户名
3 b9 D" n7 W+ \ J* h, H6 b$ U$db_pass = "password"; //你的mysql的密码$ X# k; X) r, h% x8 B C
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)8 E5 i- w4 v! @* q
$timeoutseconds = 300;取当前时间。
8 U5 _- Y% _- T9 S) E& J% M+ w$ Z. h$timestamp = time();上面的完整代码:
; ]# J% ~) N% C8 K<?php
5 @% u9 t2 d" D. W" G5 Q7 u8 n$server = "localhost"; //your server4 r' S# M; e2 H: k$ D4 W# S
$db_user = "root"; //your mysql database username
! `) F) {% q7 r/ t7 |9 V4 j$db_pass = "password"; //your mysql database password if any- g2 \8 {( T- |% `
$database = "users"; //the db name
% `' c9 _3 m" P. P8 X+ a% ~$timeoutseconds = 300;//timeoutseconds limit
m. i) _$ K; Q% t, W/ y/ L1 [: `//get the current time' z F) ~3 y& J( p: s
$timestamp = time();
0 j, R: y6 _8 H3 Q3 n5 z: a//calculate the lowest timestamp allowed
2 s( A: t& r9 a% ^# T# e3 h5 @$timeout = $timestamp-$timeoutseconds;) z" c7 u8 a3 |) {
?>连接mysql
& S) q- w3 v) C- R) I% ^1 \1 `4 p3 ~mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 C3 x5 k* E2 a) G% pmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, r3 c& p- Z" ?mysql_connect($server, $db_user);查询数据库的代码:
- H6 c, K) i) _5 ?, W* a- ?! Qmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. m3 r# |! ^9 m% i+ ^' q6 G
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% M% M8 n ~4 Z* ?- _+ O0 H; t
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 N9 }% @. j7 j
如果用户用错误信息的话,这样处理。
7 m, _& I; T- [5 T8 A2 ]if(!($insert)) {
" z1 Q7 L2 S& w, _) G3 |print "Useronline Insert Failed > ";3 q7 p3 V/ Z3 N% I
}然后实现当超过设置的时间就删除该用户记录。9 V# i$ Z2 D, C8 ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。3 g$ g' ?1 |7 J4 T
if(!($delete)) {
5 z) Q- t2 S( y2 c3 Dprint "Useronline Delete Failed > ";- @/ z+ s4 g1 u
}下面我们解决数据库中不同IP的问题) b" m1 I# j* N# u/ u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用2 J' \" q6 i1 `8 [" A- [
mysql_num_rows(query);来统计用户,代码如下。/ m4 A/ B0 N3 h- W8 D# n8 ^
$user = mysql_num_rows($result);最后关闭数据库。! E* p6 D; k- m, ^9 P
mysql_close();显示在线的人数。
5 }- p4 P) V5 w; l% Qif($user == 1) {
9 [6 W- }4 S7 l1 jprint("1 user online\n");
3 r$ a; `3 M! ~1 b0 J/ e} else {
4 p( K9 w3 @/ g, J$ }print("$user users online\n");
% m0 k3 b% P$ u+ {$ s: K" x) v}最终把上面代码写成一个PHP文件如下。
2 W) K ?$ m4 s( F1 b" c<?php: q) C; j' P8 D/ N+ C$ H* e: U: H
//Put your basic server info here! j; q2 h+ {9 Y ?& H
$server = "localhost"; //normally localhost
8 W6 B. y! q( |5 ]0 J4 }$db_user = "root"; //your MySQL database username
2 d0 i+ Y8 O% y0 I7 P3 G$db_pass = "password"; //your MySQL database password0 A# i( d `7 x) O& q. |! O6 n1 h0 a
$database = "users";
. Z/ ]. l1 ~$ |5 }; z4 j$ w3 }$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 w. k$ d3 b! t! x6 g8 k4 @// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% D7 r" Q4 N' h0 B R
// $timeoutseconds seconds)5 J6 J) q) \- U, E4 `, o
//this is where PHP gets the time
: j) l d1 y @2 N' M. N) [$timestamp = time();5 Y' w r: T O' a
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed3 t7 g0 P8 U* W5 p; v
$timeout = $timestamp-$timeoutseconds;
! X* o2 J1 A# c2 h//connect to database! h$ I, x) O! X/ Q: D
mysql_connect($server, $db_user);5 l; q8 H& h; z9 _- S
//add the timestamp from the user to the online list8 \. j% f" i+ z7 b* c3 k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, r6 i$ n% ^1 h8 R& X; ?( [, @0 C
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 X" x! _, E6 n% u: T |% a$ V
if(!($insert)) {! |5 r3 s( X# I- y
print "Useronline Insert Failed > ";$ e9 I/ s7 m7 ~! d8 `/ h
}
* G @: X* d0 Q y- I4 r//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& c# Z7 \. B( o" C9 e$ ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. M Q/ M' g; l5 n, E! Jif(!($delete)) {
$ G& ~$ k* u7 i) Jprint "Useronline Delete Failed > ";* d$ L3 l4 [- \" g& G
}- L C7 t! T8 r, n) R
//select the amount of people online, all uniques, which are online on THIS page( J8 d" V* Z9 r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- Z/ d6 @& ~7 ^8 Q% V7 nif(!($result)) {2 W: `3 l# C, [5 c, ^0 K5 E# O8 N) L
print "Useronline Select Error > ";
0 \4 P, p |0 J; ~ `( J. Z* ]+ s}' v( N8 M6 Z! p p5 A
//Count the number of rows = the number of people online" ^6 W: s$ m7 \. g) x# H4 u
$user = mysql_num_rows($result);
) [5 N! ]5 x$ i. d. `- H$ u//spit out the results
" Z0 p& T) E, I0 s6 ~mysql_close();; u, B( ^8 ^7 }- {) k) X
if($user == 1) {
* b# \4 b# i+ m. q! |print("1 user online\n");/ ~# c# g% C. k5 q
} else {
& K- u; k+ C/ j5 W; tprint("$user users online\n");& S$ p8 H% I8 A6 {4 x4 |4 Q
}
: w( x/ ~# I6 N) J- m# ~( }?>+ n# z5 f1 _3 a- `, a) S/ p7 w

, [' T$ f- G! r' T Y! H以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ @3 K* l% ~& d2 ~时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
" q: [# F% G/ Y. |我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。- a6 f5 H+ E: W' K
当然啦,这两款主机也是相当不错的。# q2 N' W( e; g B- l- v/ ^ T4 W
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& x+ z! V3 s9 F0 j标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
5 l, d' r9 K/ R" k6 E8 {提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ $ }; |, Q+ W2 j8 D7 X. H0 H/ T
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
8 j1 ^3 e/ A* c0 f0 \自己加QQ去问吧。 |
|