|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ M* [( m- v( l& j' }6 j w
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
8 B2 p* m6 \% {# r& ` E# T, n' t首先我创建MYSQL数据库表。
# r7 u0 m7 o9 t. mCREATE TABLE tablename (
7 l2 Y, w$ l% U, D9 ?field type(max_length) DEFAULT 'default_value' (NOT) NULL
0 R7 U( E1 f0 B& C) c}可以使用的SQL语句。
) z G2 y% s2 _1 X4 G/ H! {& \; Q! RCREATE TABLE useronline ( i9 I! k0 E9 s8 q
timestamp int(15) DEFAULT '0' NOT NULL,* J2 _5 M, D( m$ ?( _
ip varchar(40) NOT NULL,) y6 s5 U4 Y. B6 {7 w9 w
file varchar(100) NOT NULL,5 |7 {2 R5 q' a, ?
PRIMARY KEY (timestamp),
# c9 U @# c, ]: GKEY ip (ip),
+ s: w( q0 N6 C( _ R: L# hKEY file (file) D$ d0 t) P' L2 }. H& k
);下面我们是PHP脚本,首先我定义MYSQL的信息。
* ^8 D* U2 ? \* H+ v, A$server = "localhost"; //你的服务器
. W8 C% X ~; ]% ~$db_user = "root"; //你的mysql的用户名
' x' A3 \- H+ |. O$db_pass = "password"; //你的mysql的密码6 b3 T! P5 e. N2 b2 b
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
& o. { y" _/ [$timeoutseconds = 300;取当前时间。
9 G- M: \) U" S g$ Y# D: a1 A- b$timestamp = time();上面的完整代码:
: A6 s6 d8 z4 u9 B, X<?php
0 r. B' r9 j4 \: Y% c E) ^+ X$server = "localhost"; //your server9 C/ e- p* R- }, @1 O: ]5 L
$db_user = "root"; //your mysql database username
L j$ G! A: C5 E: E q$db_pass = "password"; //your mysql database password if any) Z' s2 X# U- a% ^, B
$database = "users"; //the db name# L$ y9 z- L: R+ y4 s
$timeoutseconds = 300;//timeoutseconds limit
7 }) b% d6 ]/ H1 |& H* Z6 I//get the current time [0 y) d8 E7 L3 L
$timestamp = time();# M% T8 I# }" q! f2 Z( O
//calculate the lowest timestamp allowed! R* [0 y. t6 M* N9 f
$timeout = $timestamp-$timeoutseconds;
! ?8 i! k. F8 l- R/ ~ n?>连接mysql
5 L v! ~ p6 L3 U) @- y" ~mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
" o! _# U+ J5 G/ _* l8 Dmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接5 G0 F( c" n3 q; L9 o6 X
mysql_connect($server, $db_user);查询数据库的代码:! y9 j7 g% Y9 U' r# y
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' v: N# j! g. Y9 T5 e9 X. Z8 T& e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) p: L, u t. L4 t* D' L2 c; l, B4 ]
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( O# K/ s9 d0 R& k1 \
如果用户用错误信息的话,这样处理。! u& p5 w B. D- N* |! |
if(!($insert)) {* F) }; ~( q' k# o0 ]
print "Useronline Insert Failed > ";' L9 r. v6 G7 v
}然后实现当超过设置的时间就删除该用户记录。
0 w. n2 v# ]. L# A; H' q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。3 D7 A3 d! s2 D. p& i/ b9 D" R
if(!($delete)) {7 s1 T# _4 E1 v3 N
print "Useronline Delete Failed > ";
2 A; C2 ^' P) ^}下面我们解决数据库中不同IP的问题
- E' c6 h0 c& y4 B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
& q6 y; X3 O* J. R/ zmysql_num_rows(query);来统计用户,代码如下。
( M4 O' x8 B- _; W/ R: x. n/ E$user = mysql_num_rows($result);最后关闭数据库。
& ]; W$ p: s0 j$ ^6 J& hmysql_close();显示在线的人数。
# m6 U* R x& U: Z5 t P# c" jif($user == 1) {1 A9 G. x, W1 @. M
print("1 user online\n");; E% s2 [0 `1 G! Q7 t
} else {
/ a0 ^- T/ w0 ?' Y+ F, G" y1 sprint("$user users online\n");
; \. }/ M5 e5 d* m}最终把上面代码写成一个PHP文件如下。
; i$ C/ C- G1 {& B) ?# F<?php
8 {8 I7 ]6 r3 O//Put your basic server info here
/ A0 L* X8 o0 s+ U$server = "localhost"; //normally localhost
. E3 u( X6 } {9 u1 Q, ~$ E, b$db_user = "root"; //your MySQL database username9 P4 @% [9 v8 D! Z X! O6 E
$db_pass = "password"; //your MySQL database password, q, x" ~: u- d' w+ x' }; o
$database = "users";
5 M( J5 z' K7 N* B9 b2 U; T" x: A* [$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3 ]8 |! N4 Q0 ?// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last7 i, k1 [3 T3 n1 [
// $timeoutseconds seconds)6 j9 G) D% g/ R+ ~# t3 y
//this is where PHP gets the time, {8 [; w0 d1 t* Y: D) t' u+ Q" [
$timestamp = time();
' P& v, r; ?% A; f# A//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 j5 g: n0 Q4 o2 F: u. ^# f; O5 e$ r
$timeout = $timestamp-$timeoutseconds; A! [2 u( ^9 o2 ]. Q. \7 w
//connect to database/ X" y+ M' y4 M! d& U) p8 F% ^5 y
mysql_connect($server, $db_user);/ \; H' x( S) ?6 i
//add the timestamp from the user to the online list
4 P) |5 j& ~. N$ s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' O* T6 }0 V w: I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. f; [* D/ [- w; l7 T' E- w2 Cif(!($insert)) {( k$ O2 z: ?1 B4 J, B* ^! }
print "Useronline Insert Failed > ";
% W- K. F' \! l/ u: w}# M- G E* Q6 x+ _5 B2 r
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; K# U3 G: j' \# I% m$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");. ]: Y7 a g: h2 T/ Q
if(!($delete)) {
, |$ ~& L( ~+ B8 [) ~; x8 vprint "Useronline Delete Failed > ";
" ?& z% B2 A% G1 n# _9 p/ k}* O7 n' a$ I, H
//select the amount of people online, all uniques, which are online on THIS page
. v1 C/ F0 V2 D, M- v$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
* n5 B+ e2 L, U4 zif(!($result)) {5 [/ S+ @. ?6 m; f
print "Useronline Select Error > ";
( |+ q- z3 B* {' H. P7 D0 s7 C2 y4 k}
e6 c+ |$ H& g$ v& `' j5 F" ?//Count the number of rows = the number of people online
6 Y5 f' q z8 y" `/ [4 V/ F7 B J$user = mysql_num_rows($result);
6 ?# [1 e2 {. h. m9 \& z O$ V//spit out the results
1 v2 B+ T: {& ~mysql_close();! [& x8 B* x% Y" x9 u
if($user == 1) {
: W5 x I; K$ U: G2 P m3 t; J9 Z6 r0 lprint("1 user online\n");
; X4 G; i: E3 {& X" g0 b} else {
& N k( d. B, |( L: i# m# h7 ^1 Tprint("$user users online\n");7 _( c1 }9 u }( e: @* A
}$ }2 L% G! d- v4 b0 W; N* Q
?>4 }/ Q" N W8 C) N9 i- I' l
u+ F8 h+ N, E w% F
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
# \% ?4 i, ~ G/ c) |' g8 ~$ A' p" A时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- u+ D/ l4 Y! x' M, @. T" }8 l我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& A3 l3 \" N+ X9 x) |* o当然啦,这两款主机也是相当不错的。6 M1 |; v2 R9 R" W
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& J" ]- ~. q U! A! \+ J
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: ?+ l' e1 S5 J+ r3 R- w
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ) o1 ?9 _, @+ ~
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% i1 w% g6 k8 D; |' j9 U+ P
自己加QQ去问吧。 |
|