|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
1 V0 [, e5 M% b, P; Z& }& {我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
( m* G2 E, ]) ]# ?首先我创建MYSQL数据库表。
1 X5 M; ]5 X9 @4 l2 `- ^* V. s' ?CREATE TABLE tablename (
0 n- ^0 p; j5 C; }1 S6 Afield type(max_length) DEFAULT 'default_value' (NOT) NULL
" {! A1 P: V' p7 p4 F: N- x6 K! b* P0 F}可以使用的SQL语句。
1 B. f( ~' g& z- CCREATE TABLE useronline ( k- H6 v2 H3 Z* ^' L8 D- D% _2 g2 K
timestamp int(15) DEFAULT '0' NOT NULL,
8 q/ Z: N6 \" `/ u5 t5 @% Pip varchar(40) NOT NULL,
, y, s$ M& P+ Q( @file varchar(100) NOT NULL,
" C' ]. r0 G2 a0 m i! pPRIMARY KEY (timestamp),
, o' o5 E( y/ V, {5 K. T: U1 qKEY ip (ip),8 C0 _# {: Q5 i; c
KEY file (file)
2 ]9 S; X. X- ^1 a' a0 t0 T);下面我们是PHP脚本,首先我定义MYSQL的信息。7 Z- Y# A! j" q
$server = "localhost"; //你的服务器
y" r. T2 a/ y% W" J3 m% L$db_user = "root"; //你的mysql的用户名8 e0 p6 X$ P" u. M
$db_pass = "password"; //你的mysql的密码
+ e* C0 Z* ~/ D) I3 u `1 U M$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" ?! q2 T+ @1 L( r' H N A, q8 H
$timeoutseconds = 300;取当前时间。- s- a) `0 s, P9 a
$timestamp = time();上面的完整代码:2 P3 V9 w' k/ p2 D. J
<?php
1 s" P" s- P# C; k7 O. ]; }; Y3 q! G$server = "localhost"; //your server2 C( J9 z8 x0 g6 N. {0 B
$db_user = "root"; //your mysql database username
+ x1 R' ]" S6 K9 I9 v& i$db_pass = "password"; //your mysql database password if any
$ k/ m9 J+ V2 `3 x0 L$database = "users"; //the db name
* t, R8 n: s/ \- B0 J; }$timeoutseconds = 300;//timeoutseconds limit: w1 W& _; \& D/ v' Q
//get the current time
. O& [) X& Z: B0 _& |2 v( u: f$timestamp = time();
. \# W7 l7 q! o: N, {+ @' T3 [//calculate the lowest timestamp allowed) B9 W# ?3 g/ x ^: W: O- O/ ]0 e
$timeout = $timestamp-$timeoutseconds;
9 W! d0 b9 }. _! n8 p6 |?>连接mysql* ] \: ~* m$ ~0 Z) e0 Q
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。. O/ [. Q j1 p' o$ x8 h& W/ l
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 L; \% e, _4 Q7 fmysql_connect($server, $db_user);查询数据库的代码:- E( s7 G1 i' o
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* {- }; H8 c8 V u+ b3 k$ Y- b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* B7 v5 g W% G7 d1 E( s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); B4 F4 I2 `+ B5 N; ?( E9 Q
如果用户用错误信息的话,这样处理。# `: V& t! U7 s. t" l
if(!($insert)) {6 T* K# }* J$ c9 t3 F
print "Useronline Insert Failed > ";8 l2 b) g, Y0 Q- s8 t3 [
}然后实现当超过设置的时间就删除该用户记录。
( ^( u- I b. t4 |9 N' V- Y4 p4 y. e$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
9 B3 V& u w& A6 a# A5 S- Rif(!($delete)) {
* m$ K% C# B. {" P5 Kprint "Useronline Delete Failed > ";3 _7 k8 p, M7 m2 o! Z
}下面我们解决数据库中不同IP的问题: j. a% G$ K& b8 G1 H2 Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
0 F: ?; G; E- H5 [0 k+ x) Tmysql_num_rows(query);来统计用户,代码如下。. T0 K6 b6 \$ n8 n; ]
$user = mysql_num_rows($result);最后关闭数据库。
& i* x% q4 S* c2 v" D9 I8 @: Omysql_close();显示在线的人数。' k- ~5 |& b) Z& T& v
if($user == 1) {
; R. b' ~, `3 I/ ^: ?9 L8 p' V @/ _print("1 user online\n");( J, | a! Y+ c9 s
} else {" w; U- k3 i% T' s: y) I% M9 M$ F
print("$user users online\n");6 U3 i w1 f( `
}最终把上面代码写成一个PHP文件如下。
9 h+ x: Q, w7 F, Y& c" |1 M<?php
/ _: v/ X3 l# C' V8 [9 U//Put your basic server info here% g' }5 m$ ~* W4 v
$server = "localhost"; //normally localhost
, @. R9 _; @/ T6 B3 x$db_user = "root"; //your MySQL database username
! }5 n( ?, I) s! M+ C$db_pass = "password"; //your MySQL database password; _7 S% ~5 [) y. z
$database = "users";8 h8 w3 ~: E& P. p2 n$ L
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are& k2 h X" l: [- u( Y
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last! V6 t. {/ B$ ]: P" C1 F1 ]
// $timeoutseconds seconds), B! ]3 y" E6 G$ J6 F' C7 u) l9 C
//this is where PHP gets the time
- M# d/ n+ G- t, b- x$timestamp = time();
B. ~% d1 g4 o) {# y5 s9 q//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 v2 `4 U6 Z3 {* z1 `( A
$timeout = $timestamp-$timeoutseconds;7 @/ I* I* U' d
//connect to database( k _" @% s1 P. w2 Z
mysql_connect($server, $db_user);
3 X# H' O. o6 \5 m- D//add the timestamp from the user to the online list
4 I- p$ O1 ^. G* C/ M8 J; O- g$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. q0 V) ?/ Y$ U* X( F('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 ~) I* ^3 W" ?* j* ~if(!($insert)) {1 h5 v4 z2 z$ R1 M8 A n; w& g3 s
print "Useronline Insert Failed > ";
: \9 n6 k' x3 W}, Z, ?7 A- }5 q" x; `! a! E
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.7 m7 c& i) r) Y5 i* v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ y- F9 T; Z( T' Dif(!($delete)) {: e7 ]$ M+ s9 j# H
print "Useronline Delete Failed > ";
. g2 ]: j( ]# x5 F; \: O1 I}9 H4 c" e% ^* U, v
//select the amount of people online, all uniques, which are online on THIS page
7 G& I5 y( V3 S6 U2 M" O$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# l- K* ^1 _2 [ q
if(!($result)) {+ E2 y. O6 G5 M; {' K2 O) P
print "Useronline Select Error > ";
1 @9 Z- G1 R8 B5 J! r}. i3 r& b3 T0 _
//Count the number of rows = the number of people online
: }, C, i. q% _' y$user = mysql_num_rows($result);
0 d" X) S# s: ]* o4 o//spit out the results/ y6 _% M. E0 q5 y7 J! V. x- Y2 m
mysql_close();7 F% W8 R7 w- q, W% L4 {* R
if($user == 1) {
/ W+ P) ~2 M4 U& ~print("1 user online\n");4 }! G2 {* {3 }4 O8 ?
} else {
3 ], f6 W f7 ] \5 W9 o7 Kprint("$user users online\n");& L' m7 ]% `# [4 o2 x
}
0 U( f0 X; D: {# d. ?0 M* y& t7 B?>
) _) _4 [2 \$ Y! M. S6 t% [
7 P5 a7 d1 U5 m8 N* W以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
9 o: q+ Y0 N, ]3 M时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# w K9 f0 Z4 @我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。 E+ v, S v" U l
当然啦,这两款主机也是相当不错的。
/ l. Y% D- O9 X) U智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年- O3 O8 [* A, I8 c7 s& e" ~
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 ^) a9 c4 Y+ y5 l提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
- A% L& t6 W- d空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: a" J8 U" R* A$ x4 C7 [% v3 i- z自己加QQ去问吧。 |
|