|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
" H6 o% U0 h2 S/ f我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
% X! s ]" k: W* \% B u# v7 M首先我创建MYSQL数据库表。
4 w# O: z" A( ]7 mCREATE TABLE tablename (+ l! O" g0 }. x: ~2 N
field type(max_length) DEFAULT 'default_value' (NOT) NULL+ q, g _7 F; s1 ?/ O
}可以使用的SQL语句。& h: s n% e& f/ A1 v: I
CREATE TABLE useronline (
4 K+ s7 z$ t0 G @: D5 }, `timestamp int(15) DEFAULT '0' NOT NULL,( x$ c* L7 x/ Y) W' X! \, j! t
ip varchar(40) NOT NULL,
& ` j8 C9 U8 S- Q5 I$ Jfile varchar(100) NOT NULL,
- N3 D: f0 N _3 n- q' y7 |PRIMARY KEY (timestamp),! E+ v% x8 x I- V3 t% Q! i+ L
KEY ip (ip),+ o- w* H+ A% A5 J
KEY file (file)9 T6 s: O8 O0 F8 X g/ p" o
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ Q) u/ D% G& ]( \% L$server = "localhost"; //你的服务器# X( I( J, Z: @$ W1 ^ K
$db_user = "root"; //你的mysql的用户名
/ a; z p& i/ n4 C/ @) D6 g& j1 I$db_pass = "password"; //你的mysql的密码, O. V' a- i* [
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
/ x' ?* z9 n. l3 A7 _5 h$timeoutseconds = 300;取当前时间。
9 y; `- x5 E3 Q9 M* V- b$timestamp = time();上面的完整代码:
, y- j0 W. u" k+ L ?<?php; T" ]7 M, t; ~% o) p7 r
$server = "localhost"; //your server- K. Q y) c' }) C& |
$db_user = "root"; //your mysql database username
# U& h9 z: [: [% k$db_pass = "password"; //your mysql database password if any
6 G) L5 Z. U9 T/ Y$database = "users"; //the db name
* C: A, h! `1 g1 f' p$timeoutseconds = 300;//timeoutseconds limit
2 y6 s1 p4 B l2 p& ^//get the current time: Y; ]4 k9 E! N0 Q, K! y
$timestamp = time();1 L, t$ F& o2 s- ]$ e
//calculate the lowest timestamp allowed
! X! P1 }8 b4 }( |2 X4 Z$timeout = $timestamp-$timeoutseconds;
9 ?: T7 T: g: p. z3 f) v- E1 @?>连接mysql6 p9 I$ H$ h3 v* C* L' H- V
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
% Q" n( S1 r$ m k. r& Gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
' O; c/ z6 y' T" [; k. d5 `& jmysql_connect($server, $db_user);查询数据库的代码:6 s, p j4 a, S) {
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: u5 n& f y: Q) e7 r) j/ c8 g$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
2 U- P0 c+ d) C4 `) P2 n/ h' s9 u('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");' N7 S# \) `( b. W9 }; W' E" Z4 [1 y
如果用户用错误信息的话,这样处理。/ v8 `; B# j3 U X
if(!($insert)) {
6 H' [. x( r6 E: e" Zprint "Useronline Insert Failed > ";
: ~. F: p8 f/ o+ |6 r}然后实现当超过设置的时间就删除该用户记录。
# n( @5 b' s* Z. G2 j; x/ S% q# S$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, _8 J( W7 c: A; z1 K! I3 p0 I
if(!($delete)) {5 D I6 {; q* `, B4 c; Y4 G
print "Useronline Delete Failed > ";
5 d% O6 t9 v7 N}下面我们解决数据库中不同IP的问题# x1 I4 o3 K' Y3 W$ s
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
, u# o. Y) g, U! s% Umysql_num_rows(query);来统计用户,代码如下。4 a. h' a% _6 M9 b* ~
$user = mysql_num_rows($result);最后关闭数据库。
* V& C, h* D2 w0 x0 O0 Qmysql_close();显示在线的人数。% ]1 `/ n* ^+ q+ B) b* K1 ]2 }" [) M
if($user == 1) {
+ Y- J. K5 x( \! cprint("1 user online\n");9 G8 i/ s# E: b5 h$ y
} else {) y. T5 E$ z ~
print("$user users online\n");
- I* v4 y( ~1 U' z}最终把上面代码写成一个PHP文件如下。, l. E* D4 }2 k: }0 f9 p
<?php. {/ Y, b( c" ], }$ l
//Put your basic server info here
- V6 t5 x3 k& l! c0 i) Z5 j$server = "localhost"; //normally localhost
1 t( R" m* }5 a) E3 c9 o$db_user = "root"; //your MySQL database username
0 y2 {- x3 X' e I, z# I4 A$db_pass = "password"; //your MySQL database password
% i- a0 Y+ o: k0 w$ H$database = "users";
, F5 A. ~9 P. D) b4 b$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are& n& s3 {" r; S
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last& C) L0 V- `' A( j+ `' V) I
// $timeoutseconds seconds)
% U, S j" [! U* j2 j2 z+ T7 t//this is where PHP gets the time3 R7 X* `. u0 Z( A8 [2 _
$timestamp = time();" H2 r `" }% @
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed5 L, K4 b7 h1 |9 r
$timeout = $timestamp-$timeoutseconds;
5 s0 s. W9 o: J( N3 w$ w9 S, S//connect to database- {" `5 q6 B) W; H4 {
mysql_connect($server, $db_user);
$ ?2 \ f& I+ H: g- o//add the timestamp from the user to the online list ~' A3 k) S$ }* \5 _; w4 P# Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 Z, c% j: C1 M- M('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 \3 M; Y6 H1 S. n* J q. z
if(!($insert)) {
; P3 ^) m' i8 U3 w1 b5 e+ K+ uprint "Useronline Insert Failed > ";
; {( g' ?! i% q% N# C! S, T- K}
! g: Y0 V& v9 z5 j) ^: y& m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds., m+ j1 C# r V; t+ [
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 g: \8 _9 S7 }+ I, M; fif(!($delete)) {& A) C* a |# p: \
print "Useronline Delete Failed > ";
6 I/ x. t% E, l+ |2 S U. j}
5 ~* Z: Y# E" d+ i" A4 q//select the amount of people online, all uniques, which are online on THIS page
7 r! Z/ T: Q6 m" d" q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 w D! c; |. f3 O3 ]if(!($result)) {* Y3 D3 S( @% E, E
print "Useronline Select Error > ";# x/ ^$ g9 m; J5 }( l8 `6 F
}
5 w R' L( L/ K* ^& `//Count the number of rows = the number of people online
3 h o7 ~7 ^9 _& D7 ^$ h3 L8 ~$user = mysql_num_rows($result);
i" | H3 w# N2 C6 m//spit out the results5 l% b6 y2 w: P7 q' H6 N" i
mysql_close();1 S& G6 t! ]4 K! b/ u: }3 z5 T, {) X6 z
if($user == 1) {
5 M# C' X* v8 a0 i9 X j% t. y6 Lprint("1 user online\n");
# S! \4 S* t5 @) C+ D6 E} else {7 s6 F# E1 X4 r+ R9 r) r' L
print("$user users online\n");
7 A( Q* j# M- c}
0 l3 o/ X9 n% ]( n; P4 C?>% W' ]" ]1 P* N: J7 i) n
5 d4 s. e4 g* t3 Q) H3 t
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* L# R+ r/ x! w时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。- a" i- ^- K* k0 M7 X) T
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# O) b' U. B9 H( O9 y5 O当然啦,这两款主机也是相当不错的。6 l% F1 v% h# ]2 I) r, l7 @
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
% @: y0 ?2 @- Z: n8 K+ i0 {: U标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
" ?, _, S X% l- F提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 9 m' w* V! h: m
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=550 i# J6 G4 v7 _# L, |6 h. v
自己加QQ去问吧。 |
|