
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!, d4 ?# s0 N6 L9 r* d$ K
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
1 ]0 [' P+ E' V* b首先我创建MYSQL数据库表。' E1 x: S4 H; N5 Q
CREATE TABLE tablename (* n; y* H3 G% X5 M% x
field type(max_length) DEFAULT 'default_value' (NOT) NULL
8 z% }5 R: g5 Q}可以使用的SQL语句。6 O' V$ A) A7 r, [6 [7 d
CREATE TABLE useronline (
* e6 P6 ]: ^8 O, g8 htimestamp int(15) DEFAULT '0' NOT NULL,. ~4 ]$ _6 Y) c2 n
ip varchar(40) NOT NULL,
% i# w+ b5 J+ ?3 u* Rfile varchar(100) NOT NULL,
; H2 i5 x6 J3 ^! TPRIMARY KEY (timestamp),
, n- d8 Q5 x2 G) _/ BKEY ip (ip),# T& G6 k6 N& x; r( N
KEY file (file)2 g( `* R9 ^0 J6 i
);下面我们是PHP脚本,首先我定义MYSQL的信息。( A$ h5 E% L6 L' y$ t% i1 ]
$server = "localhost"; //你的服务器
* }. u' G8 v9 B J7 i( `$db_user = "root"; //你的mysql的用户名
. y, K3 ~, V* }1 G# z; p" `) s, B$db_pass = "password"; //你的mysql的密码
) S7 x4 {9 T7 |% Z7 N$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)8 C4 o2 h' u" m: y8 I
$timeoutseconds = 300;取当前时间。- B; C: e4 V* `! h. ?0 e8 Y
$timestamp = time();上面的完整代码:
9 Y. Z7 k2 |9 B% K<?php
7 F' [9 l4 X' y9 T a4 Y$server = "localhost"; //your server
4 D% g m7 @" m6 P; _3 }+ m9 h$db_user = "root"; //your mysql database username
! |) Y. k# P. U, K6 j0 {1 k, a- q$db_pass = "password"; //your mysql database password if any5 U) I- E! z; C
$database = "users"; //the db name
. B6 O3 R2 Y5 r' l$timeoutseconds = 300;//timeoutseconds limit
: Z8 x# d( K8 v& k//get the current time+ b6 Y* `" }- k& d0 ^& j) @
$timestamp = time();
5 p/ O/ l6 u2 ^6 v//calculate the lowest timestamp allowed( u8 T7 Q* G) A: A
$timeout = $timestamp-$timeoutseconds;
8 S, c/ I8 \0 ?& W: Y: A- a?>连接mysql5 ]* v8 l W$ Z* ~- K0 |& d
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。+ Q, A% ~$ Z( l% w2 v, \+ b
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
% [) |1 d) ?, ~" s& w9 a# s8 ^mysql_connect($server, $db_user);查询数据库的代码:
4 A: e6 s) \( \# k1 Y% a. dmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 o& a+ z* e; k& k+ [7 F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* x$ c6 N U. G! Y# U! l$ M5 V) ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, l. r' G' A+ D* l8 ]# ^+ W如果用户用错误信息的话,这样处理。
0 i4 A8 r, [) N6 V' I" wif(!($insert)) {4 e6 g+ m) b# a: E- j' E
print "Useronline Insert Failed > ";
* s5 G' x: t& _* ?$ ] I}然后实现当超过设置的时间就删除该用户记录。
* g- R: @1 E" C- \! W# T( c$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 I$ S2 y; D) @& L% k' \/ C% jif(!($delete)) {
* g- A- H P/ O% A5 y8 t( F; tprint "Useronline Delete Failed > ";
) ~2 ~3 s; i* ~+ G) ]' n}下面我们解决数据库中不同IP的问题
( @2 ~9 p* ^" P x' g% O$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
0 z [: W- a. v# Mmysql_num_rows(query);来统计用户,代码如下。' ~+ s$ c2 K, u6 v; M2 |) \$ ]
$user = mysql_num_rows($result);最后关闭数据库。. b% y" x K d c) i
mysql_close();显示在线的人数。) e" G t1 R5 h" a
if($user == 1) {, Z3 V! s" I; L5 ~+ Y
print("1 user online\n");
/ t& ]: m& z# ~0 _" m& @7 _8 d- j} else {. v4 i/ z% {4 ~0 h
print("$user users online\n");
7 M, G! p2 u1 W' d# I3 G. p}最终把上面代码写成一个PHP文件如下。! H7 \/ v0 }% @1 ]3 C' @' P3 T
<?php
6 F. B9 j" `- R//Put your basic server info here! U" V I" ` |4 @* G) N
$server = "localhost"; //normally localhost/ p: u# l( @) m% \
$db_user = "root"; //your MySQL database username
7 N: ~' ^" K! A) ^$db_pass = "password"; //your MySQL database password
2 ?& d+ }) {, U8 V" i) R$database = "users";
4 I8 n0 U+ F, i$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 Y; O+ O! U# }0 K4 d' O
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% a$ r4 y# A r0 O. W/ H( }5 V
// $timeoutseconds seconds)
! p7 l" c$ _( D//this is where PHP gets the time
9 M9 b& ]0 l: R6 d$timestamp = time();
1 y5 d" h0 p" \/ h//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed' y7 y }5 o$ m+ a
$timeout = $timestamp-$timeoutseconds;
) u, p$ t( s5 V//connect to database# E, J3 F+ s9 k+ i( k
mysql_connect($server, $db_user);
" E! A: T( S3 }% i//add the timestamp from the user to the online list r6 I: |( i q3 F7 a
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- n: Z& s" a5 Q8 l
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 m% z2 o7 P* V" ]3 pif(!($insert)) {
( }* d' X4 O g" ~7 Q+ X$ Kprint "Useronline Insert Failed > ";
( O+ ]8 ]- ^( m }) W7 D, `- ?3 ]}
. E1 Y9 F) [3 ^; d' s) A- Y. }//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
~" w: g! L5 z# ^$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: t8 G$ l, S& l9 T. e9 \% A) ]& w
if(!($delete)) {% ~0 q; y6 O' F5 U1 T+ C) V
print "Useronline Delete Failed > ";/ f( v+ i& ?8 F
}8 a/ x4 A5 n7 h
//select the amount of people online, all uniques, which are online on THIS page
$ q" e4 T+ R/ E5 w$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
9 ?* h. S: P' }1 L, Hif(!($result)) {$ M1 W- ^. W7 d8 O3 `6 K
print "Useronline Select Error > ";
7 i* K/ {6 N! S {3 a}
$ r$ j: G, u. b% j8 u' [& [3 u//Count the number of rows = the number of people online I& B% n+ Y8 N1 ~
$user = mysql_num_rows($result);' S# e4 v+ b' L! V0 C
//spit out the results& g3 {* W* Q1 z( i# U
mysql_close();8 L4 I9 }0 e" |. h1 c9 J# I8 W$ R
if($user == 1) {
1 c" o; @$ w: _1 n3 O, Vprint("1 user online\n");
" B3 m* i0 p/ T1 H+ K1 ?' g7 H} else {' f/ M- N' h2 O; ~# f, C- I& C* [
print("$user users online\n");" d- b) X: Z" n8 U; r6 Z3 h6 J& a0 T
}) Y+ f: ?5 p) D) L5 _ @# |$ b% K0 T
?>
; u4 e. I& w6 e% O: L, Z ( d" x# |: c& f/ t' ?% X
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ U( h. B# u' Q7 d
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。9 Y! R- r6 M' r- `* O
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( J- Z4 s. A3 K' }当然啦,这两款主机也是相当不错的。# x# I- C4 X9 c5 f( S
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
+ P/ L% Y- n! }1 J标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- Z* g$ w7 E" b提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, x! T* ^* N* ^/ K5 n# M! Z空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55: y$ }/ i- T/ k# I
自己加QQ去问吧。 |
|