获得本站免费赞助空间请点这里
返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
, o' S! M" R& F7 y我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 _- `0 S$ n0 s- ^0 p首先我创建MYSQL数据库表。
1 ]! |  Z3 V. ?- \CREATE TABLE tablename (, Y1 E, i; `' ?4 e5 M' W  h; j
field type(max_length) DEFAULT 'default_value' (NOT) NULL* i% p! J) ?2 o# a3 u& x
}可以使用的SQL语句。1 G  o6 ?6 _5 O
CREATE TABLE useronline (
+ E5 _9 x" w0 D$ o# p6 T) Gtimestamp int(15) DEFAULT '0' NOT NULL,) f; t& h- U9 C# M3 b
ip varchar(40) NOT NULL,
2 c) ?; W$ T& y0 K# d9 E0 tfile varchar(100) NOT NULL,) h1 ]) _$ j( V: r: z3 W
PRIMARY KEY (timestamp),
% F/ |. K" T8 d4 X! R! _3 ~  _KEY ip (ip),8 F( Z+ ]+ Z1 X. @
KEY file (file)
. o2 L8 y7 h, o" d: Z);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ u" N5 F+ Y/ j- R2 a! _( ]$server = "localhost"; //你的服务器
/ D. r2 T8 n4 {2 H! x: O! c2 l$db_user = "root"; //你的mysql的用户名
4 s3 F7 H3 b, ?4 \. N  s$ X( j$db_pass = "password"; //你的mysql的密码. M" n% |- d& x$ T1 k; Y, W& q  L
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)* G$ [4 S' |) O# T
$timeoutseconds = 300;取当前时间。9 b- l+ a$ z/ U, ], m
$timestamp = time();上面的完整代码:
- @5 x7 D, V0 M5 m8 q<?php
+ @$ l+ O$ n& b! T5 U$server = "localhost"; //your server1 R) ~0 s4 o$ Q2 w  R1 x
$db_user = "root"; //your mysql database username
- W8 A3 [3 i! _+ I$db_pass = "password"; //your mysql database password if any
- z1 {/ c. R# k3 G. i8 W$ @  H$database = "users"; //the db name
4 D3 W) D  H1 }$timeoutseconds = 300;//timeoutseconds limit& J2 C# Z* J  i7 F1 |
//get the current time
+ r; m# y8 d& H/ J, J- j! j$timestamp = time();. w7 u" g* @. I- ]
//calculate the lowest timestamp allowed
, K" A# O1 R6 ~- Z; N: G0 u) ^/ b$timeout = $timestamp-$timeoutseconds;( v( U* G% D8 D1 M
?>连接mysql
% ]3 H  T, Q8 p0 ~mysql_connect('localhost', 'username', 'password');也允许使用变量形式。% S' m& x' f! O2 C
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
" h. P' _: g/ D7 c8 h, z& J  f. omysql_connect($server, $db_user);查询数据库的代码:
0 l! l" H# P/ vmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。  p. b8 o" p1 N  p7 R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- o, ?3 f/ b! P2 I# F. `8 b: M('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( s0 x6 f; l" `
如果用户用错误信息的话,这样处理。
) b# _9 g; U  v4 c  M. n& j* Dif(!($insert)) {
! i) [7 [5 H2 r0 aprint "Useronline Insert Failed > ";5 L! l0 d, k* g' U/ v
}然后实现当超过设置的时间就删除该用户记录。
+ ?! P5 J" Y. p  X2 H/ H3 t$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* k. ?* e$ \  w& Y9 F8 l9 R( w, k9 r8 Gif(!($delete)) {
* U- c$ s2 \! |' ~) d& @print "Useronline Delete Failed > ";, W1 [% I" F8 Z4 G* A
}下面我们解决数据库中不同IP的问题2 {2 n) X6 i. @- l! T5 q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
% e4 @7 M1 \. O) x$ r5 F6 jmysql_num_rows(query);来统计用户,代码如下。3 c" W' f$ n; q. P2 o
$user = mysql_num_rows($result);最后关闭数据库。
' ^* A! j3 P* C% rmysql_close();显示在线的人数。
1 R. F4 O+ X% j# @1 Jif($user == 1) {) Y' y. F8 e* u, B0 E
print("1 user online\n");
  ?% C+ Y7 U7 G- L} else {
, d& ?% r; y- E: Tprint("$user users online\n");
! \  d& a  s2 E2 z/ q; A}最终把上面代码写成一个PHP文件如下。% t5 P: _* ~0 J
<?php
) P- t# d8 l6 c* J8 X//Put your basic server info here  q% t- w$ u: q7 j& o
$server = "localhost"; //normally localhost' p+ q" w3 }5 d& e( C/ Z, Y. q$ a
$db_user = "root"; //your MySQL database username4 k$ ?! `( W0 |: A! ^5 }/ H
$db_pass = "password"; //your MySQL database password
# s' X/ c% \. I$ }$database = "users";
0 D! T$ \" l1 ~1 H& }& e* K: l( f3 t$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, Z( Y' G, p& S6 o1 }8 _, w. D4 _
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
% [. G( U8 i* Y$ l; }6 B* z// $timeoutseconds seconds)7 G7 f4 b2 B7 S9 ?+ L1 R
//this is where PHP gets the time' C- e/ O) k6 S, n, C8 V
$timestamp = time();& f; D$ N7 {8 R0 U7 p, T
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed& ]3 i9 Q; E7 v0 @( t, {% a
$timeout = $timestamp-$timeoutseconds;
5 R/ E- {  N6 I6 E5 A//connect to database
$ Q/ l  O( S( Vmysql_connect($server, $db_user);
' L, u6 o: r: t( d3 x//add the timestamp from the user to the online list" Q5 N- ]+ ^* f$ m
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
0 E8 C2 J9 t* O/ K7 u- c3 k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* W( a9 a) O1 Q# N
if(!($insert)) {/ Q3 E% l2 j! T% @3 k
print "Useronline Insert Failed > ";7 f4 W) f8 K1 Y  d" i# `6 X
}9 A6 I( x- ^% d
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.: m) r" E4 b- Z$ e' o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
4 \" k# a1 D0 ^& bif(!($delete)) {# b0 G& ]5 F- w* E+ S- k
print "Useronline Delete Failed > ";" u* h8 W' g. \' i+ y6 t$ a; {
}
5 y* F0 a0 M+ J- y+ j% C  L, Q/ J  t//select the amount of people online, all uniques, which are online on THIS page& f; s8 A; `8 F' f) ]& B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: N! C1 C4 M7 w, f
if(!($result)) {, [& S+ ?! _7 O) ]( Z! Q9 q7 v
print "Useronline Select Error > ";: y3 d4 T8 }% W
}, d( i0 R( y4 n, l; i
//Count the number of rows = the number of people online
9 ]/ j2 m0 k2 k9 U$user = mysql_num_rows($result);1 c/ I( ?* u- a2 ^' u, ~
//spit out the results) k& [5 b8 d4 i. d) t' X
mysql_close();
& Q& X3 }- _7 Z/ C; F3 b. bif($user == 1) {
0 v, b" P( s; a" _+ r4 Qprint("1 user online\n");3 A: A7 N2 S% R! I" w
} else {6 r) r! W8 V* C) p8 n) ^3 k
print("$user users online\n");( d0 {6 L0 C( }0 M1 @
}
, [; x# e9 E# E) i* v?>
! K3 ~+ ^/ S3 w5 f5 M; |
! `/ U0 T' U9 K8 \! Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ E9 C  ?4 ?4 n+ T* W# c' b时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
3 p, G$ a2 F5 b" ?. L我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。4 C  ^  r! a* J2 ~6 u6 m; m- d4 g
当然啦,这两款主机也是相当不错的。
0 f% K' h" r" z" e, O智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: L  R3 O" n. m9 c; c& w标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
* q. @# p. _9 ?1 R" }* u" s4 p提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 6 F5 ~; g: c8 n3 g  d) I
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=552 ~5 w2 K; ]) a+ L: E
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: