
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 D. o7 N- p5 l8 R S& H! f/ g
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 N6 F: N$ v: t- t首先我创建MYSQL数据库表。
3 Z; i4 G+ M: i5 B; mCREATE TABLE tablename (& D4 i4 Z3 P k; z. g$ e; N
field type(max_length) DEFAULT 'default_value' (NOT) NULL
3 R; K* l% X7 A* x7 L7 s}可以使用的SQL语句。
% `$ ?2 [: t2 G" u* V- @: b! {CREATE TABLE useronline (! Z& U% D5 g3 t g. i: i$ x% ~
timestamp int(15) DEFAULT '0' NOT NULL,8 W6 J( F7 S# T+ ^3 P$ A
ip varchar(40) NOT NULL,
/ d8 o! k' e/ W2 Ffile varchar(100) NOT NULL,$ U& v' q" v6 ^/ m/ ?. X8 a
PRIMARY KEY (timestamp),
3 k7 D' K" `7 O" S! aKEY ip (ip),. A& R& T, E! i0 M% r% n
KEY file (file)
1 O/ t0 ~5 B/ C7 Z);下面我们是PHP脚本,首先我定义MYSQL的信息。; y3 h3 z" n# E x d; I
$server = "localhost"; //你的服务器
" w& i( [4 p& q% z8 U* V$db_user = "root"; //你的mysql的用户名
! r, W) Q; J% E& N! N) n3 C6 h$db_pass = "password"; //你的mysql的密码
/ j$ W3 a' O3 Y% f8 X( |4 e. N$ a$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 r: s7 I& {; D4 b$timeoutseconds = 300;取当前时间。
8 C) F9 p; w& a, M9 [$timestamp = time();上面的完整代码:0 x) H! K) c0 i5 y& ~/ W M% L
<?php
& V6 ^+ s- ^1 _: v, \2 y2 M$server = "localhost"; //your server
; H3 D2 T/ I) _5 f, x$db_user = "root"; //your mysql database username( W, w; ~" r2 R+ v
$db_pass = "password"; //your mysql database password if any
% x6 k: P/ G& `, r g$database = "users"; //the db name4 D- ?8 u) w" E! O. I
$timeoutseconds = 300;//timeoutseconds limit
1 Q- P) Y0 h: A! Z" C//get the current time
1 U% g4 Y% O( ?* u; \: u6 F5 }8 c! F7 X$timestamp = time();
5 {- x% Y( |$ L6 H6 z0 c4 n//calculate the lowest timestamp allowed
* I1 b3 Z' M6 b1 ^- y1 @8 G+ [$timeout = $timestamp-$timeoutseconds;
1 p3 f! [) N8 G+ I?>连接mysql
* t9 c$ C0 y8 M# i7 Gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
/ Q. y/ _, |( N" H/ G/ w9 K+ \- tmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* e8 @# G5 ?" h [; }' P# D& ymysql_connect($server, $db_user);查询数据库的代码:
; \/ b3 _; ~2 }( ?' Mmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* }$ w0 R, x. k+ z( b6 z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 U) T! q& S) B! S
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 |+ H- J$ A/ y如果用户用错误信息的话,这样处理。
# b3 A. I! q! s% X, k1 Xif(!($insert)) {
6 K4 w! q4 o* B3 g$ o. M! Yprint "Useronline Insert Failed > ";
+ d3 _1 |" ~- K- Y: R7 L6 i, ?}然后实现当超过设置的时间就删除该用户记录。
! n- I* S1 u) g( u$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 r9 ^6 {! u- b" H4 i, i; s, p& b
if(!($delete)) {8 D8 A. {2 e- c( _$ Z% _5 G
print "Useronline Delete Failed > ";+ r% u; b0 V+ {2 @. k
}下面我们解决数据库中不同IP的问题
7 G5 K) `5 ` D. O/ k$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 [ U# s: R4 x3 }3 c1 X( `9 ~mysql_num_rows(query);来统计用户,代码如下。2 R! U$ R% X1 Q2 p4 r
$user = mysql_num_rows($result);最后关闭数据库。/ k/ t7 p$ U, F5 F* R$ |
mysql_close();显示在线的人数。
+ [" J/ _- {. `: h0 K% E6 f* iif($user == 1) {4 K( G: Z! _3 ?6 _
print("1 user online\n");! I8 |1 Q. n, A6 |# }6 t; I9 }( J
} else {. [; d6 h# }6 ?% D& w
print("$user users online\n");" t: K0 h! |$ J! H! m
}最终把上面代码写成一个PHP文件如下。
; g. N( M( ~+ |) s( t" ]<?php
3 v; `* x" o0 k//Put your basic server info here
/ f( x9 \( A2 f0 [' n" b6 _$server = "localhost"; //normally localhost
) D, A x- K3 _3 Q. ?$db_user = "root"; //your MySQL database username
" C( }& V; R5 s+ M$db_pass = "password"; //your MySQL database password
5 d- L8 b% l* J3 F% v" v' P: W$database = "users";
* N! z7 b `5 k* K) t; x3 n! B; |$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 K+ j1 |) }3 Y. I& s) b$ e// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. @8 [) I1 _. X! p% h) Y9 B6 h. [// $timeoutseconds seconds)3 a9 p7 m% F" |# o2 {) p( h, |
//this is where PHP gets the time4 y( c! D, z7 U" E8 ]
$timestamp = time();& W" X9 a; Q3 H- e1 N. \2 a& ~
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed& l& K5 `; @( s3 a
$timeout = $timestamp-$timeoutseconds;. \( o0 \7 k# v/ S5 ~" Y
//connect to database
! u1 y9 ~ r% l+ j/ lmysql_connect($server, $db_user);! q" N" O$ ^3 b2 B0 Z( b
//add the timestamp from the user to the online list( N( W/ d7 I% w6 c1 f; {) N
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. B: I! U$ H! W1 M('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& W3 P% C' _4 W! Q6 q) s
if(!($insert)) {
2 H- k9 B( I7 h8 ^2 Pprint "Useronline Insert Failed > ";) r& O, l* N" B1 i) G; u; T$ O
}. i% y6 y2 L+ k7 Z6 \3 A
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
/ A0 p( l" n- C) |# K1 s' Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ Q& z) m& Z0 V9 ?, @# iif(!($delete)) { M- K- @- m0 e2 C. {; y! V) D
print "Useronline Delete Failed > ";, j8 r' @9 v# m
}
. n6 a2 c4 F) j* r! i, F0 F//select the amount of people online, all uniques, which are online on THIS page
! `- o+ B1 a5 h t0 n6 e$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
( f2 f" c/ |7 s2 Vif(!($result)) {
& }7 H# H9 Y- k7 U6 A% qprint "Useronline Select Error > ";
6 o- \% F' U6 K6 Z2 f D}2 P$ z! K G, `- R$ H3 ^8 [
//Count the number of rows = the number of people online1 }; V; @* J" Z3 W; g: Q8 W
$user = mysql_num_rows($result);
- d# Q# X1 z" ?2 Y! N) c. `3 E//spit out the results
; o8 J! k+ B9 c* J3 j6 Kmysql_close();
I1 Y/ x& i% Q3 Rif($user == 1) {% h/ L9 B5 o- U
print("1 user online\n");; H* m. A, N2 h' n! T
} else {; m* S; K( k9 m% n3 B
print("$user users online\n");+ V6 `8 v9 N6 ^) B( O- ?5 q; t
}8 Q% e; E$ j; u' V Z6 _- K
?>
" [8 i8 m3 X. V2 C8 l/ M6 w
: c4 O& }3 X5 j8 W. d8 |以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。7 B" p$ m6 r* z8 V
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。/ p# T4 ?* l m% f/ R# p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( m! D0 |- @; L b3 C* F当然啦,这两款主机也是相当不错的。' r2 F0 Q* d# L3 r
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
4 d# \, i8 e, w2 @! Y标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 d/ I- a2 X: \: b8 R0 V1 ^
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 K" s1 x D( ^. ~0 N
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=552 r' i5 L2 e( r/ p0 ]$ {. d
自己加QQ去问吧。 |
|