|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& G( i- b( M6 B* D% G1 j: C我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
# D+ u* S7 }) O8 @首先我创建MYSQL数据库表。
! P8 X8 t) U z2 _/ g0 r7 C) yCREATE TABLE tablename (4 {' u7 Y( a9 r
field type(max_length) DEFAULT 'default_value' (NOT) NULL
, G" Z7 o& N6 M. J* M}可以使用的SQL语句。
' ~6 j& f9 r' @1 [' {2 mCREATE TABLE useronline (
3 O1 t) e0 I* C: A+ j2 ?2 wtimestamp int(15) DEFAULT '0' NOT NULL,
+ n j) Y. M& J2 p' T9 J: I2 h! J' Uip varchar(40) NOT NULL,
$ N8 \* N0 J2 W4 e/ ofile varchar(100) NOT NULL,
, [2 m+ M5 `$ d5 F% m! @PRIMARY KEY (timestamp),
) u7 {1 o7 v6 ^2 g; o; b R5 @5 dKEY ip (ip),
3 w, ]6 o, |! i! p2 |KEY file (file)" I8 U& ~8 [; x7 z
);下面我们是PHP脚本,首先我定义MYSQL的信息。
' r0 `) r: R# T. Q! ^$server = "localhost"; //你的服务器" a4 B! A- @% Y
$db_user = "root"; //你的mysql的用户名
' T1 I6 P0 y) N- |- K$db_pass = "password"; //你的mysql的密码( }: ]0 _5 {1 I) u5 ]% n& O/ t. u
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
) b% F" L7 g4 ~$timeoutseconds = 300;取当前时间。$ H y/ O$ H$ n4 H- Y u* f
$timestamp = time();上面的完整代码:
y3 u1 h2 b7 c. l5 p' k<?php
4 r& B6 d# F6 a- d( S$server = "localhost"; //your server
) S/ Z$ v7 f* \, {$db_user = "root"; //your mysql database username% Z: ?" `- N6 o# C% b \
$db_pass = "password"; //your mysql database password if any" ^, V# f- d) W g
$database = "users"; //the db name2 O0 |6 t6 }5 L+ Q
$timeoutseconds = 300;//timeoutseconds limit+ @; T- c% J- G5 O
//get the current time) q# B9 d9 w u
$timestamp = time();2 J) s- M9 V. r ?. b4 |
//calculate the lowest timestamp allowed& V6 c4 C6 F! [; e' K3 M% T
$timeout = $timestamp-$timeoutseconds;1 k: ?. F# I. o) {( F
?>连接mysql
* ^8 Q2 m7 Q! jmysql_connect('localhost', 'username', 'password');也允许使用变量形式。9 E+ N- d0 V* A8 }" l! l
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
5 a. l4 _- }# ?) }9 V9 h Kmysql_connect($server, $db_user);查询数据库的代码:9 C# S6 E0 B9 M. V1 I
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! X3 q& `- B$ i$ P+ ~3 T
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 y! {- o/ H" d: F) _$ ~, T
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" k0 R. h% z5 `: _) V8 X
如果用户用错误信息的话,这样处理。, }/ ~4 L, u! t& E+ }( o
if(!($insert)) {8 _4 j8 D' j* N" U
print "Useronline Insert Failed > ";# ~* P$ `# y& Q0 g: P, D
}然后实现当超过设置的时间就删除该用户记录。! k2 m( s+ ~. F/ q3 h8 R1 w# U( j
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 u/ p7 ]0 C4 hif(!($delete)) {
# p$ r# { y3 B- n7 \print "Useronline Delete Failed > ";9 c5 G6 j8 ^, o) L4 P2 K( d
}下面我们解决数据库中不同IP的问题& ]# I1 L- V1 n$ r% \
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
7 Q G# o, u9 \, {$ F' p; v5 Gmysql_num_rows(query);来统计用户,代码如下。
" b2 @$ {: w) U$user = mysql_num_rows($result);最后关闭数据库。
1 f% z# s/ v U! w6 @mysql_close();显示在线的人数。2 C2 Q- ?4 c4 r- c
if($user == 1) {
( J+ [8 f3 S( W. S) hprint("1 user online\n");, s; M1 [' i5 z0 ~+ z( L1 q
} else {9 j" ^1 x! V% m9 C6 }
print("$user users online\n");7 M( [( p2 t, z w) L2 F9 z
}最终把上面代码写成一个PHP文件如下。$ Z. E3 L# a" b9 J# H) W
<?php( _6 D# P1 H% C2 o) A
//Put your basic server info here1 n' b! X3 M. h2 d0 R) I0 E
$server = "localhost"; //normally localhost
+ \! D+ c1 Y& r) k0 a$db_user = "root"; //your MySQL database username7 t1 d. G4 W; Q8 B
$db_pass = "password"; //your MySQL database password
8 M2 P2 l1 _" L$database = "users";
" f8 G6 U( `- M$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 \" s. H6 P5 z- H, R7 q, h! ^& ~+ K
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ M9 w G& i" X+ q
// $timeoutseconds seconds)( L& R, e/ v* ~/ @& u' e# g
//this is where PHP gets the time6 |4 g) [# U. }2 k4 A4 z4 v0 _. J
$timestamp = time();
9 @/ N' t6 a# ~) w5 y- C//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 z/ T! t' o6 R, B: ~$ t
$timeout = $timestamp-$timeoutseconds;
" I% l& f3 {9 u) N//connect to database
2 D# j9 {2 e8 Tmysql_connect($server, $db_user);& `8 i; \6 [4 h; P5 E$ d
//add the timestamp from the user to the online list$ r1 A9 m# }7 r# M
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 Y% S* I+ |/ n" _# u9 F2 G% H2 h('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ ~4 W! o" g9 e& ]! J
if(!($insert)) {
# q7 s- x$ \4 |5 V& P7 @: D9 aprint "Useronline Insert Failed > ";
4 z! [1 r q: @; z}
$ {, H+ W: ~, m) Q//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." V1 W3 r$ y7 ]# |$ @/ {
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");/ k* u/ Y% V- k& `" K+ ]
if(!($delete)) {
8 _0 B9 r1 J; ^ A5 D% Jprint "Useronline Delete Failed > ";
0 ~3 `7 |! F6 s8 f7 |$ V* z}/ B, l* i1 Y2 x7 k
//select the amount of people online, all uniques, which are online on THIS page
2 }. U; N% s: U5 t, K( i% V: t2 u$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");; H3 {* ?1 l1 Y: T* O2 f
if(!($result)) {- A" m5 O- ]/ Y& C0 d# V O: V
print "Useronline Select Error > ";; V. J8 K( K2 P; Q) i1 M
}8 [5 z4 u I. N! N1 w! ^$ r
//Count the number of rows = the number of people online5 Q& Y% D: u: m4 }
$user = mysql_num_rows($result);/ ], }+ w n7 _& p3 ^: `
//spit out the results
; N( O( x+ E, g+ x9 `mysql_close();0 @$ ]" I4 C: n
if($user == 1) {0 N9 {* q0 n& S+ q+ f& v' e
print("1 user online\n");
, e$ T* P5 n7 E& l5 s# o0 w} else {% W& R" m5 c: ~
print("$user users online\n");
9 a8 v/ ?& D/ X+ f}8 r7 P0 ]* S* x/ f9 ^: i" f
?>
1 [ d. G& X3 Q5 u. x5 ] ) P H) V- F6 N/ t4 t
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! S: H6 e% K6 r, o! v0 E o时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。% n" a/ C: T- M0 _- U- L; q; f. C
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
8 d4 e/ l# s$ B当然啦,这两款主机也是相当不错的。9 g! \! _5 @5 R) j* G' K9 O
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
2 G7 g# p7 Q6 C0 W3 X* r标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年) q0 Q$ S& h2 J3 H4 L" J# R
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
# j1 { s/ R* n. c E8 s空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=558 |6 P# V, s! Z5 w
自己加QQ去问吧。 |
|