|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!# Q& U7 m: L8 G6 q1 N
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。% m( a1 @% |, p/ | w1 ~, q* V
首先我创建MYSQL数据库表。
0 I, P# `' H5 G. {% c1 W6 X: g, PCREATE TABLE tablename (1 g8 S7 W$ e- R( o( d \
field type(max_length) DEFAULT 'default_value' (NOT) NULL
; I8 h0 I4 c1 W$ D* I1 {8 D. q}可以使用的SQL语句。
/ V8 e3 o3 T+ O" {CREATE TABLE useronline (! Q0 u6 U! r- P% K5 U, o
timestamp int(15) DEFAULT '0' NOT NULL,
. c5 m: e4 a% k5 w, oip varchar(40) NOT NULL,# @/ k9 P4 v; A7 ^! f
file varchar(100) NOT NULL,. U. [% [$ \( y" o7 U$ F( g
PRIMARY KEY (timestamp),
& f/ f, S0 o3 l9 oKEY ip (ip),
! l: q. b7 q" U! t% \KEY file (file); k. U6 Q- O& f- a& i
);下面我们是PHP脚本,首先我定义MYSQL的信息。
7 @" p, o# `; }; Z% t8 Y$server = "localhost"; //你的服务器6 A" g* ] v! b# ~
$db_user = "root"; //你的mysql的用户名& A1 s. `( A; j9 R, }( B6 O
$db_pass = "password"; //你的mysql的密码5 X% l% T% a! t& F; F
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( @+ M' @* A: h0 J, q; s$timeoutseconds = 300;取当前时间。 y4 m% G8 l8 G% Q: o# u: `
$timestamp = time();上面的完整代码:
/ j$ v) X7 D$ G" `! M<?php3 p8 p* K! `- a2 _9 a
$server = "localhost"; //your server
8 l* U! v5 j+ U9 T1 l; Y$db_user = "root"; //your mysql database username. Y* Q) R4 L# J; r F& N% L) K. L3 ^* \
$db_pass = "password"; //your mysql database password if any1 p& i6 t9 I& Z$ a
$database = "users"; //the db name- d; k' ~$ a! u2 d: y( l
$timeoutseconds = 300;//timeoutseconds limit
* x$ j; Y. ]# m4 W' F//get the current time
, T3 m7 M- t8 k$timestamp = time();
( x P6 J9 a# i9 P6 ]$ j//calculate the lowest timestamp allowed
5 x! R! O/ A8 f: Q5 Y9 d' ~$timeout = $timestamp-$timeoutseconds;
9 ?: y- i/ w4 S. P?>连接mysql
$ ]5 L% [! Z% ]5 ?/ X/ \# jmysql_connect('localhost', 'username', 'password');也允许使用变量形式。. h& g e; K% p* B) E! s+ u$ `
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接! K2 Q) g& e- D7 R4 M3 |- e3 }
mysql_connect($server, $db_user);查询数据库的代码:
/ R+ s; y& ?! g$ Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。& C* r# L/ O& i: y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' t" }+ G* o4 `( K( p5 F; N
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 M6 v: @7 F* A: h% k如果用户用错误信息的话,这样处理。* W" u6 A6 Q* n( D O {
if(!($insert)) {
1 r! V2 f0 k$ \+ a% s# ]( S/ Cprint "Useronline Insert Failed > ";
% C+ C; h3 w) Z( C" U$ J}然后实现当超过设置的时间就删除该用户记录。; K5 o6 E8 O+ v6 k: |6 n
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ m5 P3 i7 W m; n0 [3 P# d
if(!($delete)) {
) T5 s' o! m. N6 Y' o4 iprint "Useronline Delete Failed > ";
( p% C# X5 a" e: {) [# J}下面我们解决数据库中不同IP的问题
+ V8 w& r$ F! N$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 P: G, O2 J0 ?5 H
mysql_num_rows(query);来统计用户,代码如下。
! Z3 g B8 a8 _1 r m# j) k, H$user = mysql_num_rows($result);最后关闭数据库。
+ J* _$ V- O1 B( A6 _/ `mysql_close();显示在线的人数。' v/ \: X9 }5 p5 ^3 f4 H. ?' [, A
if($user == 1) {) a; r4 K6 l# s
print("1 user online\n");
, H& ~" B, N" _) j6 X7 w} else {3 u0 W7 F& L, W
print("$user users online\n");$ m( }+ h8 ?" b( M8 h& a
}最终把上面代码写成一个PHP文件如下。' L8 G4 a7 h% a: ^. N
<?php
" Y1 |0 d @" N& I//Put your basic server info here
& z+ a: w$ I3 C% e$server = "localhost"; //normally localhost1 ^" @) [( A+ M9 ?
$db_user = "root"; //your MySQL database username
: N* u7 c4 Y* O+ _, n$db_pass = "password"; //your MySQL database password# [6 n/ Y+ i7 {8 p8 c
$database = "users";
, h5 A+ g& v, B2 {/ P; U$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 H1 M# M: W' m. l' P
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ J7 o L6 h3 C6 s+ E+ H
// $timeoutseconds seconds)* h; |: E. ~: ]% O' I
//this is where PHP gets the time2 s. Y+ T0 K$ ^) ^& o
$timestamp = time();0 J& Q- S5 Z& D7 w
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
- I( z9 o: o( q3 c) t$timeout = $timestamp-$timeoutseconds;
; r& V% i' J" b+ Z+ q O0 p% x" H//connect to database* \2 E @# {5 z, C# S
mysql_connect($server, $db_user);
, F* @* @0 Y e( N* R8 Q0 }! o//add the timestamp from the user to the online list4 L* Y2 e$ @# M% m6 G; D3 g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ G1 I* u; j# K/ h! N ^1 N('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 ~0 k3 i9 [3 Q) C+ fif(!($insert)) {
1 @: D" H: a7 K' s3 [9 Cprint "Useronline Insert Failed > ";) g9 H7 z& y1 E" h3 i& g( Y0 K
}
2 y3 \# H$ X& j$ L//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
( W( M0 V7 T2 W: R: K0 q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");; U$ E2 k( M. Z
if(!($delete)) {
2 ~8 N, y4 |! L' k hprint "Useronline Delete Failed > ";
! n1 g/ s* F; ?3 }" m9 ?}
5 K: C' Y& B* W- k- P2 ~9 o! j//select the amount of people online, all uniques, which are online on THIS page
I% T4 I8 K( H) S" w' o$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; x- Q" }* Q' U: U3 g, \4 j- Y0 ^if(!($result)) {" f7 N6 o; l4 ]& o, N8 h, R! r/ v
print "Useronline Select Error > ";
* |& m8 v P" ]; f}
) J* t: D& I. D n. }//Count the number of rows = the number of people online/ l7 ?( W5 g- l- ~+ _
$user = mysql_num_rows($result);
3 A, i, b: c9 @$ f: y+ x//spit out the results+ N" N0 r( U$ X: G* E, _: H C
mysql_close();6 d6 `6 i1 X2 B& m. s1 j0 _
if($user == 1) {
6 t/ l( w/ d- K! g* F% Cprint("1 user online\n");! `9 d4 w% L/ ]9 W
} else {
* \$ L2 F% F+ t$ u' l+ uprint("$user users online\n");
. \- _& | M; A3 n7 m& w9 j7 B; C) @}
- f' R6 u$ d C$ E/ ]( U?>$ z* b4 c& J0 T& M) c% I8 n

3 [. x, H, ?" P以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。7 q' r! ?/ e, ^- ]2 D9 _
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。% ]* S4 ]. T$ N# a5 f& [0 n& t
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; W6 ~) W1 r k# g( D6 l5 I4 [; o7 U- S
当然啦,这两款主机也是相当不错的。4 d0 I; U# P1 @) F0 M- d+ \, B
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
4 `1 _+ O0 a x1 V; v* d标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
8 j4 O( P+ X2 y提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 w! a5 V2 f) o- P空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ W$ ~6 _* }) ?# y
自己加QQ去问吧。 |
|