|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
8 H7 [9 s Z8 `" G, D# @) O我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 n7 R R) o1 b0 m* Q首先我创建MYSQL数据库表。
# M3 y0 y; j- m9 `1 u6 v, r9 y% fCREATE TABLE tablename (
. T/ H3 K- O6 m+ {5 vfield type(max_length) DEFAULT 'default_value' (NOT) NULL
8 A6 H- y: F" Z7 \2 [% _}可以使用的SQL语句。! |! {3 g. c% K( x
CREATE TABLE useronline (
3 R1 `8 M" {( x9 a. h7 Qtimestamp int(15) DEFAULT '0' NOT NULL, |, b' u9 G( Y7 c
ip varchar(40) NOT NULL," i6 @* U7 r3 _ W
file varchar(100) NOT NULL,7 w: z9 D- i, g
PRIMARY KEY (timestamp),
) d' q6 R% |) BKEY ip (ip),9 z7 |- W$ b& |
KEY file (file); g) m1 n1 A8 }$ i7 {; G
);下面我们是PHP脚本,首先我定义MYSQL的信息。; {8 n6 U. R/ K9 ^; [. C! R x
$server = "localhost"; //你的服务器
P; `7 I# Y* z5 U/ V& J$db_user = "root"; //你的mysql的用户名2 {: H+ b: V( ?8 l
$db_pass = "password"; //你的mysql的密码
$ A7 ~, f% l8 \0 A. |4 L$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)2 {7 a1 {& i! b" h. @0 c
$timeoutseconds = 300;取当前时间。
% y0 w: x6 L* |4 Q$timestamp = time();上面的完整代码:1 l0 U% n" ]9 a
<?php3 p2 o: \% x2 h! ]" @
$server = "localhost"; //your server' J+ c% r! X% l4 N
$db_user = "root"; //your mysql database username, \. X' a' \! {4 K' S3 u% a
$db_pass = "password"; //your mysql database password if any/ i W) c C& U" W2 e" l0 b& U
$database = "users"; //the db name
& w0 a% I) ?( a g9 ]' o$timeoutseconds = 300;//timeoutseconds limit
/ U# o3 U) J* X- l# B//get the current time
5 z3 |$ X! S; w- q$timestamp = time();
0 E/ B; c6 Q, d' M//calculate the lowest timestamp allowed
8 q0 }, k- M6 B1 v% Y7 _7 N2 U' U$timeout = $timestamp-$timeoutseconds;- N1 I0 X8 t( G1 \4 w, o
?>连接mysql
* W5 Q1 S+ u7 q6 w# @3 D: lmysql_connect('localhost', 'username', 'password');也允许使用变量形式。' o4 C( L6 H/ I" y# \
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
3 ]! t/ u4 |1 Z( \2 bmysql_connect($server, $db_user);查询数据库的代码:. Y1 t7 o( ?5 j, |- ?6 w
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 U# K7 e6 j9 y I
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 X: R/ w, d9 U! [/ _1 H2 |1 j('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- b" P$ u6 _3 a I$ Q如果用户用错误信息的话,这样处理。
' h! f5 V5 y. o% m# Kif(!($insert)) {
1 s3 c. F1 \0 c) g1 M/ _) v( dprint "Useronline Insert Failed > ";
7 _) ]$ A8 d4 s}然后实现当超过设置的时间就删除该用户记录。7 d6 G! [) E7 L4 k: |! _
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
/ Y: B4 Z5 \$ y0 |4 `if(!($delete)) {+ Y% K; D$ o% H# ~2 |$ U
print "Useronline Delete Failed > ";
6 V/ G6 a4 R* n9 H0 t}下面我们解决数据库中不同IP的问题- O, @: K1 R O6 q t6 b( T& {
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用0 m. T9 L1 c. _
mysql_num_rows(query);来统计用户,代码如下。
2 v: \. \# T0 i q+ ]4 v$user = mysql_num_rows($result);最后关闭数据库。
3 C2 [* d5 z! n$ K" U4 [4 [& [mysql_close();显示在线的人数。
$ `# R; X5 h/ Q$ M) bif($user == 1) {" S& ? j7 ~! y6 s, P! @6 a% t" j( `
print("1 user online\n");
9 Q; q4 \) Q! j' V; W# l! `- S( w} else {/ ?/ f) j# \/ z6 a3 z# t" a$ h
print("$user users online\n");
# W5 S3 I) U1 _# T* D& Y}最终把上面代码写成一个PHP文件如下。8 c: A i. v2 d* x9 k+ i; m$ w6 f) G
<?php5 ?+ d" U9 N0 v i( a8 f; Q* I
//Put your basic server info here3 d" f2 r8 y' G6 y2 @( a3 b
$server = "localhost"; //normally localhost
3 }+ o# y; F& o$db_user = "root"; //your MySQL database username# [: z6 X6 e3 M% d; Y, ?! C* {
$db_pass = "password"; //your MySQL database password
. ~. s% } s" ^% G+ D$database = "users";- V K" @+ P+ B3 P6 @
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
@$ ]0 s3 I/ T0 }' }// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 Z) b; x+ f+ K3 K( g: x, `$ b4 v// $timeoutseconds seconds); ?1 r- n/ Q: O& N/ H4 J
//this is where PHP gets the time" ?! f0 b/ j z( v
$timestamp = time();; `9 v# j% H+ Z/ F7 P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed$ p5 M$ m' T$ b5 K1 V( k# f6 P
$timeout = $timestamp-$timeoutseconds;
' Z" Q/ @/ E. ^ v5 H//connect to database& q# P: g& u: M/ C q6 e
mysql_connect($server, $db_user);
4 k4 G3 ^% a* I* b; ~//add the timestamp from the user to the online list
: A, l) T( L) u8 t2 P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% K& D E ~2 l
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* C5 L+ L1 W! H0 K) R7 ~) z8 T
if(!($insert)) {
5 R7 `! h. Y4 T; l9 G! s% u. W: iprint "Useronline Insert Failed > ";8 b1 c" K: ?: m9 N( Q& ]
}; d& |( D, t, J* F- O
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; n. i2 [" B; B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");% f6 o( e5 q, p* T& M
if(!($delete)) {7 K3 W5 B- A; @5 F& L3 K" @
print "Useronline Delete Failed > ";
! ?9 y, [: q$ s/ _}( \- Z9 Q8 o" E: C$ a
//select the amount of people online, all uniques, which are online on THIS page
6 t9 ]! Q' }0 t9 P5 Q8 {$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
9 _% G# s4 N( {. f" L6 Jif(!($result)) {7 g! k1 M2 n( W* o3 X
print "Useronline Select Error > ";
. F- S% |; T( W' g8 {) y}& E0 ]3 d9 {1 d4 W& O* ~
//Count the number of rows = the number of people online6 `$ O. p; f( m8 ^; m- y( ?" E
$user = mysql_num_rows($result);' I$ w8 H9 y+ j8 k7 p
//spit out the results! H' V- ~8 q D0 V7 @3 I
mysql_close();
7 Z% b3 h- T3 F5 F/ Lif($user == 1) {
7 U/ f5 ~$ v1 W$ Oprint("1 user online\n");
6 v d/ y F$ p4 o0 }$ V8 l0 n' i} else {
& D& `6 o* Q) Tprint("$user users online\n");
8 Z( \8 W( Z) u! Y* C; l6 Q2 B}! R* c- n) S7 I W( X5 c1 E
?>; _& c$ W- m2 O
( e7 G9 v. S$ V/ Y- a# s
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。! ~; n" g; w# f' N2 y7 h* \
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。0 \" L f# v5 Q" K/ n( u
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
- e9 K" W) }) \当然啦,这两款主机也是相当不错的。! r& x$ ~; z% ]
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
* m9 C+ O2 i K. {0 f3 N) Q+ t标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
9 z% q5 ~5 ^) b6 U提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* o) T' |% H. T) g u, r空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
! S" n" Y* P3 ?) S自己加QQ去问吧。 |
|