|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
% }: z l* P4 U. Y我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。0 h* S+ f3 K4 v: {8 z7 |
首先我创建MYSQL数据库表。
- n% F6 O* k0 }7 c$ k( B. {5 NCREATE TABLE tablename () Q' I3 [* q+ U0 p% }. V0 a8 _8 i8 Y
field type(max_length) DEFAULT 'default_value' (NOT) NULL: L1 C% g* h* H/ y9 H' h# |1 |
}可以使用的SQL语句。& y6 Q) |2 a6 w) s; @% K, l
CREATE TABLE useronline (
8 E: H; o" T/ U4 T# Z2 Vtimestamp int(15) DEFAULT '0' NOT NULL,
7 X, ~$ r) K# O6 M; V0 H3 G" d6 I, [5 pip varchar(40) NOT NULL,% C; k5 R2 K+ s, }' ~- ]
file varchar(100) NOT NULL,$ y0 k' g: Q' m% q
PRIMARY KEY (timestamp)," A; u5 d' H# c* [
KEY ip (ip),- W# I6 p* L1 h9 b! V& X
KEY file (file)
) l& h$ c9 b. |! v);下面我们是PHP脚本,首先我定义MYSQL的信息。0 l3 R* `8 i' ?5 u4 v' C
$server = "localhost"; //你的服务器
6 `9 C1 C: {, L. \5 w8 R$db_user = "root"; //你的mysql的用户名
( ?) E) b2 k, x# V3 B) c$db_pass = "password"; //你的mysql的密码
1 f. t$ a* q) K" z' N1 K6 \8 J9 G+ S$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 \. I) a4 n; ~. ^1 N3 i( @
$timeoutseconds = 300;取当前时间。
4 Y. s7 ]1 r) y& f3 h6 a) q9 l( Z F$timestamp = time();上面的完整代码:8 w5 x/ c+ s+ U& s4 M% }4 e
<?php5 A0 y# t8 V; c9 [
$server = "localhost"; //your server7 g/ R4 E' Q, ^3 o) M
$db_user = "root"; //your mysql database username; B8 b- `' B: K0 g: b" G
$db_pass = "password"; //your mysql database password if any/ @# ^' t, f$ }' J* ?
$database = "users"; //the db name
9 g9 L( D! U; H, K" Z$timeoutseconds = 300;//timeoutseconds limit
% {" f+ h5 p" M& I+ F//get the current time% p( U* C2 S) T% X4 c8 ?
$timestamp = time();* O; e c8 Z1 @1 t
//calculate the lowest timestamp allowed
5 t. a( F( F4 X9 E' v$timeout = $timestamp-$timeoutseconds;
! B9 [ z. v) x4 @+ V3 n: t?>连接mysql+ B7 d$ w3 t3 E) ^9 Q, V0 \+ a8 z
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。- G; x+ |3 p9 f- ?" i2 x* K( \4 P: L3 w
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ U2 v. ~5 t" }, L( `; zmysql_connect($server, $db_user);查询数据库的代码:
, g& H3 z- Y% t# f7 dmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; j, J( `0 X7 S$ ]* b, z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# I( G0 K; h# i. l+ k" ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 {; Z- k8 f M9 w$ N- Y
如果用户用错误信息的话,这样处理。
" g0 s+ l. |) w8 Eif(!($insert)) {+ I6 d! b& z! X! t9 @+ {3 Z
print "Useronline Insert Failed > ";' [! i. K) X V* O0 L! L$ s
}然后实现当超过设置的时间就删除该用户记录。
( j4 J3 E; k9 J$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。 p: a3 Y( Z& c3 s; u4 x2 M3 c
if(!($delete)) {" v% ]9 I9 ?5 c! q) R
print "Useronline Delete Failed > ";7 e* s j. G5 d- Q" Y# d
}下面我们解决数据库中不同IP的问题
1 [, N, r+ J. A! U3 x: m( T2 O. Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
1 K) O# ^$ y, smysql_num_rows(query);来统计用户,代码如下。4 X% ? x4 c- p6 ?6 M* F3 U
$user = mysql_num_rows($result);最后关闭数据库。
M; g* h* u- i2 w% Jmysql_close();显示在线的人数。
' q9 _% G4 q q/ ]0 Gif($user == 1) {+ |3 R0 i8 _! b. S& n. J
print("1 user online\n");
+ ~: G# v( w* O0 D0 y} else {
' C, ^+ e. q. d4 oprint("$user users online\n");
2 N* B2 p" M! E4 \: `- ~0 G5 ?}最终把上面代码写成一个PHP文件如下。
* d X+ t C' k0 W) }7 W<?php3 k* }" }5 I& t4 u. c
//Put your basic server info here7 o% q8 }! }0 b3 @ z
$server = "localhost"; //normally localhost3 M! n, B6 Z: X
$db_user = "root"; //your MySQL database username
1 p$ O& S! ]$ H, u$db_pass = "password"; //your MySQL database password+ `+ P+ n. C: _! K3 z: E( R
$database = "users";
p, m8 |+ P+ M$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are. o3 }# x; L* o4 ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
% ]+ I2 `7 O( i2 ~8 w6 o& h1 @ n+ X// $timeoutseconds seconds)' ^: x: I6 X: p9 |* ^+ c! V% [9 p
//this is where PHP gets the time
/ d% N4 X0 t6 z$timestamp = time();! {- u, } ]1 l
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
8 z Y. Q% `1 c/ h2 i2 _$timeout = $timestamp-$timeoutseconds;( h9 T, F" _; N( D
//connect to database1 ] p1 R9 ~% N9 I4 s; h0 j9 Z
mysql_connect($server, $db_user);
% H) x+ n5 ]1 j; _2 ]4 W//add the timestamp from the user to the online list
. }6 t3 i. t b4 b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 y8 `/ ]) i% U" M# T
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# b! ?$ T0 w8 j9 [. Y* W: P
if(!($insert)) {
4 i2 C5 ]* e2 ~8 C% bprint "Useronline Insert Failed > ";( i; n* l H. s. f
}4 W' z0 g( |' v- A$ p6 C
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.0 F+ O! F& c i' Q }+ ]% K! l. R
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");! p5 ~6 N% J2 j3 X- ?4 h% U. Z
if(!($delete)) {
+ @8 }1 x, t* M1 f! ^ \) {% dprint "Useronline Delete Failed > ";- l2 X9 k8 @% u8 a; s. L
}- B; ^: f' h) f1 M5 S
//select the amount of people online, all uniques, which are online on THIS page
1 d) C' s# x, A0 V) ?* o) F( E$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");$ D5 T! R! `3 l
if(!($result)) {
' i T4 L) s0 K1 y" N% Bprint "Useronline Select Error > ";9 N. B8 f; o4 r
}
& x% `) @* W/ _+ p( @6 p//Count the number of rows = the number of people online7 W8 [3 k; m! ~! [4 Q9 a
$user = mysql_num_rows($result);
. t t3 I* b0 Y) k+ x- j* f+ k0 @//spit out the results
( q/ h" l, W# D$ F6 E& L2 umysql_close(); \5 F( ~$ _5 m. m! X
if($user == 1) {7 ?9 s/ b- F; q/ X/ g. }- v
print("1 user online\n");
2 I' l* [# \# h- K} else {' F1 O$ \0 c8 ]& p b
print("$user users online\n");( P) B: f0 u% ]9 e
}
1 B3 H( [1 q* v/ S. r?>
0 R" R( s7 W0 ~* L
@& g, n# @$ Y2 m% c以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。$ ]8 P; v6 J, ~& j
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
1 l8 D6 o$ V5 u我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。4 \) N- y+ l/ b2 \! V0 ]# V( Z6 ^
当然啦,这两款主机也是相当不错的。, g9 M# M# F' ?
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ s3 S$ e2 B) {
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年# y+ v X' J4 S
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* P) a8 `3 s* ^( v3 o2 D: P* ~5 H空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# j' T c5 g0 J自己加QQ去问吧。 |
|