|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!1 n( v6 l5 `# I4 O9 x/ x/ j
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。/ P* k# F. A. K- e( n' s
首先我创建MYSQL数据库表。9 X- n3 l! U: Y% B# ^
CREATE TABLE tablename () e- e; @- C5 z3 E# x5 l" B
field type(max_length) DEFAULT 'default_value' (NOT) NULL
, F: S( p' L8 |6 Y1 G}可以使用的SQL语句。$ k r- U! n: c/ M# ]
CREATE TABLE useronline (1 g8 ^& a* C# g* ?+ b3 l
timestamp int(15) DEFAULT '0' NOT NULL,3 m6 B' D0 z8 O c- B$ [
ip varchar(40) NOT NULL,
7 T: Q; {8 q z7 ~2 [/ Afile varchar(100) NOT NULL,
9 p; h0 u! D" \& ^( F. ^$ rPRIMARY KEY (timestamp),$ |4 w- g% F& C8 g! I8 J
KEY ip (ip),- Y9 s% X& k% H5 u! A
KEY file (file)6 A/ D$ B+ b& L9 v Z2 X F9 ?/ x
);下面我们是PHP脚本,首先我定义MYSQL的信息。2 [" L% S) x) d z6 S6 O. B+ y2 {! c! C
$server = "localhost"; //你的服务器6 U3 B9 X- A g' s# D2 b
$db_user = "root"; //你的mysql的用户名7 X+ H( ?4 \6 O A+ Y
$db_pass = "password"; //你的mysql的密码% `: B3 R5 T% f/ q" s6 [3 K- `% P
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) ?4 F1 e$ `6 w2 m4 Y
$timeoutseconds = 300;取当前时间。
; K. Z7 a, Y! q$timestamp = time();上面的完整代码:
B- Q7 G6 y; ?* t8 W0 A<?php
/ P; B; m8 Y+ ?3 D/ j4 U }# `$server = "localhost"; //your server) [# ^' W8 \: t- N
$db_user = "root"; //your mysql database username4 y5 P1 {: m" C* c
$db_pass = "password"; //your mysql database password if any4 C: U- l D( b6 L/ [; t5 S& i. F( V
$database = "users"; //the db name1 n* ?8 D. Y3 h3 U
$timeoutseconds = 300;//timeoutseconds limit
. t6 I. b& L" S2 t//get the current time0 E& p3 {5 h4 x6 M6 Z! N. o
$timestamp = time();
3 r! e+ O6 `0 l. j. {* ^9 Z//calculate the lowest timestamp allowed
+ h9 N; z) d$ h* o( U& i$timeout = $timestamp-$timeoutseconds;
8 `. G$ u) O+ H& W7 f6 \8 P$ x?>连接mysql4 u1 z' f, \ e; u+ L
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 s% R" B: g5 c, emysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接) [0 Z& i9 D$ D& F7 X
mysql_connect($server, $db_user);查询数据库的代码:6 p) A+ Q2 f, }$ z9 D9 s/ ~
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' k2 R9 E5 y3 k- X
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: N+ E4 p8 v( M9 d/ s6 q, A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& A* A8 o2 l1 U. z9 u如果用户用错误信息的话,这样处理。2 _9 L4 M/ W! y: i1 w' [
if(!($insert)) {
! u2 J5 F! q& y) [) gprint "Useronline Insert Failed > ";
/ _/ ?* Y/ B( Y2 r}然后实现当超过设置的时间就删除该用户记录。
, b& r! e) p8 e) Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, I: D+ t7 x6 g! {; f+ o) }' \, Fif(!($delete)) {
4 ?0 [) Z; n5 Q+ w) f9 g/ Z8 m: L! mprint "Useronline Delete Failed > ";- T+ D) f) b* ~1 Y% T& `
}下面我们解决数据库中不同IP的问题
1 z; {4 J: @" w$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ Q8 c! _3 _/ f
mysql_num_rows(query);来统计用户,代码如下。
% U! Z9 l0 [3 |, k4 U5 ]$user = mysql_num_rows($result);最后关闭数据库。
1 a. r' x c" r: l) Y. B) Emysql_close();显示在线的人数。; L" U% I( I$ z5 O
if($user == 1) {) M) f% }; L0 m) W: S
print("1 user online\n");
( D" A6 }4 X* ~} else {
9 x4 Y6 _. |9 Y3 H& T$ Jprint("$user users online\n");
# l2 H0 n/ \' q. A# Z1 N U}最终把上面代码写成一个PHP文件如下。* E' v" T d j( q) }
<?php
6 X5 K$ N. ~: T) S" M//Put your basic server info here y! ?! T. y( G3 R9 @, u* V H) m
$server = "localhost"; //normally localhost
7 \3 z) Q# f$ V" |# s% m$db_user = "root"; //your MySQL database username
; J% J+ V9 ?2 r2 U$db_pass = "password"; //your MySQL database password3 W9 H% u/ h4 u* T
$database = "users";
4 @* D* ^& {; }$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; I2 J$ B9 [- I, b' V
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 T, M( c: c" U
// $timeoutseconds seconds) `0 Y0 S* o% ^8 a3 n
//this is where PHP gets the time* E8 @/ e( ?; X! N1 b e
$timestamp = time();& v) R6 x$ }) v$ G
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed+ g v9 A: V- ~% d$ K# v
$timeout = $timestamp-$timeoutseconds;
; {: [: u3 V: B//connect to database
4 n% S/ _5 r1 ^7 Mmysql_connect($server, $db_user);
. U; z0 U4 a! L" k0 t//add the timestamp from the user to the online list0 N: E: W% n* U: \. ?/ Z3 e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ |2 ?$ B* |! U('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 W" }# o; H* p' ?6 B/ zif(!($insert)) {
( h9 \9 j5 I. e9 c5 e% jprint "Useronline Insert Failed > ";0 i% g k/ J9 Q m5 @) Z
}2 ^; X) e& d" ^ T6 o- T- |
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
) k% y; k+ V- z( p5 N$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 I' a A! B% i3 L$ v+ L4 l
if(!($delete)) {
6 L/ |( y$ G+ I2 m& j+ u% |print "Useronline Delete Failed > ";" {% w8 a' j4 F
}5 H4 @ n+ ]% @6 j! E' y" {
//select the amount of people online, all uniques, which are online on THIS page& r. D4 \% }. Q; p6 B% |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");' F+ |5 h1 D! Y" z5 i: B) A
if(!($result)) {
/ [6 K( e8 }7 T3 P, d7 f" y, fprint "Useronline Select Error > ";, }/ _" k, Y/ F- l: h) A1 E* h- g8 `; A
}" z" L# P) U0 b( C( w* D+ j! ~
//Count the number of rows = the number of people online: S2 i1 Y. ~1 x. L* v. n
$user = mysql_num_rows($result);
# I1 r" Y" |3 P* g, g/ y//spit out the results5 K3 g1 J* k9 n
mysql_close();, @1 Z2 z m" [* }( y* a+ l
if($user == 1) {. {4 ?3 f' e3 v" V$ |1 e `% d
print("1 user online\n");' E6 h/ e2 G9 V+ W- ?1 C
} else {
+ H9 M: {& ?+ ?print("$user users online\n");6 |+ |+ y. {) T0 i0 G: D4 x T
}
|! X2 N3 V8 w?>; Z& A- f0 L+ m. f, j8 q% B
0 a$ X9 `. g4 q9 m
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 {# x9 R- N4 Y( a( b; V. r) ^' n, h时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# f' z3 a8 M" j( L5 v. x
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。# V7 b. E- q3 P6 T
当然啦,这两款主机也是相当不错的。/ }+ m1 t0 n9 O/ Y. x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& k& r3 t! M3 \2 A* V. o) B标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
( `; Y9 `' w! Y, @+ |提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
4 J8 m( l3 g6 ~1 J空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
/ ~! Q6 M+ ~ g( s自己加QQ去问吧。 |
|