|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! _9 m" U0 B) j! u2 A& G
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 o) c' ]# o( |1 S; w [8 h首先我创建MYSQL数据库表。
) L6 K3 J/ Z4 `9 }9 VCREATE TABLE tablename (0 F2 t1 T: M( O4 G
field type(max_length) DEFAULT 'default_value' (NOT) NULL
2 a9 V; }0 t! C2 T}可以使用的SQL语句。
- y' z7 b+ y6 a) W, m$ rCREATE TABLE useronline (. ]/ R7 d$ q# F% o; d! J, G! e$ e. y
timestamp int(15) DEFAULT '0' NOT NULL,: b C& E% }" B. u
ip varchar(40) NOT NULL,4 X7 ^; |, U% J
file varchar(100) NOT NULL,
5 d- w. p& j! t0 A- mPRIMARY KEY (timestamp),9 x4 i6 M. L$ M( l% y
KEY ip (ip),, k" {4 F0 x% s# }; a( R4 B. l
KEY file (file)6 @& i& y+ |5 t5 @1 M- x+ I$ t
);下面我们是PHP脚本,首先我定义MYSQL的信息。2 S* n' t1 G* `9 S7 R7 _
$server = "localhost"; //你的服务器# ~# F) k: F$ x4 v
$db_user = "root"; //你的mysql的用户名
( P% P6 q# U! w$db_pass = "password"; //你的mysql的密码$ z; h4 l$ q. [& R! ~) G
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
: l+ d$ a" M+ d; M% T+ M; \" F$ y3 y$timeoutseconds = 300;取当前时间。, j) _ | j2 k; a. f0 O A4 r
$timestamp = time();上面的完整代码:* I3 ^) O' d I& T1 F
<?php2 T( z8 e! h6 K2 ~9 g
$server = "localhost"; //your server/ ?/ [4 {) f# X& s' P# z
$db_user = "root"; //your mysql database username
* Q8 o K6 C: v) r/ x$db_pass = "password"; //your mysql database password if any
4 {. |2 t% v F: }$database = "users"; //the db name
* Z+ M. e9 ]" C1 ]$timeoutseconds = 300;//timeoutseconds limit6 F) f! i" Y8 } o# L
//get the current time0 f" ?1 b* |" l# W/ ~0 H
$timestamp = time();
4 G, b1 s/ {2 ^//calculate the lowest timestamp allowed
. c: p! K+ G/ J$timeout = $timestamp-$timeoutseconds;/ A% f( D7 f# @, D0 x8 G
?>连接mysql
( k/ v% o; @# R! Hmysql_connect('localhost', 'username', 'password');也允许使用变量形式。& [' }% \* u3 O. k9 J b
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接! Z5 z7 L: Q+ R+ ^5 l9 k# S$ j% V% ~9 ^
mysql_connect($server, $db_user);查询数据库的代码:
3 O% M( r* l! ]5 b( a7 v( Y3 _4 }( n% cmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。( v1 {! G3 O' c
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; @- K. Y5 p$ B) I" q% Z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 \1 r$ ~6 p. ^; s$ f( I; V: i如果用户用错误信息的话,这样处理。
_) j* ` T: i9 m0 ^if(!($insert)) {# H- n/ z% Q2 ~& K1 O
print "Useronline Insert Failed > ";
. H8 G9 C. ~3 M6 n& E: [}然后实现当超过设置的时间就删除该用户记录。" g$ _, g ]* |) z( r% ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 y. J* o+ Q, i( {2 w$ Pif(!($delete)) {( V0 ?. d9 F% l: E& E) K# o( k
print "Useronline Delete Failed > ";
9 H+ L6 {. G) \1 v8 r% A$ @7 e}下面我们解决数据库中不同IP的问题- \8 W; E! t: s& [. I S4 G; ]2 T
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 u6 b5 x! n: }2 v0 F) B9 h
mysql_num_rows(query);来统计用户,代码如下。2 i# f3 B- d, E g* q R6 s5 T
$user = mysql_num_rows($result);最后关闭数据库。
8 A5 s0 w( O1 Amysql_close();显示在线的人数。: z' y# Z# I! K& w
if($user == 1) {3 c' }9 u w( C, z
print("1 user online\n");( q1 r. Q$ r& ^
} else {4 p+ D6 E7 G3 D- X2 ]9 j( ?
print("$user users online\n");
3 l* a$ Y. o( j' c9 u" S}最终把上面代码写成一个PHP文件如下。
; F# U% _0 I& I4 p$ V8 M( c<?php2 s8 Q7 b/ Z6 J
//Put your basic server info here
. o \3 f% N, W$ q" u8 M' d/ ^, i$server = "localhost"; //normally localhost
6 y) V4 f' I" D( K9 ]# v5 F$db_user = "root"; //your MySQL database username- ~. l% m& M! E; b) [* ~
$db_pass = "password"; //your MySQL database password
/ t( g$ ]+ v) E; y$database = "users";) j. i0 u" S0 n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
; U7 n3 b2 R0 ]! u: _// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last1 F1 v& W0 g8 K+ N/ s( J; D: k
// $timeoutseconds seconds)' z7 O! \* I* H, S2 i- q6 W
//this is where PHP gets the time6 i: ~# a; M. q8 \$ j, R$ F* m
$timestamp = time();
. N8 F# N. R: G! X" G//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% ^6 ?' G9 c9 ~
$timeout = $timestamp-$timeoutseconds;" |" X- Z# k: L8 J( f" ]8 |
//connect to database
3 K: M( d% c$ x6 g# \: e3 imysql_connect($server, $db_user);" t2 N# F& s: j6 d8 f
//add the timestamp from the user to the online list
% H6 ^) I$ m* @' a! _$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, p. @! A7 }0 q3 R$ b('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- S5 Y; v- e$ {+ b8 Bif(!($insert)) {
% J/ P/ c8 g! U' T% A& \8 n2 x' wprint "Useronline Insert Failed > ";1 b* B0 r& O7 k2 h# U4 ~
}5 A$ j% A# l- L# k4 @2 v* J \
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# m; g9 ]) V% R- e1 n$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
( y2 j- r" H+ O& S2 t+ D% G" dif(!($delete)) {
8 ^% U- Y- @* i4 m2 B- Yprint "Useronline Delete Failed > ";
8 w2 X# R( M# i5 |}
; j f0 G/ [3 g+ C9 `8 k//select the amount of people online, all uniques, which are online on THIS page
: }+ }7 ?/ C6 J9 Q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
8 v! G5 c3 N" f6 N& u4 L' |if(!($result)) {4 V* j" v3 D2 h0 m; K/ H
print "Useronline Select Error > ";
" B2 h) m |- e6 @3 Y}
) y& H% U2 ~; H9 ]* A C//Count the number of rows = the number of people online) B1 }3 _5 {$ F3 I3 i% J
$user = mysql_num_rows($result);* O7 [7 Q* Q- U4 U9 X6 e$ [. n! G8 y$ T
//spit out the results
. y0 A# {$ O4 @8 C- f( nmysql_close();
# d. X$ M; ^+ {if($user == 1) {
5 ~3 }" f% j7 G4 h! B* lprint("1 user online\n");
* k3 I. H& R9 H+ L. z: l* Z# G} else {
: ^2 r" r2 U% i2 \' o' yprint("$user users online\n");
# m. B0 m: s Q0 [}( X( _$ X0 b8 h) L& ?) @
?>
4 p- W) @4 ?8 | [6 x4 h - n" J. [# h% m" q! E
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
( Z0 V9 T1 S8 G7 T2 F. t时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# U& R. T; o9 ~1 R% d4 i2 X- u/ l我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。2 T/ c, Z6 p9 A6 D
当然啦,这两款主机也是相当不错的。: v6 e- I t( z4 L0 i
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年1 B+ Y7 Y& a- w* t- h
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年* h. S7 Y, T6 S" L W# h
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 B- { u' q4 H5 V
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
, c1 L# a8 Q$ z. L8 R. e自己加QQ去问吧。 |
|