|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
1 s! B( [5 Z5 L2 u3 a我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
, N' d. j: J- ] A5 w首先我创建MYSQL数据库表。
+ {8 F9 T" f$ z5 x6 Z& F+ dCREATE TABLE tablename (4 ?! g! X9 @8 W' P
field type(max_length) DEFAULT 'default_value' (NOT) NULL
0 O9 e. ?# n( ?$ [ {" a: I; k) {) k: A}可以使用的SQL语句。
* a! ^: w% ~. f. y# [CREATE TABLE useronline (
, J4 s; x# [ r1 e: p) b. C* ]timestamp int(15) DEFAULT '0' NOT NULL,
9 I( q( _9 z) v* c! p# kip varchar(40) NOT NULL,
% S- i" i- A }3 s: `file varchar(100) NOT NULL,
$ W6 h- L& d+ K4 O/ ]PRIMARY KEY (timestamp),
+ j! D/ p' P8 G0 F( Q& }+ `9 dKEY ip (ip),
( J! o8 t3 ]) U K, K/ Q7 f# kKEY file (file)0 r- L. S/ M. C5 j5 x
);下面我们是PHP脚本,首先我定义MYSQL的信息。
& C0 A1 x5 q* ?1 H( U x) u$server = "localhost"; //你的服务器
% N3 Y7 e; e1 D% A& t0 L$db_user = "root"; //你的mysql的用户名. L, ^# z; l3 @. S3 F5 e$ m1 r
$db_pass = "password"; //你的mysql的密码4 m2 c' g2 S0 F& G! v' M% Y. p
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数); `) o% N9 `* m8 ]- F3 x. N6 w6 `
$timeoutseconds = 300;取当前时间。
$ x( F2 Q5 h$ H4 n$timestamp = time();上面的完整代码:
4 w! P( A0 g: z. r" j$ T* B$ J<?php& ~ V; P1 q) G) y
$server = "localhost"; //your server
8 L; [/ w# _/ i, _% ?$db_user = "root"; //your mysql database username
' A& C1 L3 x" l2 a/ z$db_pass = "password"; //your mysql database password if any& |& V' G8 W3 e# d8 n" M
$database = "users"; //the db name( m. z9 k9 D; ?! ]: E" ] E
$timeoutseconds = 300;//timeoutseconds limit W+ ?. k0 v; G% _3 S0 Y' L( w S
//get the current time" u7 P% ~' F, p
$timestamp = time();
. t, u% N! Z9 L) S4 w//calculate the lowest timestamp allowed
/ O- d7 j1 s: o$timeout = $timestamp-$timeoutseconds;2 @8 q8 y$ t. z
?>连接mysql
6 e0 N# o4 j2 G* s: ?mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
; y9 I8 L2 M; U6 D; ]mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 u6 T* b' B K& J+ Y+ i& f5 [mysql_connect($server, $db_user);查询数据库的代码:; R4 e; C, |2 [8 R
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。2 A1 T) \+ l& ^8 o( S! l
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' n+ H' E6 t* b! H9 x7 u: s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& Q, }6 S3 a* e# x- K* J如果用户用错误信息的话,这样处理。# X) m1 C# c4 j& s9 e: e( N* E4 g
if(!($insert)) {2 C& ~" ~+ }% p; b6 i$ @5 h; V
print "Useronline Insert Failed > ";
" F! t! ~) ^7 Y, U2 }4 n}然后实现当超过设置的时间就删除该用户记录。* U4 [, M2 O8 F! k% h: N
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
% e$ }! Z5 o) n& R/ H* N5 Z, e' Fif(!($delete)) {; G7 n3 Q* }: |2 }8 G5 q _, i( {2 {
print "Useronline Delete Failed > ";. Q, F$ j8 @! h, r
}下面我们解决数据库中不同IP的问题) h, J3 u+ ?! e3 X( i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
& y& K+ G0 h% R. [$ xmysql_num_rows(query);来统计用户,代码如下。
- ^0 k' d- F# o. f; K5 C$user = mysql_num_rows($result);最后关闭数据库。
4 u' F7 C8 {& y L6 U, T# P; F7 dmysql_close();显示在线的人数。
# @, \& f1 h7 b/ ]% `% eif($user == 1) {
1 E9 a b! @9 G* X. cprint("1 user online\n");1 Y9 G* N6 ]. J5 ~! r7 G4 X: \; }+ h
} else {5 M3 i6 a" u. @- W
print("$user users online\n");
|) O5 \: a$ X/ d}最终把上面代码写成一个PHP文件如下。9 {/ S6 ?4 m6 d9 Y' D, t
<?php
" v: m( Q9 |+ s//Put your basic server info here
8 f k! X* U; ]3 B$server = "localhost"; //normally localhost
# R+ [' K7 {: K$db_user = "root"; //your MySQL database username
5 z( i' }% m7 I3 B7 b7 @7 x7 m$db_pass = "password"; //your MySQL database password( I' O9 A. |( I) s# J! G
$database = "users";' y8 V9 y$ p) r% @- G; ]" Y; Z
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, X7 ~5 K* ^% r0 u: r0 \" h# c0 p
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ H& |3 V& I& G$ w, x
// $timeoutseconds seconds)
& E9 `, v) K# c) z, `//this is where PHP gets the time
: Z0 h" w+ }2 O" a- b; y; J5 s$timestamp = time();3 J# H1 h- t, q3 ^ m: k1 J8 x
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed3 b6 W! F/ W7 ~( C/ o4 G
$timeout = $timestamp-$timeoutseconds;
" `- y3 _) e; Y0 C. w% @1 \- p# Y) K, x//connect to database/ c) ?5 H8 U1 l0 X& R
mysql_connect($server, $db_user);! j! L1 s, q1 t1 R6 B( S
//add the timestamp from the user to the online list
6 ^* s6 o* Z" y# \$insert = mysql_db_query($database, "INSERT INTO useronline VALUES: x9 `* T1 U! n! l: K* S
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 [, m; j% s0 t* P/ }: {& p b
if(!($insert)) {
3 [# g+ h" x/ l, V) r" eprint "Useronline Insert Failed > ";
- |- ^) a9 r+ k6 V! x}
+ I% I" P/ v& {0 p6 ] K//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; d# E2 F' v* @/ ~" Q3 X, S
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");0 S; _* g2 R" L& c- O5 H1 f& F
if(!($delete)) {
- S! T1 V+ A# q2 \7 t) d( bprint "Useronline Delete Failed > ";% r. X) T- d! X) X; |+ A
}: J4 \% ^9 T: L. R9 I5 c! t
//select the amount of people online, all uniques, which are online on THIS page$ y- K2 {4 @; r" t2 g( ~
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ Z$ x- m) F% m- n, ^/ I
if(!($result)) {8 }9 I4 B9 l0 @4 c
print "Useronline Select Error > ";% a+ `& [8 O& P1 d! @5 ~
}6 A0 l$ c1 @. `$ Q" ^8 F, {
//Count the number of rows = the number of people online- ?- M2 ]; f* ?$ W N
$user = mysql_num_rows($result);0 J% V% L8 v6 ?& C
//spit out the results
m+ Z& z$ c/ o$ S& umysql_close();0 v3 H8 J% L E @" a- m7 x s
if($user == 1) {( `' G. r" K6 q# o; Y; U, Y$ `1 `9 M
print("1 user online\n");
* o1 L3 e7 S* r; g; U ]} else {
) g, I( t, S( R+ S% @print("$user users online\n");
2 ?% j. c1 d0 M' @5 e$ z% [* u}3 j9 J3 _) g* C1 f
?>
4 A1 L7 L1 K* z% ]* h! I $ A ~: b, q4 X3 B* h7 r2 ^
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。. ~- K: T3 z1 s
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。: j3 E9 |+ R% ?. ?0 N
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 F! {8 A1 n3 M) K当然啦,这两款主机也是相当不错的。6 k1 Y; J: r: \6 r8 E' @
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
# b: p' M: s$ g+ C5 b: p标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
7 ^6 `# [1 L9 [" H' N提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! L, X! f+ Z/ `) M1 C
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=559 h& w# B4 U4 W* {- ~
自己加QQ去问吧。 |
|