|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 M' a4 d! |1 r! s5 V6 P" R
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ N# X+ Y6 k n9 e' F: X% \首先我创建MYSQL数据库表。
3 z0 n1 K8 U) }CREATE TABLE tablename (5 u6 r, r: b/ n& R+ C7 x
field type(max_length) DEFAULT 'default_value' (NOT) NULL) p2 F7 @" _6 I6 H! @
}可以使用的SQL语句。
% X* L2 l& R6 v, w/ b) r- n1 @: MCREATE TABLE useronline (
! f, s4 m6 V# D$ r- ]timestamp int(15) DEFAULT '0' NOT NULL,
7 w; B" T0 b0 m) @2 T) cip varchar(40) NOT NULL,* ]3 R! M6 {% L
file varchar(100) NOT NULL,
9 {$ t! W/ @$ l& fPRIMARY KEY (timestamp),$ J0 P5 l! F' H }: I
KEY ip (ip),
0 O% G% s8 a9 `, \KEY file (file)
' Q/ w! R0 C9 q5 a& l( B3 B* \);下面我们是PHP脚本,首先我定义MYSQL的信息。0 t6 o1 Q' T: |- G8 ?+ R4 ]; o
$server = "localhost"; //你的服务器% R/ O$ i) W8 ^5 K9 e
$db_user = "root"; //你的mysql的用户名
5 c( L9 L- z# u$ f+ K5 [$db_pass = "password"; //你的mysql的密码
$ Q6 N) g: r% |& {& i% ?$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)% r+ }5 r l" I7 u6 O6 \$ ~) e
$timeoutseconds = 300;取当前时间。
! m2 h; q' Y1 e7 C- l( g# h$timestamp = time();上面的完整代码:
3 t" I7 a$ j9 k w3 N9 e<?php
7 i. G# t0 N: e u+ Z: C9 d$server = "localhost"; //your server! P. h# W6 f# d ?& ^
$db_user = "root"; //your mysql database username i) s$ u7 f$ Z9 g: _
$db_pass = "password"; //your mysql database password if any
. T+ p1 c" E/ |8 }/ F( ?; F$database = "users"; //the db name; K" P/ E% z+ W6 G6 q
$timeoutseconds = 300;//timeoutseconds limit
3 B! l* G0 F& J//get the current time/ Q6 f& U* L: I2 U! ~9 |
$timestamp = time();
8 B1 o* [1 L5 k' E1 j+ s//calculate the lowest timestamp allowed5 w- b$ P1 x! E$ r) Q
$timeout = $timestamp-$timeoutseconds;, |% T. U6 }1 j9 b9 q1 H
?>连接mysql
7 Y' n( ^; u! g1 [# hmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
) L S+ G, {8 _; C' nmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 k4 ?! ~( [$ Z6 d
mysql_connect($server, $db_user);查询数据库的代码:* @' D8 k; D9 P, Y
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
& ~/ f& S$ G9 m2 h$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. }5 J% A* b3 ] l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! j7 h( E8 x/ L* k+ M
如果用户用错误信息的话,这样处理。! U1 l2 w& R* u+ y
if(!($insert)) {
+ \# S" n7 u% }( a" ?) [& Yprint "Useronline Insert Failed > ";
% o+ C, d- U+ y8 k% W! p. m9 G}然后实现当超过设置的时间就删除该用户记录。
( \( |5 H& j! ?6 N! [3 U: G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, e& S# _! J+ n5 \: ?0 Fif(!($delete)) {+ s& ^' R a! S/ n) L! V
print "Useronline Delete Failed > ";
2 \9 z" H' ~. p8 b5 o! t# K}下面我们解决数据库中不同IP的问题
# R% w, L: V. E8 y' H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 J) E" k( d- Y. g% rmysql_num_rows(query);来统计用户,代码如下。7 q, {! m; q! U, T$ ]: Y) t8 H. E
$user = mysql_num_rows($result);最后关闭数据库。
: v. M% }% ^4 pmysql_close();显示在线的人数。1 L2 _5 |' l/ A5 w
if($user == 1) {
* z. K0 o$ k$ Q* |. f7 nprint("1 user online\n");2 A" R. a- P5 e3 t8 v9 o9 k0 n
} else {5 T0 S" b, D) v/ E7 U
print("$user users online\n");! F2 [ D* Q L% [- }6 S/ e
}最终把上面代码写成一个PHP文件如下。# z& h& p3 P ]! Z- r; l
<?php
0 l, g6 h, x1 z//Put your basic server info here
6 I/ U6 j4 t+ @4 B, J$server = "localhost"; //normally localhost
# e7 @" D2 H! X) h3 U3 x$db_user = "root"; //your MySQL database username' G& B. X5 `" H7 v( ]- U
$db_pass = "password"; //your MySQL database password0 \" B: K6 @& u2 b
$database = "users";
* W+ C# }+ Q, @: ?6 k' ~7 ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
/ h) Z2 v n8 n R4 D& }// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! o* p2 w9 Z/ [* o" `9 B9 a// $timeoutseconds seconds)
0 g. E4 @% P' q7 {4 Q& @//this is where PHP gets the time5 {. k+ Q8 v4 a4 N% i3 z4 Y4 P4 K* y9 K; P
$timestamp = time();
/ s' l+ ^5 V$ d8 Q//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed$ }8 V2 I4 I/ [( X& Y. o# P
$timeout = $timestamp-$timeoutseconds;
7 S6 | e0 U, p! L9 e//connect to database( n% S: |0 H8 X: {0 n
mysql_connect($server, $db_user);! Y! D+ K5 e( X l9 B6 F
//add the timestamp from the user to the online list
6 T$ S0 s+ {8 O3 t; k% W$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- h1 e ?& {$ q( p('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 ~. \. V' N7 I1 N' }+ G8 ^! D
if(!($insert)) {! n3 {2 E( J. |" c- F I
print "Useronline Insert Failed > ";6 K" w$ @. q' Z) G2 b6 Z
}
) S, }! u/ X0 O' t//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" P0 ^6 o' a% l4 c, M$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
0 z8 J% l/ V! s. s/ r, aif(!($delete)) {
' a- ?( K' }- |2 q% S* q' }/ ]print "Useronline Delete Failed > ";
* q4 S, k! ^$ d$ D: T: P) D}8 ?5 E) U: \* R! h% a
//select the amount of people online, all uniques, which are online on THIS page2 c6 C0 D2 y" ?/ s) e4 r" M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ e5 V( r4 ?3 `4 X+ Y/ W2 yif(!($result)) {" i5 Y5 N/ v! t( n5 o
print "Useronline Select Error > ";
. r# [8 k+ O1 e" }( Y}" n* E3 L5 y! J% I1 ]( m
//Count the number of rows = the number of people online
1 i% m/ z: b0 N* N8 g9 i! U; K+ M$user = mysql_num_rows($result);0 k; C* \4 ~6 [1 w1 n# E
//spit out the results
6 A ~# X2 w6 |% Z0 smysql_close();2 U* X8 ] D. C1 l: i6 k. Z
if($user == 1) {
7 ^' g, w8 ~( Kprint("1 user online\n");. q6 s; j, X/ H' c% g3 N+ h0 f1 `
} else {
# U' ^# v1 H2 Yprint("$user users online\n");8 s; ]! ^; R3 |, X, C" l
}
* F( ?( N7 ~- [?>; |4 T& |, R1 \4 Q
& D1 p: x$ C6 A, g9 d. y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。7 ]" O+ e4 Q: k6 j4 g6 n
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ ]. P9 V2 f4 L# {
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# {: |- S8 n g当然啦,这两款主机也是相当不错的。
7 s$ L# y3 Q1 H: |) W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! H; g& H" O; N1 D) o0 T% C
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 B, U0 @" N# I0 K
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 v( M) [! v: E3 X1 x) |4 W空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ N7 \- Y( i" e% I3 s
自己加QQ去问吧。 |
|