|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& C z) c& }4 A我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. v+ ~/ c" Z: }1 t% |0 C K/ s
首先我创建MYSQL数据库表。* C: d7 z' N4 C N: z
CREATE TABLE tablename (
! T1 E$ D) g. ufield type(max_length) DEFAULT 'default_value' (NOT) NULL' }% s# }, o9 j# _- p
}可以使用的SQL语句。' M' S0 V& v: ^0 z; P
CREATE TABLE useronline (( s8 `3 e" H+ q! L% N$ B, |0 h
timestamp int(15) DEFAULT '0' NOT NULL,
+ _3 p( Q% I* ?; Y* N0 xip varchar(40) NOT NULL,
% J0 t# H! ^; H) P6 ]! B, f7 O9 I, G& Ifile varchar(100) NOT NULL,
- b. D$ d" I6 `+ N1 m! a7 @% p/ wPRIMARY KEY (timestamp),) {; c1 O, k8 b" b
KEY ip (ip),2 U# r: s9 n7 ]# I3 f" N; M
KEY file (file)
; g; k1 _/ b1 L, p);下面我们是PHP脚本,首先我定义MYSQL的信息。4 q, r* ~4 w5 d5 S) n
$server = "localhost"; //你的服务器3 m, {1 p' m/ N
$db_user = "root"; //你的mysql的用户名8 f3 X- q+ U" T) M! g/ T+ P
$db_pass = "password"; //你的mysql的密码
9 k4 n" b1 x& @. v1 [5 }- D$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 N, q; Q% u" d
$timeoutseconds = 300;取当前时间。
0 G/ c1 w4 M" m' t2 g$timestamp = time();上面的完整代码:
: @ [2 s* {+ e) w<?php0 o# v- z/ |# R) r1 o
$server = "localhost"; //your server& {* D0 \' K# a+ b. Q: v
$db_user = "root"; //your mysql database username- g, Q |+ b+ k& s2 K8 H, t
$db_pass = "password"; //your mysql database password if any
# [7 k3 L: P' d& {# Z0 X$database = "users"; //the db name0 {4 p; m. y, i- ^& K
$timeoutseconds = 300;//timeoutseconds limit
' ~$ D. ~. W) }' [; ^* X//get the current time
* u: g8 ]; h+ J& J* t2 w$timestamp = time();5 A+ b0 b) o# e: D" c3 f7 J
//calculate the lowest timestamp allowed
, R: `( p; p, ~0 c* [4 b$timeout = $timestamp-$timeoutseconds;! w) M: C4 B% l+ a
?>连接mysql2 _& p% g1 x; @" ^) m! y. g( h
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 k* @0 I: `: F# p7 u; Z$ z4 `
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
% _$ N. b+ X( v1 L0 W0 ]$ ymysql_connect($server, $db_user);查询数据库的代码:4 X6 J) C0 V$ }! E
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
, [1 [" g+ }1 p: r% h8 u$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) E: u% Q$ U3 O) \% \('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" A ?8 d$ U# |如果用户用错误信息的话,这样处理。
: X$ w' [+ e6 k! \: qif(!($insert)) {' M- r! [: z: q# Y7 V2 g
print "Useronline Insert Failed > ";, B( `) T! J0 ]( w! J. F' X
}然后实现当超过设置的时间就删除该用户记录。
6 S) S2 ?5 N2 j; s$ j$ z5 D1 ~0 I( j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
f0 K$ M$ ~9 s9 Nif(!($delete)) {
& j6 W8 ?8 ^3 o, L. P2 j( G, V% S6 nprint "Useronline Delete Failed > ";2 T. `, d% S; V. f
}下面我们解决数据库中不同IP的问题. k5 O3 l' c# r7 t G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
5 I9 Z/ u# }1 X& l/ K! W; ^mysql_num_rows(query);来统计用户,代码如下。
% V: @$ z) ^; |/ B) D' w# |4 ~$user = mysql_num_rows($result);最后关闭数据库。& u5 e @) ~" Y
mysql_close();显示在线的人数。
9 `; \2 R3 `2 q% S2 T+ T9 }if($user == 1) {
7 a( B" E |0 b: Y" i9 _0 X7 dprint("1 user online\n");/ [( `- U" ]5 Z1 e$ m! W
} else {( h4 ]& x8 ]- Y# ^
print("$user users online\n");
1 C+ y# t8 h* m, A% S( B+ ~+ S}最终把上面代码写成一个PHP文件如下。7 {" u. ?. ?1 g* l7 E
<?php
/ e( V+ n% O3 e$ F: o7 Y//Put your basic server info here
; ]4 {7 M4 P. n. @5 w$server = "localhost"; //normally localhost
0 V' k$ c0 ~4 q4 r7 k& g$db_user = "root"; //your MySQL database username* e! j }2 N* M4 L
$db_pass = "password"; //your MySQL database password. O$ J, R' n& n( b
$database = "users";
9 S3 Q8 O& L1 Q! j$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. T, M( u' S$ O% i9 p2 f! ^// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
; C) u( I: ~% x; ?: Z// $timeoutseconds seconds)+ i! r4 J# }9 ?+ |
//this is where PHP gets the time
2 K! d) D( W$ V) y7 ?$timestamp = time();+ Q" l }& D- K
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed. w. o1 p! n* _1 e% d4 Q
$timeout = $timestamp-$timeoutseconds;3 c& S2 N7 T+ R
//connect to database
5 s1 i( i2 m# i8 Lmysql_connect($server, $db_user);1 Y# [0 p$ Y7 c5 P1 |8 l
//add the timestamp from the user to the online list) N1 I+ }* B$ n2 M
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; m$ l0 }7 g' A4 `- g('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( G; k0 `5 g; g3 Tif(!($insert)) {
# w/ p1 j" f0 m2 I8 s! kprint "Useronline Insert Failed > ";
' U* m) R) M4 h) U}. t- H6 J9 d& Z& ^
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
% K( E3 c% o% i7 s4 w1 {7 U$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) u- P$ ~; x8 h; I4 Uif(!($delete)) {8 d9 [6 E+ J ^- X/ c/ Y5 |
print "Useronline Delete Failed > ";$ Z" E, N7 V9 B4 Y" ?
}
' G* z+ V* p9 g8 H+ ?! S3 \( K+ @//select the amount of people online, all uniques, which are online on THIS page
& B* B' Q- Q) P! H) S: c$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
0 |# j* K e) {# ^* P! I- j5 Pif(!($result)) {
& v7 z* h: j& h2 o6 vprint "Useronline Select Error > ";
, b+ P1 c, |! W9 E+ y}/ r0 q8 a0 x: Y4 h% W- B
//Count the number of rows = the number of people online$ t% n" ]. G- w
$user = mysql_num_rows($result);
: o2 [, e! R& y//spit out the results
0 J3 i U: D$ t: S0 cmysql_close();8 ]$ p0 u/ @! W
if($user == 1) {
, P8 m5 n7 f. ]" N9 C9 @3 |8 gprint("1 user online\n");
' Z8 T* R. A F3 O& q- p2 n% q} else {' h" v7 n1 J" o6 K, a% V
print("$user users online\n");
- y6 j3 L$ [2 m6 u6 d}$ r! D" C6 C1 \- O$ ^. I" O& b
?>
/ n1 F. t# d* x: K! J , n2 t5 `; L5 S1 Y! f' t
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
. C9 \# t. u# K6 T时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ r5 y1 X% q; n9 \ p1 ]" I我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ |* I" ~ o% Q+ v! S( ^
当然啦,这两款主机也是相当不错的。
8 [% y/ `, @# ?3 E% T% `! I智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年. [! P4 N/ E: Z0 g5 _, G) e
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
( i# f! t/ {- X! P$ P% y提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% L' U6 I/ p( q7 r空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55: C, U Q/ Z- D3 b) X
自己加QQ去问吧。 |
|