|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!( X& ^6 J( e3 l* A0 R H* h, G" ]
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 f7 j4 v* u/ q2 Y$ B" x" {# i
首先我创建MYSQL数据库表。
4 O" z5 D! a0 |4 ~CREATE TABLE tablename (
7 X( r7 O+ v) y* N3 o& V( L0 S0 Bfield type(max_length) DEFAULT 'default_value' (NOT) NULL0 ~; d1 l! c% M" M
}可以使用的SQL语句。: W1 P& _- c+ H& a: C \
CREATE TABLE useronline (
' n) q5 ^' b" Itimestamp int(15) DEFAULT '0' NOT NULL,
2 {- ]" c9 }. d. c1 n4 nip varchar(40) NOT NULL,
t. u# W+ U% y2 t7 z/ pfile varchar(100) NOT NULL,
% E) _6 G$ s* UPRIMARY KEY (timestamp),
% Z S/ m3 k+ i: F# n$ CKEY ip (ip),
4 v8 `2 N$ G% g* I0 Y3 kKEY file (file)
9 Q. c8 \8 Y, J+ K3 l);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ \$ j! L/ _7 {* b/ I* |! O$server = "localhost"; //你的服务器
. _- ?3 Y6 ]. R7 K, l$db_user = "root"; //你的mysql的用户名* S. U9 G a3 B5 z `& E
$db_pass = "password"; //你的mysql的密码8 W' L6 f& S! j( A1 I( o
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
0 F! t8 D% B6 z4 |% H6 X$timeoutseconds = 300;取当前时间。1 G2 p' W& C: F! Y8 I& S; P' t
$timestamp = time();上面的完整代码:4 [5 q3 l) J/ a5 j, W
<?php
8 p# R* Q5 r. F$server = "localhost"; //your server! J7 a! V3 Z+ s4 r- m% }! H
$db_user = "root"; //your mysql database username) q$ V/ a0 Q* S0 @& l# x/ v* s' _
$db_pass = "password"; //your mysql database password if any
- c! ]% H {1 [5 [0 W* R( x$ J) w/ }( N$database = "users"; //the db name
: v- D9 o% `3 \* G/ U! W$timeoutseconds = 300;//timeoutseconds limit
. p7 a! L) f \, x% U f+ y* ]# Z//get the current time9 I% R. g4 z2 ^" k6 E
$timestamp = time();
; O& ]. ?! A( N9 E# _" Y//calculate the lowest timestamp allowed1 g \8 u3 S: [7 b5 w& p4 Z
$timeout = $timestamp-$timeoutseconds;
) R9 M B, v+ L4 |$ T?>连接mysql) w. Z L, ]7 }* d
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。4 M% i9 X1 }' e) q9 @+ ? `
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% G( T5 I/ P( W4 f. B* A
mysql_connect($server, $db_user);查询数据库的代码:
3 G. g+ q9 a- W$ Omysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' |* Z& @' ^% F6 G& x6 U* d
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
K4 ^; J2 k- @('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 g: f9 y+ ?! }& z0 g如果用户用错误信息的话,这样处理。
+ T8 [6 x3 @ P# zif(!($insert)) {# D6 P; C( q& G: {1 z9 ?/ b
print "Useronline Insert Failed > "; E7 U: q2 V. C6 R% E8 n, J1 ^! W- U- v
}然后实现当超过设置的时间就删除该用户记录。
9 Q. R8 U7 B3 R4 D' x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
9 d6 g3 }4 t8 T# ^' i' Qif(!($delete)) {
; O& `+ i% L' i3 F+ K, Kprint "Useronline Delete Failed > ";; |, |; c" e! {, r! k Y1 G
}下面我们解决数据库中不同IP的问题
- D! ^ n3 {% B4 {# h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用: S' v" [) w% W. i. I6 T" b
mysql_num_rows(query);来统计用户,代码如下。
) i3 u; D4 a, {: d$ L* M$user = mysql_num_rows($result);最后关闭数据库。
) x/ w3 P+ v. n5 c$ }7 s' Y, Amysql_close();显示在线的人数。% S- r9 z( _ M: x
if($user == 1) {
( A2 U! U6 M" R- bprint("1 user online\n");! B s& o: R, U; B& u
} else {$ X. d z2 \6 V) }% y. z
print("$user users online\n");
) K, g" Z9 M4 Q}最终把上面代码写成一个PHP文件如下。
7 |, \/ K/ [* e7 z<?php7 `+ q; ` G) ~8 ?/ v
//Put your basic server info here
, B1 V' F; B' Q s% V$server = "localhost"; //normally localhost+ e$ b7 A2 @: v, K
$db_user = "root"; //your MySQL database username7 S1 h4 R" h- R) E
$db_pass = "password"; //your MySQL database password
3 Y- A0 z! {; Y+ S4 ]* o$database = "users";
: f$ C* a4 A: B" Y0 d6 [+ U$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
m7 G* F$ U/ P, X1 e// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) m* l! ^4 t9 r& Q4 W. ]" V// $timeoutseconds seconds)9 L6 i9 q' v" I0 f2 I8 O
//this is where PHP gets the time& b k5 u( e/ \* o
$timestamp = time();( }0 u% g: O# f+ s0 D h
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
' Z$ o, u! E9 A; p; D8 I$timeout = $timestamp-$timeoutseconds;. W5 ^( F: j4 t# R. [
//connect to database
* \7 z F* h: M/ P! xmysql_connect($server, $db_user);( m- m- u5 Q/ ?
//add the timestamp from the user to the online list% j' d" X( B+ s8 G
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. ]7 q7 p$ K$ M8 i+ u% u+ z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; j, O, D N7 Q6 I8 B* J
if(!($insert)) {) y0 c5 b4 _* d/ k1 M. V
print "Useronline Insert Failed > ";. D; [+ E4 f0 b& J& h3 ^0 m
}* m# k7 `; T1 a+ q9 ]# W
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.7 X$ R0 [8 n. |% C8 u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
0 ^- G4 K" k) Y( i% o3 F6 L1 d/ Jif(!($delete)) {
$ O8 V) S' h" Y! ]print "Useronline Delete Failed > ";7 `5 S( X2 c1 E9 e: f
}6 c* Q l7 T5 C% T, P; s; K, l
//select the amount of people online, all uniques, which are online on THIS page0 A4 C0 U: a8 Q. a4 [3 f: |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; A5 R/ m- i& r1 w. C8 jif(!($result)) {
# D& i! T7 ?+ V/ Dprint "Useronline Select Error > ";3 i; F j8 {" H$ i F- w( o5 }* f& C
}
$ @, s7 K8 i" F5 l) I2 j//Count the number of rows = the number of people online6 ?' c- R1 w+ j" Q {
$user = mysql_num_rows($result);
& n2 m8 u: ~0 {1 _5 n S, T1 Q//spit out the results
. R! H, @( H# C8 u4 |8 W+ L6 @8 P) X7 imysql_close();2 V) @8 F* Q3 l- W9 C
if($user == 1) {
8 v; j: F5 y9 |8 L# Z. Vprint("1 user online\n");, t" j1 V, |3 D3 A/ [
} else {. g. k3 s+ f4 J! p5 l
print("$user users online\n");7 A! B# g( N+ I T( Y7 ~ U! ^
}
6 F& \8 Q2 k1 x?>
4 S8 {+ W; X4 G+ K. e# @
# o8 ^1 l* p2 B" Y4 _5 Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" D$ l- u! {0 c1 m4 `3 Q时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。( |9 Y' s* `* b! c: h
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。) M; G& r% C4 P0 t1 }1 u: R
当然啦,这两款主机也是相当不错的。% s# |+ a4 C' s& G2 c
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
) W6 Z1 ]# s; x( h标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! y8 j8 P- c1 l- Z6 m# Q7 D O x
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 U, Z' q! K7 ^- Y: Z! \
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55" s$ X0 Z7 u& F4 I$ ~7 X7 M. ?% W6 d% x
自己加QQ去问吧。 |
|