返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 O, z: z& i, c9 ?/ g我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
* @& q* H( ^! M首先我创建MYSQL数据库表。. A0 q3 o. C. z9 |
CREATE TABLE tablename (" c$ b$ \: b6 K4 I' H$ u
field type(max_length) DEFAULT 'default_value' (NOT) NULL6 E# h- c6 x1 M+ Z
}可以使用的SQL语句。  l5 M3 J6 F3 z" d' o; C
CREATE TABLE useronline (
/ F& u( j, K( Ntimestamp int(15) DEFAULT '0' NOT NULL,
" j4 {6 ?5 L, Lip varchar(40) NOT NULL,
% k) n* E4 ?0 A' qfile varchar(100) NOT NULL,  H5 v2 C! @& ]6 {6 p6 }
PRIMARY KEY (timestamp),
2 [, J" f( ]- i$ v, j; u3 F" jKEY ip (ip),; G% ]: G9 j! K( d
KEY file (file)1 ?9 d! `* P, b0 Q" v3 a0 B
);下面我们是PHP脚本,首先我定义MYSQL的信息。
5 W- Y  F3 p6 u. r7 z$server = "localhost"; //你的服务器: ^4 B  `" v1 e8 v# s2 y1 q0 \
$db_user = "root"; //你的mysql的用户名
& Q) H2 |7 g4 L3 _$ _* Z$db_pass = "password"; //你的mysql的密码: w2 x+ L' T1 T. _6 K
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; M% b+ O$ C. z( ~" H% Y$timeoutseconds = 300;取当前时间。" G% _5 U' t% P! t
$timestamp = time();上面的完整代码:8 L' \0 c- h* N
<?php
. w+ b. O- O% a' L* N$server = "localhost"; //your server# o! C" t2 e& F8 h6 u3 \
$db_user = "root"; //your mysql database username7 z+ P1 a6 V8 h( |' g
$db_pass = "password"; //your mysql database password if any
$ e/ C: o( \( V" I# ?) p. R! A$database = "users"; //the db name
) @& e+ s3 s4 Y' R0 m& [$timeoutseconds = 300;//timeoutseconds limit% D' J1 k+ e6 f
//get the current time
! A$ I9 @& A# ?- n% M$timestamp = time();
7 A! X, H: I: V3 M- T% Y9 h//calculate the lowest timestamp allowed; |6 g2 I$ y4 J% N
$timeout = $timestamp-$timeoutseconds;
, A3 ?: M  a; t" U5 p) j5 R0 _?>连接mysql
0 J8 s* U! }& |* P8 o) `0 W4 w5 w( dmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
. W* g" x8 L7 _5 F" zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, O* _8 }8 }7 J& n* p3 _% @mysql_connect($server, $db_user);查询数据库的代码:
) F+ `, k' L9 [+ w5 Imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# ?4 u2 \) [3 G: ]$ O% v
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# {3 X( t2 W; n$ s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- Y4 Y6 |+ ~6 n: |+ D
如果用户用错误信息的话,这样处理。
7 y/ k, _' L) Uif(!($insert)) {
& \9 H; J% S& |% T8 `print "Useronline Insert Failed > ";+ A& C, L$ P# f5 j  R# _1 X/ L
}然后实现当超过设置的时间就删除该用户记录。6 T3 n# E" z9 f% O5 M9 M) O8 t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; @' A, R* c$ s& K0 fif(!($delete)) {
/ _- B6 i/ `: ^0 T5 q: J8 _: V; Iprint "Useronline Delete Failed > ";0 s9 ?$ S/ v# A% r; ~3 Y
}下面我们解决数据库中不同IP的问题
' z, o9 O( x. M2 Z( q& |+ m$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  x1 w/ Q: D7 j7 Imysql_num_rows(query);来统计用户,代码如下。4 j) E. w% x- ?9 O
$user = mysql_num_rows($result);最后关闭数据库。
. l0 ], _1 q# Mmysql_close();显示在线的人数。
4 `5 ], X5 |( q' Z% Gif($user == 1) {5 J4 U; N: Y/ g9 Z
print("1 user online\n");
: r! G" R( b& Q( D: _* u$ S} else {
" [1 I% w4 ~) o) ]0 \8 @4 Qprint("$user users online\n");
  s7 `& k* k: e- _}最终把上面代码写成一个PHP文件如下。
) }# I- J: c2 u6 m4 z2 p& v/ N) o<?php, @3 w$ {2 ~4 M8 r% H: _4 ?7 B
//Put your basic server info here8 f* ^: W  m+ w9 X
$server = "localhost"; //normally localhost
8 m" j8 t$ c6 S: k$db_user = "root"; //your MySQL database username% |1 w. h$ x% a6 t
$db_pass = "password"; //your MySQL database password6 o1 A- C: E& k5 J
$database = "users";( v/ `& ~7 _1 X/ |
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are! {2 s. N/ n# D/ n! @) ]+ J
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ C2 X- ]- H1 P/ Y' j3 [
// $timeoutseconds seconds)" N& l. U% K+ U
//this is where PHP gets the time5 |" [" \: x* q) r
$timestamp = time();
' ]% V9 T& x; }6 M9 {* N% W0 q//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
. H5 N6 T8 v: w* q# U: J2 H# s$timeout = $timestamp-$timeoutseconds;4 R2 x3 [" s% b5 q
//connect to database
4 a6 k. f; X* Y7 W' y; Omysql_connect($server, $db_user);
- x  h( u  a6 t//add the timestamp from the user to the online list4 v2 u7 |. f) i# F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# t' r! Y$ M3 e' n, W$ g( A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 @# e2 W! J( V! {4 m0 N: j
if(!($insert)) {9 W$ v! d/ i+ W9 C9 u) x5 X( z
print "Useronline Insert Failed > ";7 Y: D7 T0 O% p7 V4 l( n
}+ H; V8 G& B8 I3 z
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
, J7 ~! Q' j: x9 p8 C! o; V9 b$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: [6 L& i3 B$ I6 \, v  \
if(!($delete)) {: B7 v( N% P) e0 ~* H
print "Useronline Delete Failed > ";, _3 T, w: P8 c7 F  Q0 j1 L" _
}
1 T" Z( S% \1 q* b. [, h//select the amount of people online, all uniques, which are online on THIS page
3 ~" ^" L: ~4 ?3 M$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");% h. t6 |6 ?0 z
if(!($result)) {
# V8 B) ], }! `) p- R: |. rprint "Useronline Select Error > ";& o2 b6 \& n! \' \
}( s3 m& h5 R& e( h' D
//Count the number of rows = the number of people online
+ z: _3 N- G, r0 I- l# o: j; f) F8 j$user = mysql_num_rows($result);
8 }. M( B5 n7 M/ s0 V9 U3 e//spit out the results
0 q' @/ D/ ~- r, tmysql_close();
. k! g% b6 m* z* aif($user == 1) {3 I" n! r2 n) j* ]9 f2 D0 u
print("1 user online\n");
5 B/ d9 C. L0 u} else {
5 k* _# _0 Q+ h/ Qprint("$user users online\n");' g1 D; C! E6 F: M! |
}
  T" a3 a" N" n  x% R% t?># x5 N. \9 J4 U" d0 G3 `0 i2 P
9 }" h$ l2 Y4 ^. W
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 z5 x% o" ]5 E4 A# ^+ O5 D1 \
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) w3 K( {& ?) p% z
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。2 ^% V8 }+ [/ F# ^
当然啦,这两款主机也是相当不错的。$ L- z3 F  p7 |) V
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
  h! ~( g( s; O标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! I' o8 N1 a6 R+ p
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
8 P' |  j+ Y) y0 Y. a空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ F: P; y1 [  e7 ?
自己加QQ去问吧。

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