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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! y; }: M/ B0 K6 k  v
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。+ J$ L  x0 ]$ a: A! |: l
首先我创建MYSQL数据库表。
7 s8 ]5 E7 S# e! @: A- {CREATE TABLE tablename (9 J# u8 H/ \( A, q  J* t. Z
field type(max_length) DEFAULT 'default_value' (NOT) NULL
; _. J! i9 t8 M- K, l; S. w}可以使用的SQL语句。5 u6 ?2 L' v+ n7 U- T) x5 Q
CREATE TABLE useronline ($ h0 y- I1 y) L
timestamp int(15) DEFAULT '0' NOT NULL,4 b0 m' V7 B/ C
ip varchar(40) NOT NULL,
2 C# T! V- e- o! S2 z3 U, Tfile varchar(100) NOT NULL,
9 J  v! P. G  w0 @, O/ ZPRIMARY KEY (timestamp),
8 ^: |& Q9 L" m# LKEY ip (ip),
' R1 n5 ~0 c; YKEY file (file)
  v# u2 g& x8 R5 X);下面我们是PHP脚本,首先我定义MYSQL的信息。
7 c& O. I; [( w! f/ g& R! j+ u$server = "localhost"; //你的服务器, ~5 m4 N# J/ [5 ]
$db_user = "root"; //你的mysql的用户名5 d( f% _" ?5 W8 ~" {
$db_pass = "password"; //你的mysql的密码
6 l( S9 S6 X" e! W+ s$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
3 p. b" |8 d6 g0 v$ e$timeoutseconds = 300;取当前时间。
- ^5 u& h) U0 V6 ?. M4 ]$timestamp = time();上面的完整代码:7 Z% ]1 T( O: j  e( k
<?php
* t$ k; {# v+ R8 x9 q) \  F% K$server = "localhost"; //your server
; B+ L: R: }) v! j5 n% w( h/ r5 `$db_user = "root"; //your mysql database username
+ l3 Y; ^" ^5 x5 m% k  V9 I$db_pass = "password"; //your mysql database password if any
% q) h7 `7 F* T2 T% n9 \$database = "users"; //the db name/ v% S5 M' V/ P! R& s
$timeoutseconds = 300;//timeoutseconds limit
% F! D* o; ~: h5 t) y//get the current time  ^- I& j9 o3 Z; U$ L
$timestamp = time();" K( M7 z" r0 w# Z( l% {: ]" }9 @9 Y
//calculate the lowest timestamp allowed
4 ]6 l' S' Q+ v3 s# X$timeout = $timestamp-$timeoutseconds;3 S. @4 u6 q( V( L# F2 d) A* Y
?>连接mysql
1 `0 e, a, L; a# y( ]; Kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。+ |) |' X7 P5 [* R* Z" J8 O# L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ L) J; B0 B% K. [  J% @8 G: i
mysql_connect($server, $db_user);查询数据库的代码:& u; h% ~. S6 s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ w4 `8 v3 j& j+ P1 ?' p$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ ]3 T( g) ^2 }# I  G('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 k8 X7 M+ g3 `" k0 z( m  b+ h8 G如果用户用错误信息的话,这样处理。
* j/ g" k- s# z. Mif(!($insert)) {
  i+ J4 y3 V1 B5 i1 }% {print "Useronline Insert Failed > ";
1 b% u+ F1 Q( d}然后实现当超过设置的时间就删除该用户记录。
- O- u! ~: z3 ^6 A( w3 c3 k5 }$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。* w* d; g+ W2 S; ^9 o5 b
if(!($delete)) {2 `$ y0 X8 f# y- V
print "Useronline Delete Failed > ";
9 I' Q8 X. }3 j: T; r}下面我们解决数据库中不同IP的问题
  ]8 q/ m: p5 v9 W) ^$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 c0 @3 I  K- K) v/ T( i# ]$ g
mysql_num_rows(query);来统计用户,代码如下。
1 }( a  k0 [* ^$ ~" Y" E( U5 t( X$user = mysql_num_rows($result);最后关闭数据库。
( @# _% e. k3 }5 E- T  m7 L& Amysql_close();显示在线的人数。5 X0 ?" ~' D" Z; f' K9 K% Y& A
if($user == 1) {$ J, F2 R! S6 y% R7 I5 R7 y* m. I
print("1 user online\n");
  n8 u! o4 V' u; I3 }/ J& X7 y} else {* X: A9 M9 G$ m- o( c+ s5 O
print("$user users online\n");
7 S& X: O3 Q' d7 Q0 x, r2 r}最终把上面代码写成一个PHP文件如下。
' d& l9 K' G0 u5 I<?php
; Y$ |+ T; I4 q8 J( g; J//Put your basic server info here
6 m) o9 I/ J  {2 P! Q, t. x$server = "localhost"; //normally localhost
. ]  \: ?  _+ m. i$db_user = "root"; //your MySQL database username
4 I+ |# Z4 g6 i) `8 A7 z, S! g; F: S' K$db_pass = "password"; //your MySQL database password
0 B! z, ]; t, P# \% ]  B+ A$database = "users";
$ \: |" k& i4 T( H# ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are7 j& H% x) I- E6 Q
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& K4 W/ ]" I$ e- W7 a) F% D$ e+ J// $timeoutseconds seconds)1 u# y3 A! T  M2 Q9 J. l9 P
//this is where PHP gets the time
3 Y* Z! R  u( y9 T. T- ]1 b$timestamp = time();/ J1 `& d! G( j$ G. ^" t% C. |8 q# z
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed+ Z5 ^; r1 `$ R! f1 i+ P
$timeout = $timestamp-$timeoutseconds;2 w$ k4 P! ?9 S  V: K  K% y
//connect to database! Y1 E+ c, m5 o  {9 c( H
mysql_connect($server, $db_user);  f% ^: X) n; q) _. N& @
//add the timestamp from the user to the online list* z: I; L2 X  F: S3 x7 H. L
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ n( G" u" q1 R4 J3 a4 b' n('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* ^1 k0 k  y. I% B9 _0 e5 I7 Uif(!($insert)) {
# _" m2 H+ S4 b6 m+ J% Jprint "Useronline Insert Failed > ";8 l& c, o0 o7 b  Z0 W2 c
}
2 B! r/ Q( b2 u7 K2 o& n' _//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
* O2 X) d7 u) q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");3 G" N6 g* r/ d) T
if(!($delete)) {& k; d$ P* z& M& K* `' y1 Q
print "Useronline Delete Failed > ";
3 X1 \- \% w, g* O" V: n4 j* `6 ]}; S' p* |; l( |9 h0 p: E, {
//select the amount of people online, all uniques, which are online on THIS page( P' Y# s) x. s+ p# g7 h
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");) ~; k+ j! v( V+ N2 P+ U& W
if(!($result)) {
, o2 ?6 P) o! r! ]7 o% @print "Useronline Select Error > ";5 Q. e, M* V6 Z( A$ ^% x
}$ R9 ~% I, M  k$ C6 e: g9 F
//Count the number of rows = the number of people online6 b" h6 h- T, r$ l2 D) q8 R6 V
$user = mysql_num_rows($result);- k1 O& N" `6 I. b! I  i& |
//spit out the results# m" X* |$ c" I. s
mysql_close();% ^( D7 [2 X3 Y9 }. A" h
if($user == 1) {* ^+ l5 ?, c, x4 s- X& \" a0 v
print("1 user online\n");; R5 {$ e7 ]/ A, s/ P; @' f
} else {4 m4 @0 o+ g2 K2 z1 s7 {% `( p8 a
print("$user users online\n");
4 i# @, Q; e: m}, h& Q: a% n. a' p
?>* p# J2 [0 _9 x
" S/ E" Z/ P# l. l) K0 R# Y* Y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) `# k* e- V! l% V& M- b时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 R6 ~, q9 e9 C4 |% a( v' i* R我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
8 E# f3 Y* e3 u当然啦,这两款主机也是相当不错的。: c( h! t7 `- x: s+ y$ G1 r
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
- Q4 f! M% d9 N+ C7 I标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年  c# _0 _; E* _7 j1 N3 L% v
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" b1 k4 y. A  `( `9 B空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
+ H* t3 I5 j8 c/ B自己加QQ去问吧。

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