
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
- b& }' U3 Z& W5 @$ ]3 Z* A q" ~我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 v5 M7 i$ S! l/ W1 x- F! V
首先我创建MYSQL数据库表。3 B' d: Z8 e6 ^! e
CREATE TABLE tablename (. g, p' J" h8 b
field type(max_length) DEFAULT 'default_value' (NOT) NULL& Q! E# t" E* _9 g3 |
}可以使用的SQL语句。
! u- K# @) Y D- LCREATE TABLE useronline (
* N3 F! Z7 O3 B4 Q- _; V; qtimestamp int(15) DEFAULT '0' NOT NULL,3 [% y% f$ n, r( c" z# J' h, q5 N
ip varchar(40) NOT NULL,
" b7 K4 u: z/ h6 e0 o+ _& }! v6 i: Cfile varchar(100) NOT NULL,% r; U- n1 J6 Z; X" |' j; h
PRIMARY KEY (timestamp),
4 p7 w) x; R; jKEY ip (ip),
0 _2 t% {4 A$ ^$ b: P$ x9 zKEY file (file)
: _: c, ?. J; ~);下面我们是PHP脚本,首先我定义MYSQL的信息。& Y) z& ^5 K- |& h3 m
$server = "localhost"; //你的服务器
" A, K: v) w* ]. u) L; b$db_user = "root"; //你的mysql的用户名
+ h# @, C9 T! t; @% F- @" _/ n. s$db_pass = "password"; //你的mysql的密码
2 }8 y; P/ e; `$ Z& B$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)% p% _4 g3 h4 S
$timeoutseconds = 300;取当前时间。, T9 F8 D) v r1 D- h& c
$timestamp = time();上面的完整代码:
! [/ z0 B# p8 |<?php
4 h9 C8 H3 y( O/ U- O0 g$server = "localhost"; //your server
5 O Y9 O9 y9 D W/ o$db_user = "root"; //your mysql database username
5 Z* L: R+ p8 M' ~, ]+ V8 s2 p3 U$db_pass = "password"; //your mysql database password if any
- Y0 X1 K) e8 q& o1 I$database = "users"; //the db name
e* n1 E8 A: }3 X2 _$timeoutseconds = 300;//timeoutseconds limit, ?) D# Y' n, j
//get the current time8 E3 B3 ~; j5 }
$timestamp = time();
6 a8 G$ x" h$ s$ Q( b) ?1 S//calculate the lowest timestamp allowed
0 q+ A: g c/ t8 w/ K$timeout = $timestamp-$timeoutseconds; h" I: O* T" [- u
?>连接mysql
2 h6 w3 [3 k$ R5 S8 vmysql_connect('localhost', 'username', 'password');也允许使用变量形式。& n% \# b. M7 |) o8 P: L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接- V3 Y: p: p6 \! k) x
mysql_connect($server, $db_user);查询数据库的代码:& U/ a4 L2 S+ Q7 g
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% Z2 E# M) P# \: O8 x$ w, z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" Z0 z- c1 m" S. W" W! K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, r+ z; ]& ~6 x' N0 V
如果用户用错误信息的话,这样处理。
" i7 @% J+ h- Y h. F# V' l! Yif(!($insert)) {& p" I6 K& M+ _6 d& R
print "Useronline Insert Failed > ";2 \. y' J$ u, \1 G, V) j
}然后实现当超过设置的时间就删除该用户记录。
3 N; z" ~! B2 v" \# ^$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& @4 M% K" X8 c5 s b
if(!($delete)) {
& a9 }6 ?! q. C0 A' t: yprint "Useronline Delete Failed > ";9 e5 n6 P: g9 ?" r9 u
}下面我们解决数据库中不同IP的问题( x* i. ]/ C5 n& G' |- }7 E: j
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
, T4 g5 W' s/ S! smysql_num_rows(query);来统计用户,代码如下。
0 B) R% z6 p4 b0 T$user = mysql_num_rows($result);最后关闭数据库。, C1 v* Y, d) {0 {
mysql_close();显示在线的人数。
$ x. Z* L. |. Y8 h( X- fif($user == 1) {/ G6 W6 m& W$ b% |0 e7 f( \
print("1 user online\n");
% o# k5 P2 I3 k$ h7 H' g} else {/ o2 F3 Z: ~, t- g( Z
print("$user users online\n");
( a. A0 B" d L7 {$ K/ L3 D}最终把上面代码写成一个PHP文件如下。
% j5 X5 j0 P6 U$ u l2 C) d; i<?php3 p5 W7 |2 L; D4 v# Z! s: ~
//Put your basic server info here
3 a) D2 Q; [+ M: F2 V+ u9 L. v1 `$server = "localhost"; //normally localhost
. |9 Z+ M& C) A% b; ~5 [3 l! D$db_user = "root"; //your MySQL database username% I6 t7 N9 P! ~3 d5 a
$db_pass = "password"; //your MySQL database password% r, B7 g% @. g8 j8 v; |
$database = "users";: a( Y U4 y8 I' h, E5 k
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
' [" E$ v/ _/ O6 Y; n% k// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
' ~" s+ q9 _3 V: p6 @( h// $timeoutseconds seconds): T& J8 S* S2 M& r$ z, c& ^; n) I+ A7 d
//this is where PHP gets the time* V9 S0 k0 N- B+ V8 P; O. j
$timestamp = time();
" Q) m1 `+ z/ l) }//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 _' C/ l; f$ }
$timeout = $timestamp-$timeoutseconds;! k! a* w' K, L: A/ |7 [4 {6 {
//connect to database$ P+ [; e* h: U4 z& R: o5 m; G
mysql_connect($server, $db_user);8 G& U* U: e3 [6 ]: R) {6 `- S
//add the timestamp from the user to the online list1 `' U( J, M9 n5 O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 P. N1 d7 F1 y- K9 @/ y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 D7 C: ]8 {# h/ zif(!($insert)) {
3 y* @( w6 t& I" q# G, Fprint "Useronline Insert Failed > ";8 G: d" n9 r% @9 D1 o$ [ F0 o
}0 ^, k% u$ C" x- ~/ {. q p6 O; o
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' ]; o. G0 I8 j9 q m3 P2 u5 v( o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2 c/ O" v. Y7 q" C# \
if(!($delete)) {
+ `+ j% M' `+ \9 b0 _0 Uprint "Useronline Delete Failed > ";4 ?) W0 _; ]4 s! }# c3 S
}
9 D- R, X, @% P, e! u# @1 A//select the amount of people online, all uniques, which are online on THIS page; {) s9 U3 S+ ]/ u1 o* t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
+ U. j1 K. P& ], O7 z1 sif(!($result)) {1 I. Z. f0 u4 O& z3 S
print "Useronline Select Error > ";) |2 Q- V. K* C
}% Z' G, K6 e1 S' W+ {
//Count the number of rows = the number of people online
8 P6 S3 O) r8 e9 Y* c$user = mysql_num_rows($result);; e8 ?1 O2 S1 D$ S* c$ F! B
//spit out the results
. Q2 o! t8 k5 b$ }" D% \' I* smysql_close();
9 l, Q% a8 V0 N* T; r, e6 Q* _if($user == 1) {
7 ~: ]4 ^& F: [) y- w2 O% F! Eprint("1 user online\n");+ i' a: D) ?; F5 Q* A
} else {
; q7 R0 @3 C* A) R% p* ]print("$user users online\n");
! a! z9 S: i4 Y- W}
R/ M! ~3 }% x* l& K1 u?>
( E5 A2 S5 K: K1 h # S( S: Z; v; ?2 Y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 T9 F. f* r* B B9 U
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。3 M e7 J+ m. {( L
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 n% o3 {' v- v4 f当然啦,这两款主机也是相当不错的。
g& ?; o+ _" Q, x `) j5 S智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
2 t& X5 s( ]# q5 x A9 v5 E. g5 z标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! w8 G* w2 G0 X @) T3 L提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* }, W) J1 }1 l* V空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
' G' \; S K: M% A( p自己加QQ去问吧。 |
|