|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
" f2 C4 H0 S" v1 q0 _我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。! L$ p/ W; Q- I4 \: {
首先我创建MYSQL数据库表。
& h, \0 ?5 |6 Q1 zCREATE TABLE tablename (
9 n2 B% Y. ~' H( P$ Cfield type(max_length) DEFAULT 'default_value' (NOT) NULL. J; a3 W' R. y' m/ `# k8 U! s$ t
}可以使用的SQL语句。
0 Q# V2 v! x% r. I( ^CREATE TABLE useronline (6 H7 C4 ^" |. m& p9 d% Z: N, Q
timestamp int(15) DEFAULT '0' NOT NULL,
# F3 z4 O4 t: q Cip varchar(40) NOT NULL,
Q& I5 h5 A+ X x- Q4 i0 _" Gfile varchar(100) NOT NULL,
' }* @7 e+ F! E1 ZPRIMARY KEY (timestamp),
3 \ D- J; O" c3 N' VKEY ip (ip),3 z& ^4 C9 ^$ d( c
KEY file (file)
1 Y" R+ ] I0 W# h6 d$ Q);下面我们是PHP脚本,首先我定义MYSQL的信息。
7 k6 L- b" H- `/ |0 p _$server = "localhost"; //你的服务器* v1 Q& d6 y2 u$ v$ C% N* d) P
$db_user = "root"; //你的mysql的用户名 V( N; o+ g9 _2 S7 |! r3 v
$db_pass = "password"; //你的mysql的密码/ q) ^& ^8 ]7 t! i5 t6 }
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 [" n1 b1 [& \* l
$timeoutseconds = 300;取当前时间。 j- ?5 \3 @; D: R( R0 i; i# O, V5 |
$timestamp = time();上面的完整代码:
& \0 b" U% O J8 ?* |! O<?php, t' S7 m8 w {3 V( k, e: X
$server = "localhost"; //your server5 O6 O; z% o8 B8 u& C9 O1 E
$db_user = "root"; //your mysql database username0 |: R& x, N0 K" b, ~
$db_pass = "password"; //your mysql database password if any' p" s% H8 N! B
$database = "users"; //the db name% Q5 `. `0 V- j( _ Z% A
$timeoutseconds = 300;//timeoutseconds limit
3 O- O3 G& @9 K7 r) O//get the current time
; G j3 I' D8 P. g1 [$timestamp = time();
( g& r, e8 {( J0 g) _( |//calculate the lowest timestamp allowed
. O& k v: G/ C+ U+ _$timeout = $timestamp-$timeoutseconds;
( j1 G$ P. Q) D: m8 V0 \?>连接mysql
' j- \) Z4 b8 D( v* p( ], w2 Umysql_connect('localhost', 'username', 'password');也允许使用变量形式。, ?( d8 {' S) F& A
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ ~3 ^0 z: e- u. E$ s( O. Y, }" [
mysql_connect($server, $db_user);查询数据库的代码:
" ?0 J% `- L( xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。 q: j: A M% E5 g! F4 M
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; b K7 _) v9 t4 S('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 h- q- _5 a% |# \( f0 t( P4 }# i
如果用户用错误信息的话,这样处理。) n& s5 m# G$ J' G/ y! f9 F& A+ B
if(!($insert)) {
1 o" Q! P. k0 u8 K- P: i1 Jprint "Useronline Insert Failed > ";0 h \1 I Q3 S# | F, u
}然后实现当超过设置的时间就删除该用户记录。0 F" ?/ \) Z" ]8 h% ?' v* s, B
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 P4 u g, f) I4 g% n4 m5 }
if(!($delete)) {
$ L) F( N g7 T* Z6 v: X% P0 r7 Xprint "Useronline Delete Failed > ";
9 B1 D) H/ f) g6 r& L5 R}下面我们解决数据库中不同IP的问题
" B5 h: j- b) x# P. s1 v! c6 ^$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
( n, P; D+ [1 ~/ ^mysql_num_rows(query);来统计用户,代码如下。% l8 H* m) w n( d, ^+ s
$user = mysql_num_rows($result);最后关闭数据库。
3 F$ a# V8 r6 jmysql_close();显示在线的人数。
2 V( C J$ j% n$ E+ T2 K. m* gif($user == 1) {
) g3 V8 H2 J; G& F, d3 hprint("1 user online\n");* F1 @: y7 j7 G7 R
} else {
9 s1 i! w) c' W4 n% [/ K) b) cprint("$user users online\n");. T5 `2 ^& v+ k r3 ]* ] p
}最终把上面代码写成一个PHP文件如下。* n" _3 t# r' R# _
<?php# s: X! {. D$ y# [
//Put your basic server info here2 A1 N8 @5 G+ U; ~) X6 A& `
$server = "localhost"; //normally localhost3 o3 v0 b: [) R: M. R; G, Y* U8 h
$db_user = "root"; //your MySQL database username' s+ c' Q: |6 ?
$db_pass = "password"; //your MySQL database password
/ u% S9 E( t' Y& }$database = "users";9 A Q1 o7 E0 V' P& `
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% D( }9 }, e2 H j9 e5 ? r! \
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 i' i6 q: I* \ [5 ? Z$ w
// $timeoutseconds seconds)
1 W/ \' x' K) F3 @//this is where PHP gets the time8 n& H6 b' K* M% s, d; t8 [0 r
$timestamp = time();
# A$ P& M% W9 k3 d9 J( `//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
# J Y/ W3 |( K$ M' x$timeout = $timestamp-$timeoutseconds;6 k: X$ M3 e6 r, v0 x
//connect to database
. ?( o3 A4 W" D. K6 O9 umysql_connect($server, $db_user);
! `9 V) D9 j. h//add the timestamp from the user to the online list0 |# \0 J0 ^+ C- V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 y( u. e% s& x
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, |* ?/ B5 Z$ x$ s% G2 ^
if(!($insert)) {
' M5 } L' y9 s9 q7 N& _1 q& }' Z. Nprint "Useronline Insert Failed > ";
2 B- L8 h9 E: T+ ~( q6 w/ g7 k}
+ `& H1 i( w+ q' G//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ a) I5 L+ d: ]8 t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: ]6 g8 r6 s, z8 L7 m/ d4 qif(!($delete)) {
! p P) h: ~3 ?print "Useronline Delete Failed > ";
, h4 P" P2 \1 ]- S3 }" ~}- E) f! O9 d3 C, ~7 {, [9 v) G
//select the amount of people online, all uniques, which are online on THIS page$ a: `! |1 B9 s* s
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
) w- P( s6 g% b3 R% C3 _if(!($result)) {
1 U( p0 s) L$ r6 A2 tprint "Useronline Select Error > ";
/ l4 M6 f7 Y: S3 W: j" E% t}- m. t$ w. C0 [3 A
//Count the number of rows = the number of people online
! P+ A# q, E2 x5 q8 M! Y5 B$user = mysql_num_rows($result);/ r# N5 c! q6 Q
//spit out the results
- x+ Y% j: A# c5 [$ G; F) Qmysql_close();" ? {- w7 k8 X/ i. Y8 _0 U
if($user == 1) {6 z; y7 [+ Q# ?, w$ w- f- l
print("1 user online\n");
# m( _9 S5 ]5 c$ F8 X/ R& \; ^} else {, k/ e8 c4 }$ `' x8 T" @5 P
print("$user users online\n");0 G3 S# R9 A' i0 H5 o U- r
}$ M7 O1 |9 I& j/ ^
?> @: |$ c) a+ K7 C( o
! }- i2 z! r+ W0 s+ D
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。, r% M) F. S, E
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。9 s4 |, H+ @* @! N2 f) N
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。+ | Z- i: K/ e, e: }/ Z5 A
当然啦,这两款主机也是相当不错的。
7 V* T3 E" ]' n+ ?; ]智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
0 b3 z' Y/ |9 x5 C8 ~5 o5 X标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 {. H4 l& C% c% o w2 Y+ L: U
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ u" U8 w5 u% L4 H A空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55/ z6 i& ]4 f. e) o- h3 a
自己加QQ去问吧。 |
|