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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!% q, v; w$ Q  ]  X$ E; I* l
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 l/ C2 C  ~. A/ o首先我创建MYSQL数据库表。- J- A3 f) }' `( A% m
CREATE TABLE tablename (* s. c' F  c2 s" ~
field type(max_length) DEFAULT 'default_value' (NOT) NULL0 A5 |5 X+ @: c# p
}可以使用的SQL语句。; H( B( x& R& f
CREATE TABLE useronline (1 S& {/ m- D) a
timestamp int(15) DEFAULT '0' NOT NULL,
( h$ z( z2 E* o3 C& S- e! Nip varchar(40) NOT NULL,* S( @( p6 r. c2 }+ Q
file varchar(100) NOT NULL,; V- O4 h; W; g& E/ J' ]
PRIMARY KEY (timestamp),1 G$ Q1 P( Q* ]8 G# m( g
KEY ip (ip),
6 W1 o' o% a, H5 LKEY file (file)6 E5 A+ P2 U2 I
);下面我们是PHP脚本,首先我定义MYSQL的信息。' Q2 H) r  p1 h2 o! b
$server = "localhost"; //你的服务器
5 X. t( `7 j5 ?- S% S$db_user = "root"; //你的mysql的用户名
! Y: S4 \+ o5 m4 S$db_pass = "password"; //你的mysql的密码- p- m5 `4 g5 q2 q' E
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
- R" R. W6 b* \/ ~  l. w% B1 c' H$timeoutseconds = 300;取当前时间。
6 n  c* }$ R9 R% D9 |" y4 T  Z3 H$timestamp = time();上面的完整代码:
0 Y2 Y+ d+ u3 y3 K<?php+ C7 H; V8 E$ y# ~5 p8 e
$server = "localhost"; //your server2 t+ P) {, w5 X; m2 u2 U# b+ y
$db_user = "root"; //your mysql database username" w. J' _) t! @7 g% ^' Z# J
$db_pass = "password"; //your mysql database password if any, e  g  M  t/ ^) ~) O
$database = "users"; //the db name7 ]) ]; v! M: ]3 b, f8 A$ `5 k
$timeoutseconds = 300;//timeoutseconds limit) m1 ?% R5 Y5 I7 K  W
//get the current time9 q+ S& _8 X  v+ Z( q6 u
$timestamp = time();* g4 M1 ~- v# e6 `
//calculate the lowest timestamp allowed
) S7 J4 j( c8 O8 r* f- H$timeout = $timestamp-$timeoutseconds;
. \* v: ^3 S% ?# o?>连接mysql
- F5 i! n& W: o/ |9 fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。& q; F7 `2 z" U% g" r
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ }- U9 b9 u: wmysql_connect($server, $db_user);查询数据库的代码:
- u5 W! K7 Y! @6 _mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 u* W' x; B" X
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ r  g) _1 ]7 i* M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: l0 ^4 k4 o% _. v+ y如果用户用错误信息的话,这样处理。6 x  V; f# a$ P! f% _) ?
if(!($insert)) {# r2 @" v- T+ r/ m& `
print "Useronline Insert Failed > ";4 B. |% c( u( e
}然后实现当超过设置的时间就删除该用户记录。/ Y3 j: s: X& D
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ Y+ u) e9 Z) T* J7 M/ z
if(!($delete)) {6 j( o2 ]* b4 q6 a0 q8 J9 l+ K: v
print "Useronline Delete Failed > ";1 e+ C# i/ z1 @" \: ~0 L+ I
}下面我们解决数据库中不同IP的问题0 e& u+ `9 x% E/ Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 L6 c5 ]3 K9 z" d) T" l3 z: ~% lmysql_num_rows(query);来统计用户,代码如下。  Q( C, j: g" H# z" ?: Z# x6 N' W
$user = mysql_num_rows($result);最后关闭数据库。
8 Q5 x+ W9 |. C3 }3 x7 N9 ]1 P. ?mysql_close();显示在线的人数。  ^+ X! O' r( S4 r  x0 {3 c& n
if($user == 1) {
. L- ~& a5 q! g0 n: aprint("1 user online\n");
- O& t+ G, m- n; V- q& \* p} else {' W& U+ }% s7 b) b" l
print("$user users online\n");
+ z2 ~  |! R- \: q}最终把上面代码写成一个PHP文件如下。
: \+ d0 m0 h- E; `& x: h<?php9 A$ ]" l$ O( k4 Y# d  m  }5 q7 M
//Put your basic server info here( M1 @$ }7 p3 H* k% I
$server = "localhost"; //normally localhost
/ ?% |  Z# n9 N0 q% V: G. G$ r  x) a' [$db_user = "root"; //your MySQL database username
1 I' U( I9 N0 s% O$db_pass = "password"; //your MySQL database password* R3 [; ]2 {& j$ b" y* {6 ^
$database = "users";
- M  B1 D  }* x$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are6 N5 \# ~; U1 B- {" W
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 S3 q9 S1 S' {9 o9 a) K6 |9 c
// $timeoutseconds seconds)
6 O/ Q* _! c, H/ V! O//this is where PHP gets the time
' P# C  i6 D. T4 G6 z; D) j$timestamp = time();. U  D1 s8 g+ r& J' q5 m
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed  N( Q7 ^3 W- m4 w
$timeout = $timestamp-$timeoutseconds;# L9 u' |( K6 I# g/ ^
//connect to database
3 G' \/ u; E& x  J0 N2 u) F4 ~mysql_connect($server, $db_user);
$ K/ p0 ?7 Y1 G+ t//add the timestamp from the user to the online list5 W# M3 b1 i* L! i, A9 H, O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 U0 X' e9 s- N' _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 p" L# Q7 J. D( z3 U: sif(!($insert)) {
/ U2 {- {9 Z/ r' F8 V/ |print "Useronline Insert Failed > ";
; a, [8 ~! |) Y+ ]  r( ?) A}
8 O: e" V. J; W5 r( f//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.0 b% A7 g& e8 ?% B% I( D
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: T$ r$ z3 w5 S) `1 B% ?
if(!($delete)) {
2 A0 c' J* Q7 K; r( Z7 fprint "Useronline Delete Failed > ";% n# q; _: W4 Q
}
$ f* t* f! @4 m; f//select the amount of people online, all uniques, which are online on THIS page
5 u/ P0 l  m6 R# ~2 V/ O8 E# B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 E9 T" ~9 r" z2 u. W! ]
if(!($result)) {
, E- p1 w9 e/ A4 U4 G2 X/ Lprint "Useronline Select Error > ";
; x! L# f% h) u. F' C2 e3 U}
5 u; B* u9 r8 x; @, z//Count the number of rows = the number of people online! h, H  w: M0 Q7 f/ R; y# f
$user = mysql_num_rows($result);. o( m& d) e2 W5 N9 U
//spit out the results4 r  d1 R2 s6 c4 l
mysql_close();
9 e& Z, a* W3 w% _$ fif($user == 1) {
& A' d* a+ Q( v, ?- M+ M9 Y$ Pprint("1 user online\n");1 t1 R: x6 z5 w7 V& P* }# j
} else {
, X4 ~" y0 I, vprint("$user users online\n");
; Q) w; a" Y( l% e* O: ?- i}
' n+ h; R( e3 @0 T3 D" f1 I?>
' N3 \+ L0 E: r8 v6 T) V
) m4 r" j% i* q# U以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
- X2 t3 a6 k3 A! b' J& X1 N时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。6 a, F: B0 X/ w; k/ c6 l; m9 ^" W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 y6 U  E: r( o$ ]! x- U" M当然啦,这两款主机也是相当不错的。
4 ~3 |+ l9 a& z, @5 R智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年8 h: ?- y. o5 j) N8 C; w7 m5 @
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年- Z% F$ D( m1 I& _- S
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
3 P' ~/ n2 P) g* r/ V空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55& ~( ^1 Q  B9 X# K6 q9 a8 S1 j
自己加QQ去问吧。

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