
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下! d- U: a) o C% ^9 V" q! Y
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
. v3 u+ u, P0 U首先我创建MYSQL数据库表。
9 T, S$ F" z; B: k% z. R3 H- vCREATE TABLE tablename (/ J4 z: T2 D1 y9 Q8 g# H
field type(max_length) DEFAULT 'default_value' (NOT) NULL) M& A' N) A5 M5 g" N+ C+ p
}可以使用的SQL语句。7 A! o" G0 S' ?3 T- ?
CREATE TABLE useronline (
9 n" o& g0 w5 I: Z+ S$ V& x8 ktimestamp int(15) DEFAULT '0' NOT NULL,
* y( U7 P% q- M9 I# cip varchar(40) NOT NULL,
5 N, p8 r* o# s, |file varchar(100) NOT NULL,, t& f, g3 x' c) H1 g0 z* U
PRIMARY KEY (timestamp),
* A# |. n J3 s! W BKEY ip (ip),
E# _7 V* V1 A# t. @( p& c. u# lKEY file (file)7 w. |4 z8 m- I
);下面我们是PHP脚本,首先我定义MYSQL的信息。
* K( w, \) L3 j3 R* o" J$server = "localhost"; //你的服务器7 r" i5 R# `* X( Q6 [0 H
$db_user = "root"; //你的mysql的用户名
! d& `- S5 b3 K7 W, s$db_pass = "password"; //你的mysql的密码
2 ], g0 c) M3 e- H6 D$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" ]2 S* p% j9 ^' S/ Q1 Z
$timeoutseconds = 300;取当前时间。( U5 l( V) ^" `6 u$ X
$timestamp = time();上面的完整代码:% }6 b; p; O7 Q$ m7 I9 G3 l
<?php' p3 G+ y- _1 @$ c
$server = "localhost"; //your server7 U5 n+ c! L0 @* x4 G$ ?
$db_user = "root"; //your mysql database username4 s0 A7 }( K( W( B; O
$db_pass = "password"; //your mysql database password if any* ?5 w1 D" G8 s4 @
$database = "users"; //the db name a3 W3 N( z/ H, t3 p% `2 {7 t. U
$timeoutseconds = 300;//timeoutseconds limit$ w0 L) A5 ~" w- @, y% T0 u
//get the current time; }! r. S+ b+ D
$timestamp = time();: I3 O+ w' [0 i$ I9 _3 G
//calculate the lowest timestamp allowed
( F4 @' @4 f/ [ X1 [$timeout = $timestamp-$timeoutseconds;
8 X0 I2 ^9 N3 i$ e?>连接mysql
# {- n, [% }+ t* zmysql_connect('localhost', 'username', 'password');也允许使用变量形式。7 u6 @/ j' B+ |/ b7 }9 w
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
& h& |: }, x' w. Mmysql_connect($server, $db_user);查询数据库的代码:
2 p; v/ r1 d. r% O# ^5 Q1 _# Umysql_db_query('database', 'query');我们只要有访客就要增加一条记录。( ~, L, r9 ?; Z/ G
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; b) X& a5 x% d7 X) A3 r$ r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( w0 n, M2 ]9 a7 @4 H4 J如果用户用错误信息的话,这样处理。$ A5 r$ m5 m, w8 O7 H2 I
if(!($insert)) {
8 C0 A; }3 l( ?: @5 L0 I |/ g. |: Eprint "Useronline Insert Failed > ";
9 x! Q2 u5 e6 U# N. \% I, @1 N}然后实现当超过设置的时间就删除该用户记录。
- u. i! k% q6 F% @* U" j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ {/ N/ a4 F0 I4 e0 ]2 s* Q- c5 T" G
if(!($delete)) {
9 A/ @% C2 n/ {# Z9 \- z: h/ E' j) wprint "Useronline Delete Failed > ";
. v( `/ I, W0 d9 C* Z}下面我们解决数据库中不同IP的问题
4 a6 _1 Y8 l# P$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用# N' }+ M w e+ R& w
mysql_num_rows(query);来统计用户,代码如下。# K% k2 j- `) n% p& w# F) H+ V
$user = mysql_num_rows($result);最后关闭数据库。& {& F# o% [, u6 ?/ h; v3 C2 x
mysql_close();显示在线的人数。
1 T7 N& i/ ]- O- T' L: Bif($user == 1) {" Y/ {" j; S; m7 U+ m$ c+ ]
print("1 user online\n");
" ~ b8 f6 s! L1 k} else {4 g+ }: h* d- T1 P9 p2 a$ n
print("$user users online\n");
- U' g9 e5 c. o}最终把上面代码写成一个PHP文件如下。
5 F3 g7 p& t* L( X9 f3 B% {<?php
2 T# ^: I7 U; _" l//Put your basic server info here
) ^" h( J0 @: }/ H) B; H$server = "localhost"; //normally localhost; y! f1 ]9 `3 |7 b" f* r
$db_user = "root"; //your MySQL database username
( T. d' _& d7 S6 {+ z5 n! W$db_pass = "password"; //your MySQL database password6 t2 `! |0 v+ Y+ I4 Y$ A/ W! i/ i
$database = "users";; U, O! H3 b# e) G/ J
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
8 a" q5 a5 S6 e5 V$ r3 {$ Q* u// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
1 M6 v8 I8 {; W+ L// $timeoutseconds seconds)- J$ L+ _% \- x$ `+ X# w* q% }
//this is where PHP gets the time
4 _! G6 C! f# w& _$timestamp = time();
% z: M7 I3 S2 a//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed \3 s8 r2 n {0 } ^ v: m
$timeout = $timestamp-$timeoutseconds;
7 m/ k2 s( r: Q& N8 W7 r+ ?* W//connect to database
/ p2 f5 N& z5 @0 Q/ Rmysql_connect($server, $db_user);' O% O' _5 I7 {' C4 ^
//add the timestamp from the user to the online list
2 R; U' v+ ~( P! }+ }$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 r, P2 g, l% i; r$ f& K+ ?, b('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); @8 P7 o4 J* I
if(!($insert)) {
2 @8 Y/ Y5 O o7 cprint "Useronline Insert Failed > ";
+ v/ S5 s* M1 Q$ |0 B( _5 _* U}
" l0 n8 z& M# o& ^# M! P: l//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 ]9 n5 X5 G) e8 @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
& [( ^9 [5 o' Y% G8 R' qif(!($delete)) {
/ o! p0 J# [4 l I& C( e5 ?# k/ E4 o6 Pprint "Useronline Delete Failed > ";
% s7 n( j1 m* K0 o# a3 M" p}
8 T& i+ w; W$ ]: X! s' Y//select the amount of people online, all uniques, which are online on THIS page" C7 u0 z, |5 K `
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 x3 v+ r1 E% [* G! X
if(!($result)) {! s+ n1 @0 |' G
print "Useronline Select Error > ";" J& U+ V) c8 Q& l w0 s
}; I( E3 s9 C l& p
//Count the number of rows = the number of people online* \( n% H8 V; y4 d4 V6 m, R* H) N
$user = mysql_num_rows($result);7 L# c" z( P0 k: S2 \( ]
//spit out the results" e. G M: O: c, H0 D \
mysql_close();+ {0 A! u2 P. Z$ h
if($user == 1) {
/ G0 F W4 ?! v4 T/ n% [4 |* Tprint("1 user online\n");, z7 B8 q( j+ h. I
} else {, [8 J6 j6 {# F. ?8 @1 K# E8 W
print("$user users online\n");" P- x& v# c4 N9 D2 z
}
3 v' M3 \$ x( B( v1 g?>6 P g' N" F: a# X M4 w# {

. Y& J. ^% J. U( ]# ?/ ^以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 V# }) t! t5 R6 G! L) ]
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
* R1 N( q) P% I; Y$ Z我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。) Q. t" t# l- T" T( W2 \
当然啦,这两款主机也是相当不错的。5 J) _+ ?8 L6 U% ?9 H
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" |( N W9 p" ^; X标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
' J5 v2 @- l; P' E. A3 V& B提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ + ]/ f% w8 E$ y" e
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ U" O+ G1 {6 B A
自己加QQ去问吧。 |
|