|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ _, U F( b/ r+ Y" u% k
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 y9 n* b! R9 Z, R. c
首先我创建MYSQL数据库表。6 ^2 c* V. ^: n- Q& {1 p
CREATE TABLE tablename (0 X: m$ z n# C/ M b. c
field type(max_length) DEFAULT 'default_value' (NOT) NULL
$ f& Y" x3 t' T ~}可以使用的SQL语句。$ ?7 M+ ~2 q) _6 `
CREATE TABLE useronline (
& Y6 S, o6 {1 `5 ?: p& L: w! J% G. Ttimestamp int(15) DEFAULT '0' NOT NULL,
/ g! e) M# X6 |ip varchar(40) NOT NULL,
1 ?: Y, V5 j1 q7 k0 }file varchar(100) NOT NULL,+ y2 A3 V2 T. @
PRIMARY KEY (timestamp),
- D, e& U7 _) XKEY ip (ip),1 @3 _# N; Q- D0 V# L! t/ G2 d
KEY file (file)
" O5 p, x; ]0 a);下面我们是PHP脚本,首先我定义MYSQL的信息。1 L; N# \* x# }$ v
$server = "localhost"; //你的服务器
) X1 j0 Q; t+ q- g" k* H1 ?0 [2 ^5 {$db_user = "root"; //你的mysql的用户名
& f6 h/ A+ K( ], Z! C$ L$db_pass = "password"; //你的mysql的密码
3 A3 P- [% o6 r! a$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 t) r% |: z9 O6 k& c8 @$timeoutseconds = 300;取当前时间。
# L0 e8 L8 i. V$timestamp = time();上面的完整代码:' _1 x% N" [ u9 h+ _+ m4 ~8 v
<?php
; v) W1 ]. b+ z) c6 H$server = "localhost"; //your server4 k& \; d" ?9 j( W8 q# G8 O
$db_user = "root"; //your mysql database username2 {7 @ y, D1 r/ t) j' m. r' V0 h
$db_pass = "password"; //your mysql database password if any! r" P: Q( q" i
$database = "users"; //the db name
* _" J* h" R( l- [$ r" T& {5 Y- j$timeoutseconds = 300;//timeoutseconds limit; ^7 s) K; ]- d, V% L; }& W; a
//get the current time
% a8 P1 {8 U) A' u& z& |$timestamp = time();
8 D4 \& u6 c7 d. @1 H2 i/ U7 }//calculate the lowest timestamp allowed
4 X6 p2 c+ {+ o! a# g$timeout = $timestamp-$timeoutseconds;/ C+ J. d* t6 v" R1 y8 I, r8 [
?>连接mysql8 i( l& `. X! I
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。% U f. Q, I- g1 s/ j
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 a9 a$ \' E# n: C* ?mysql_connect($server, $db_user);查询数据库的代码:
( @* u: s- v& K% m% Tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
9 ?+ F9 |9 a! }$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 Q% g2 A; k) ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; x Z) U" g5 `# D如果用户用错误信息的话,这样处理。8 `0 z m9 J1 ?
if(!($insert)) {. w& @/ f e+ V2 i* T; G/ U3 I- X
print "Useronline Insert Failed > ";8 T* D9 u- {, D7 V6 Q# Q& D$ ~, D: v
}然后实现当超过设置的时间就删除该用户记录。' ?, U# J; R1 b8 o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# K! y% b" y3 n0 Zif(!($delete)) {: g; |* M0 e. n
print "Useronline Delete Failed > ";
# p4 i1 G+ n8 I: k}下面我们解决数据库中不同IP的问题
3 I; j8 g8 @- l7 H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 \) p1 r$ o+ imysql_num_rows(query);来统计用户,代码如下。$ T' H# ~9 r5 r& }4 x
$user = mysql_num_rows($result);最后关闭数据库。
. X' R/ \1 G: |" o6 Fmysql_close();显示在线的人数。1 ^& X) J' u! K" T. K
if($user == 1) {5 @9 U# S; v; R7 X( r1 B
print("1 user online\n");
- |. g8 B3 M4 l3 U$ Y C8 d3 \} else {* Q9 b0 s" S6 }
print("$user users online\n");8 F2 N/ V, o2 b4 u+ }
}最终把上面代码写成一个PHP文件如下。- V8 l' n2 `6 N; u* J @
<?php- G0 \& j; L+ M. e% P' r, k& E
//Put your basic server info here
. Q6 B" d$ [( M$ l4 B3 ~' f$server = "localhost"; //normally localhost
2 L5 q; Q6 Q C8 h$db_user = "root"; //your MySQL database username
# `( a5 u! _! F7 Z2 M$db_pass = "password"; //your MySQL database password
& B( m# L+ \( E! \ x8 w+ h# {$database = "users";0 k7 C$ Q: l; [9 X& ^% M
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are: k: g. i9 V. ?) V& V( F- a
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 q$ b, `, k7 \( P5 m// $timeoutseconds seconds)0 Z1 F* @0 d! h, }2 X( y3 Q# u
//this is where PHP gets the time
: N) l- L0 s8 \- d$timestamp = time();
4 }- N' R7 k* ~3 p9 ?//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
' y- T. U' e/ p" R8 I$timeout = $timestamp-$timeoutseconds;
) S$ m" l( X! |4 r: X//connect to database+ {0 t9 |" ?0 y! d% M8 k
mysql_connect($server, $db_user);" X" O; `% E, y9 x2 t/ G& a
//add the timestamp from the user to the online list5 Q: C0 f1 K7 Q, ]( \3 d
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( H ~1 k5 B; f9 Z( P/ }# T& W('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 E& V. _: a8 [% u
if(!($insert)) {
: ^1 N! T4 ?9 `4 K9 R; I$ x" ^print "Useronline Insert Failed > ";9 S$ B8 }/ ?& P" u* r
}
6 W2 g6 V3 i3 B+ E+ n" N//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
2 H0 V- ?1 T7 K7 L7 z, G0 X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
+ e% s- g9 a/ F Rif(!($delete)) {; x- n4 \4 d* q, t
print "Useronline Delete Failed > ";
+ W5 X, ^& g# [/ S; D/ R& E1 F) {}
( Z1 p/ `: n% K& m//select the amount of people online, all uniques, which are online on THIS page. ?3 C/ a- @' o7 r! j1 a2 j
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; p/ \) C, T& I# ?8 k& ^if(!($result)) {; n$ |3 \( s6 P
print "Useronline Select Error > ";$ S. l) L. ], T& d: b" V& T1 b4 H# f
}8 @# e5 N0 N+ Q- J* j/ W
//Count the number of rows = the number of people online
$ L, s& I! X7 b4 f k1 S' v/ Y' ^" `$user = mysql_num_rows($result);) a5 B+ ]2 D" H! h! `5 a# Q
//spit out the results
( f# r# d0 A! z8 d; S% imysql_close();1 |+ S- i Q( e) [$ }2 n0 p
if($user == 1) {
4 l3 o" n. z/ m8 f7 N' Sprint("1 user online\n");9 L$ h9 n3 a2 B' R U6 Z& O
} else {( ]; A3 U" O) u* N3 [- t
print("$user users online\n");
3 J/ [: J6 s# c$ S7 w7 d( a( c! |}
3 u" M& N& u; m: n/ S8 f?>
/ n* }* h! X9 h- g% C6 p' F- O2 w 5 r Z/ w( h' Q& C& V
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! K; \* C6 L. T$ Z5 z时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- G% W0 O: r2 c8 |1 l我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
, C3 {$ Z8 i$ o7 a7 L8 v4 E9 @当然啦,这两款主机也是相当不错的。$ ^; S6 Q$ G# q8 G& v* F3 ~/ O
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
B7 _, @- A% R- ^1 [5 Q标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 P9 i0 Z: R6 G5 ?
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 6 i% Y' f0 ~, U- F; [& p/ S
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
0 ?% L/ w- L3 i, M8 o9 p7 U自己加QQ去问吧。 |
|