
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!" _1 b$ c w4 C2 _5 `% t# i6 ?: v6 Q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 s% j2 u7 M9 T. o# ~1 s [
首先我创建MYSQL数据库表。
2 I7 w3 c9 y, `2 l9 P3 }CREATE TABLE tablename (. Z; f, j' P4 E1 v3 J+ j
field type(max_length) DEFAULT 'default_value' (NOT) NULL# m3 p; X# Z, Q
}可以使用的SQL语句。
4 M0 u' ~+ L4 FCREATE TABLE useronline (* {$ J- U7 q2 m3 h) N2 u; D
timestamp int(15) DEFAULT '0' NOT NULL,9 X3 k1 f8 y6 {: S6 B8 O7 m& C
ip varchar(40) NOT NULL,, g0 T9 e$ P2 V+ ~1 l) L
file varchar(100) NOT NULL,/ l! m+ G, W+ b& [8 z
PRIMARY KEY (timestamp)," ^7 B5 y# r& i( c6 B
KEY ip (ip),. @- S5 r* y; l" o) b0 D: _
KEY file (file)( P/ m3 c# a( H- X
);下面我们是PHP脚本,首先我定义MYSQL的信息。8 w D# ^6 @4 \
$server = "localhost"; //你的服务器
! i5 d- r' H: {% y6 N7 S( c: G$ H$db_user = "root"; //你的mysql的用户名! I0 x/ H* W3 Y
$db_pass = "password"; //你的mysql的密码) a5 U2 X% J) A
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)$ m+ k3 c# i; k, A# I& f; X
$timeoutseconds = 300;取当前时间。2 O, A. q$ |! c& {3 p
$timestamp = time();上面的完整代码:* v: A# ^4 T8 R3 T
<?php
7 d6 d, e& }; @, F/ i% r$server = "localhost"; //your server
9 [5 W/ i2 g) w: i; ~$db_user = "root"; //your mysql database username# B* Y! d0 [" ^6 N1 e. n, B
$db_pass = "password"; //your mysql database password if any8 C5 _# m+ N3 H0 x1 Q% L/ j
$database = "users"; //the db name
) _1 l& q: O4 n( p! X& x+ }$timeoutseconds = 300;//timeoutseconds limit; ~6 W. W0 g) h7 A4 I& V3 s& K
//get the current time
/ A" r! ?( G$ u$timestamp = time();
; M, v+ e0 F0 B, `. t& V0 @" J//calculate the lowest timestamp allowed& l- `! I3 [0 R5 |
$timeout = $timestamp-$timeoutseconds;
0 z! n( Q: E# Y?>连接mysql7 W) x! A& [! m0 B9 X
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。! x( h# l/ i: ~( g# H; m- G9 P5 c
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ e' B% x& H& w! `9 p7 S
mysql_connect($server, $db_user);查询数据库的代码:
) a9 b) f- \/ B& ]" Gmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
$ G: I6 E% R) }* U1 ]; h' O* _$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! D6 `. B$ S2 f; h1 j1 `" z3 ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. k' a+ i# a: {9 Z; }/ {如果用户用错误信息的话,这样处理。
5 r/ L0 x+ O2 b$ x* h7 G' W2 gif(!($insert)) {3 @* G: g8 I3 A! d/ u; I t- f7 a6 `) D- ?
print "Useronline Insert Failed > ";
5 ` n* Q9 r6 o. g) X. T}然后实现当超过设置的时间就删除该用户记录。
! w7 w+ C% u) D/ `- S" K% L6 q' h$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。! a: h j9 L% H+ j5 s0 w
if(!($delete)) {: x$ `9 I0 X3 x) Z
print "Useronline Delete Failed > ";
2 x- E" M5 o% }5 w; n8 v}下面我们解决数据库中不同IP的问题) g! O* R& C& Y7 s& T. V( E: ^4 A
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
: `6 F# ]9 ~0 xmysql_num_rows(query);来统计用户,代码如下。( t) {5 a% P* k. B2 ]% G
$user = mysql_num_rows($result);最后关闭数据库。
9 k/ H9 o6 Y% v; F+ }mysql_close();显示在线的人数。2 r# @8 ]& V$ v! y# b# c
if($user == 1) {
8 n- c% }1 C, B! s" u5 u# hprint("1 user online\n");
2 ^7 |& [9 m% ^ u9 ^/ P. F} else {3 p: x6 o* t( k7 Q" M6 e
print("$user users online\n");& u I8 |7 P" \; D) ~' g Q6 E8 A
}最终把上面代码写成一个PHP文件如下。
& b" A' V! U3 Z: }- H8 e' _) W<?php
; g$ T* R6 P- [4 @0 ` e" L8 {2 y//Put your basic server info here- ?+ I+ G4 ~: S6 u
$server = "localhost"; //normally localhost% Q6 a5 v2 y! u
$db_user = "root"; //your MySQL database username' x" z2 {( [" \
$db_pass = "password"; //your MySQL database password
' n- n, \7 H( a% c2 @$database = "users";6 j* u5 B; A/ ` c# L8 G7 |
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are y% f ]4 Y# B. v
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
0 Q% W: c: i7 S Y. R, `. N// $timeoutseconds seconds)
6 \" v8 z+ f; C H//this is where PHP gets the time0 J0 Q, i' a1 {9 e
$timestamp = time();# _) C8 ]* l y. V% S
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
& ]2 P. c3 W( {% p/ n0 y1 K- b$timeout = $timestamp-$timeoutseconds;4 j) \, q: `4 F: {
//connect to database
6 H# i R$ H% w5 e' K4 jmysql_connect($server, $db_user);
4 \) U$ N5 N' w; J//add the timestamp from the user to the online list' B6 n5 H: F' h' l5 D. s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ R- L1 i2 e8 |/ C* }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 v4 [ b0 l3 E2 P, \ D
if(!($insert)) {# n" B. B* H# K1 h% b
print "Useronline Insert Failed > ";
6 r! J; t9 ?4 N* R}
' g0 c. M7 {, U- n3 d/ i9 ^//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
R) S: j/ S1 Z3 J" L4 n$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");6 [4 ]1 P8 q; R
if(!($delete)) {
7 {4 D7 K- [1 P p0 Lprint "Useronline Delete Failed > ";2 d( l+ F. A" A q
}" g I5 z" }1 R' `+ h% W: S
//select the amount of people online, all uniques, which are online on THIS page* d* c& P# ?1 O( i/ a
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");; [9 P: Y+ E0 L) l* E5 R! R% Y5 ^
if(!($result)) {
4 X4 Q! k; ?' a- n; pprint "Useronline Select Error > ";3 \5 O* F1 j. `4 O1 N2 g$ @; `& W& n
}
" q7 {- h( e( r' D//Count the number of rows = the number of people online; \2 o1 r f" b. j5 P1 a8 l
$user = mysql_num_rows($result);* q/ H4 ?: i0 u$ O9 V8 [0 ~$ u4 g- g
//spit out the results3 `8 A3 s W) C( v/ @' i) \/ b
mysql_close();% `; o. O, k# M/ M4 p: g" R6 }
if($user == 1) {) y' ]3 w' }% L6 j
print("1 user online\n");& i/ G y8 G3 p( }* o
} else {+ i1 a6 {+ a% v& D: W2 ]2 n
print("$user users online\n");- Y: r5 g2 G, Y# s7 Q8 o& a0 }
}) d# w, k, v; q& l# s1 o( j
?>
" w8 Q! P- k+ r0 G% s8 q7 J- n$ O! t1 z
! v. l% k( _! r7 O+ c以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! y! N* e- D3 L- R0 f5 O' |- w时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。 |6 p% K' C, t, u
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。% V! O" f7 S+ o
当然啦,这两款主机也是相当不错的。
+ b' f( {+ g K智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年$ X6 |2 L" x; s( g
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
* j& U7 S" {5 w- d提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ) @" Z- E/ b5 {" D2 e# M: n
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
; B& T8 z( [0 ~1 G' X6 l自己加QQ去问吧。 |
|