|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
: A9 | | ?: y4 F$ |我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 A3 \; a8 C& ]首先我创建MYSQL数据库表。
* s* r+ P6 \( ?: Z) \# yCREATE TABLE tablename (
4 s: W/ i2 x' _( K& i# t# B4 Mfield type(max_length) DEFAULT 'default_value' (NOT) NULL) v) H) S; g/ g. G
}可以使用的SQL语句。
3 ]! O* L& Y9 f9 {+ lCREATE TABLE useronline (
/ v: h/ {/ w) m: Etimestamp int(15) DEFAULT '0' NOT NULL,
8 A9 d& k* k/ y- V2 {3 dip varchar(40) NOT NULL,
: A% o' f$ F8 z1 L# G3 Ufile varchar(100) NOT NULL,* f' V( y! R, z0 l' W3 R
PRIMARY KEY (timestamp),
, C) X& ^; X: j/ t. M/ T! e. qKEY ip (ip),
7 p$ g; v- t% H0 FKEY file (file)1 G' [. \. s4 b. C
);下面我们是PHP脚本,首先我定义MYSQL的信息。7 C4 p6 O& q# [1 w
$server = "localhost"; //你的服务器" i" @! u$ g/ C) O/ X Q, q
$db_user = "root"; //你的mysql的用户名
* O2 l. `- S. P$db_pass = "password"; //你的mysql的密码
8 ?* A6 K+ z0 x `$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
, Y" E1 _7 q: Q: |% I9 Q$timeoutseconds = 300;取当前时间。
. q/ E1 j( B+ C$timestamp = time();上面的完整代码:
+ n/ v0 \ G% K# o: p5 S% G<?php. n7 r1 ^/ P6 w/ H$ u
$server = "localhost"; //your server8 ~& _$ N% R5 ^, j1 q3 f) _/ V
$db_user = "root"; //your mysql database username
( \9 j2 t2 y l# u6 P U$db_pass = "password"; //your mysql database password if any
4 j9 s7 L0 [0 b/ U$database = "users"; //the db name, a' r3 ^5 ~+ p+ _3 W4 U
$timeoutseconds = 300;//timeoutseconds limit
/ b) Y; L8 V2 u% ^, a. |4 ~3 t//get the current time
% O3 D5 `, ]: y1 k+ i- `# b! x, m$timestamp = time();
; }, `& _6 {2 B$ a* q2 M+ Y//calculate the lowest timestamp allowed
7 F( n5 r7 V% b* @% \# x" f2 h$timeout = $timestamp-$timeoutseconds;
?; P( {% D: u0 P2 T- u6 M6 w, v- m?>连接mysql/ [4 [& E. I9 ^' R" ^# F
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 _* h0 u# `6 _' Q" Ymysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接) N1 O! p5 v4 \; R& j
mysql_connect($server, $db_user);查询数据库的代码:
3 v! n6 ?. l t/ ^8 o7 }$ |mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
6 j7 H9 w. @) G! X* ^$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ T/ S& Q% `, m, [. I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& F1 j2 V6 [ w% k8 e如果用户用错误信息的话,这样处理。
' l$ A' }4 e- gif(!($insert)) {
! ^6 a' X4 w' ^! e0 xprint "Useronline Insert Failed > ";
4 _ I9 H+ @0 J! r( r}然后实现当超过设置的时间就删除该用户记录。
/ u. t. i! e0 I: P+ c3 Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。2 n( @0 L" o8 B' g9 A
if(!($delete)) {- i2 ~! w3 @0 Q6 `) G9 E3 M
print "Useronline Delete Failed > ";
% A7 e- i a! S2 T" o6 p4 R}下面我们解决数据库中不同IP的问题 ~ R1 D8 X3 F+ q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用, O: y8 l, j3 o: q9 ]. u! s
mysql_num_rows(query);来统计用户,代码如下。2 I ?: S+ F5 g4 b. o2 g% m* I4 A
$user = mysql_num_rows($result);最后关闭数据库。
0 F. \% D* P5 h+ d, Gmysql_close();显示在线的人数。) J' [) u& v' Z2 C' _' W
if($user == 1) {
; ~+ s4 o" r+ M, Bprint("1 user online\n");7 ]5 [+ y& I! A; A' q4 p
} else {
- l& T" {% f9 G) U, iprint("$user users online\n");6 I% U4 m5 z2 T6 d Q
}最终把上面代码写成一个PHP文件如下。$ o8 U: i- ^/ N+ S5 v
<?php
5 N; Q7 G* `8 r% q$ m' O1 x//Put your basic server info here
; ~: @: y6 w2 r8 ?7 a6 M$server = "localhost"; //normally localhost
8 |* P% h. o- m$db_user = "root"; //your MySQL database username
7 e2 S9 G- w7 ~ e5 k$db_pass = "password"; //your MySQL database password
6 S! w* x; e) t1 O& c$database = "users";
4 c2 R% t9 E9 a3 d( k$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ e5 ^% |/ A% X
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last; q3 r: w9 \. A7 S
// $timeoutseconds seconds)
& v( X! y( o3 q$ h//this is where PHP gets the time
. V0 c& z; O: D/ j8 v, ?5 [$timestamp = time();
R" W- R, H& }9 `5 J//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) i* i8 m+ x4 ?; P% K
$timeout = $timestamp-$timeoutseconds;
, g Q( {3 u5 l1 k& g) g//connect to database
2 E2 |# ]9 n" |1 zmysql_connect($server, $db_user);
+ c& m* z& z8 a' f, l) x//add the timestamp from the user to the online list/ Z. p9 a2 U9 j+ O8 V+ L
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) J! G% [" W a$ s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 ^0 d7 w& H) H! nif(!($insert)) {. X4 X8 D* m1 Y9 H! b
print "Useronline Insert Failed > ";
8 `/ x/ p! J$ A}0 ^; J& l5 p% _$ \9 c0 q2 k
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.7 M V$ r1 O9 {0 J% | D& z
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 w2 D( |* }$ l
if(!($delete)) {
" t+ a: |' s* `2 T/ zprint "Useronline Delete Failed > ";, [8 B( O% l( a% a) C
}; l0 P- F, b& D: f8 X, r* U
//select the amount of people online, all uniques, which are online on THIS page
& V! e+ [+ J6 e$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
8 h- m+ U9 L" L/ B4 Z2 Fif(!($result)) {1 z% b- a9 J( J9 @/ n% a' m
print "Useronline Select Error > ";& @% Y% s! a) ^5 e3 g: t1 F& ]$ i( `
}
8 I: v% t! J5 }1 N- f) h//Count the number of rows = the number of people online
$ H) A$ Y0 f5 ]+ S/ f) D% `+ J$user = mysql_num_rows($result);
+ _$ X F9 y$ Y9 ~! ?2 _* w8 @1 h//spit out the results
! c5 c% N2 D: m) | [mysql_close();/ Y" d, Y% E/ X: o
if($user == 1) {- I+ ?; h( e! J" ]
print("1 user online\n");# ?# q9 Q. U6 H+ B5 p
} else {/ ]& c% O% \: N- [3 B. \
print("$user users online\n");' [% e* q% I0 Y& i
}' B& `" ?) q c8 ?% W: N% t- Y0 `, u
?>
4 l2 N% H3 R6 z: j9 U. o d8 B- C
* r- ~; q8 _: I以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 _( g( ^! ~( [7 w3 t, Z6 g时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 D0 J' f# B9 [6 }3 f& C& _我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
. ~, q' f8 o* E; W/ r1 Z% J当然啦,这两款主机也是相当不错的。( w% I' y; d# \1 B A3 [
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年) j s W1 c3 m P' m5 @
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
: m. `) ` e* _5 d+ s; S提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 9 ?; w" [4 i7 K/ W1 X& N
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=559 T5 }6 W/ G. c
自己加QQ去问吧。 |
|