|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ f# _& I' @* h, w: I' z+ s
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。; ^# y) `8 r" a6 Z- S/ _9 J5 a
首先我创建MYSQL数据库表。
( B( v1 j& j% n+ uCREATE TABLE tablename (8 h) G# w; w; X* w; k! Z. u4 {; d
field type(max_length) DEFAULT 'default_value' (NOT) NULL7 T# A2 T4 n$ m$ c5 y& t( f0 u
}可以使用的SQL语句。
2 M% h$ u+ B1 Z: z0 L4 CCREATE TABLE useronline (8 z# f0 S3 o1 b4 ? z1 Z
timestamp int(15) DEFAULT '0' NOT NULL,
7 M9 o- s" p: z( K* r. Sip varchar(40) NOT NULL,
" ?( O- t% z7 l+ P* s# D5 Jfile varchar(100) NOT NULL,. j! z, x. J* F! f
PRIMARY KEY (timestamp),* }) P& C C4 n4 n$ t0 J# a1 z
KEY ip (ip),+ t- L( {0 o2 s
KEY file (file)' s" i9 Y( ]; f. Y; L+ _& z; j7 q" m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ O: [/ X* \9 \- r& S$server = "localhost"; //你的服务器
+ S+ E' R9 m' v1 J w# N$db_user = "root"; //你的mysql的用户名
4 M2 ~0 T- a( j J6 P$db_pass = "password"; //你的mysql的密码
9 L' M5 ^. }+ O8 ^7 S! w$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 B- G# ^3 E% A5 i% i5 Z8 a9 K8 w
$timeoutseconds = 300;取当前时间。; V H2 {1 x9 I9 {& |6 C" z) n! _! p
$timestamp = time();上面的完整代码: w9 `, [4 d: O* R' J3 \
<?php6 A. U/ [" b/ m6 q' n- y
$server = "localhost"; //your server
; V+ Q$ [; b) Q% P( g$db_user = "root"; //your mysql database username
# ~0 d" B" d: G, f5 }- r$db_pass = "password"; //your mysql database password if any! [0 @( B: \7 S4 f9 o6 f' Z" M
$database = "users"; //the db name
) F0 v0 p0 J7 A1 c' r$timeoutseconds = 300;//timeoutseconds limit/ W4 D: E1 M( P+ K2 D' \
//get the current time( p Y9 }) X7 T# ?8 M" W
$timestamp = time();
" K6 p7 V/ f5 {' A) l//calculate the lowest timestamp allowed' g& O% i% o- H
$timeout = $timestamp-$timeoutseconds;
$ M! [& q& Y M5 |?>连接mysql9 r$ d! o/ H3 p, P' R
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 l7 C0 S! Y7 v. B3 O+ d
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" |9 K9 t1 `( v A j" n
mysql_connect($server, $db_user);查询数据库的代码:2 D6 o9 x1 G, K
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。" u: S8 h5 s' ~; d: o
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ M, t3 M5 v$ K' O) ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- g8 O3 V2 w# t" ~如果用户用错误信息的话,这样处理。
b5 R$ i/ n5 b8 R: J" [if(!($insert)) {# D2 K$ D1 z; Q1 M) j
print "Useronline Insert Failed > ";/ ~8 ]: R* O) d: p y. D. t8 f
}然后实现当超过设置的时间就删除该用户记录。$ e, a P5 B9 m+ Y/ y4 z
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; L" S9 @3 H) o% c) v" F! b6 Kif(!($delete)) {) m, r; l$ V) t0 h% y6 b
print "Useronline Delete Failed > ";
3 w# k9 J4 q/ j) W) c}下面我们解决数据库中不同IP的问题
2 a8 s$ }7 L6 e7 ], B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用1 a# D+ q0 Y* H" R0 q- w
mysql_num_rows(query);来统计用户,代码如下。9 ^" D# b1 W2 {$ j" f1 j
$user = mysql_num_rows($result);最后关闭数据库。* W( ~3 h. g9 W6 e9 A
mysql_close();显示在线的人数。
2 \ T/ B) ]% Fif($user == 1) {
& ?( b" ^5 B4 b# E0 m3 @: |" }print("1 user online\n");, y9 _2 a: A& y$ v; H* |5 B4 \& F
} else {
, O5 g- m* w5 ]print("$user users online\n");
7 @+ g9 v. s4 G5 {$ B( j}最终把上面代码写成一个PHP文件如下。
/ K) s0 Y& b n$ G0 Z+ K! e7 P<?php# I" @! t, x1 x/ V+ A" i) s
//Put your basic server info here0 f# ?; `3 o4 L( Y$ x* e3 L
$server = "localhost"; //normally localhost8 Z! {& g% ^: Y& e6 u, X9 F! a' ?
$db_user = "root"; //your MySQL database username
0 @; b9 @: z1 d2 `' e$db_pass = "password"; //your MySQL database password
3 k/ ~, n2 S) P$database = "users";8 _) L1 b' e- R! y% O9 V% }
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; n' h$ Z' x m' h( k# |
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 b# g1 y) H( Y. G1 V// $timeoutseconds seconds)* s( ~4 G! e+ V# {9 I: S: ~& u
//this is where PHP gets the time
, i! Y$ |4 y8 K1 D0 q6 i% K$timestamp = time();
4 j1 k. L$ Y% ~; X9 K! N//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
" K: t" D7 B/ G K% A4 T$timeout = $timestamp-$timeoutseconds;
" U3 a, {$ v9 }//connect to database& ?7 G) d5 g; l2 S1 t
mysql_connect($server, $db_user);0 z& p8 l( M+ L( @6 J
//add the timestamp from the user to the online list: w0 h8 p) W, @$ o; e4 n: V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 r$ {5 O& B# e" t5 K/ V( w: v('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- j, B% K% @. h7 N6 n
if(!($insert)) {) w# g5 Y H4 m1 E/ \' Z2 }6 O
print "Useronline Insert Failed > ";# f( e! h. M/ J! G: }6 n
}
' l! P4 l5 u& W) B0 P' X9 h//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
% b1 r0 D$ o' ]( P, b' p9 s0 B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
; I* J% ?1 J& X! Q4 Vif(!($delete)) {0 \+ y# a1 _( o( w h. l
print "Useronline Delete Failed > ";) O4 L2 K3 N i% j
}9 s1 B: \0 ~ M* U
//select the amount of people online, all uniques, which are online on THIS page8 }7 K& P6 [- t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");( O3 ~3 P) b& W" p2 H9 J: G0 Z
if(!($result)) {
' P. ?( P6 V' h5 \print "Useronline Select Error > ";# [# `& [6 h4 ?4 j: v3 ^
}
* W% y+ G9 l) B2 o//Count the number of rows = the number of people online! d# t/ r8 ^$ N2 L& d( y
$user = mysql_num_rows($result);
+ k4 u& e7 O2 x: D) p+ k//spit out the results) o% O* Q; `/ l9 j7 s
mysql_close();% s! C% F+ E0 {
if($user == 1) {
2 X d% G+ g) A6 S9 ]print("1 user online\n");
; p" a+ H* H& {; r' g} else {
( F: q3 Q) ?, x1 |! P$ ^7 qprint("$user users online\n");; M6 t+ t4 g/ ?1 O- C1 l
}; r& s9 F% t5 l
?>1 h" O* Z* `, X( z
- z0 ?8 @' a* v* L- Z
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
2 O: {' C" J/ j% c9 j时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。- q* q! P: J8 M
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。0 ?+ D: l! `/ o- [, f
当然啦,这两款主机也是相当不错的。
: G9 e$ P( Z; M3 x智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 s$ h7 t, x. t9 f R6 ~3 V
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
) `+ }# H Z6 t9 u提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
) g+ S! c: G, Z2 a* v: ]空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
0 j2 F& _3 ~6 i* r4 R7 K M: m! ^自己加QQ去问吧。 |
|