|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下! e. c3 Z7 x( B
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
6 |! d4 T: V: z- H) ^9 O$ I首先我创建MYSQL数据库表。
6 E. ~( k$ F5 G7 H% I* RCREATE TABLE tablename (
, T$ |- b# r5 k& Y! b- {field type(max_length) DEFAULT 'default_value' (NOT) NULL
5 L: U& \& T" \2 S: A% v5 i$ C7 |}可以使用的SQL语句。
, J! h! ]) i# o7 o* g9 gCREATE TABLE useronline (/ d* d, H& f% `) E" X
timestamp int(15) DEFAULT '0' NOT NULL,
' `5 V. |$ N! p+ i( {ip varchar(40) NOT NULL,/ m1 l0 }8 x8 e, r7 g
file varchar(100) NOT NULL,) X5 e& ~* e$ ?! u/ n
PRIMARY KEY (timestamp),
+ m0 C4 r/ x4 C0 @* ?KEY ip (ip),& j% c7 E* X1 ?/ S, v# H
KEY file (file)$ o3 s {9 a( R% j0 R$ \ V
);下面我们是PHP脚本,首先我定义MYSQL的信息。, x7 E& x2 w; {4 ?. k
$server = "localhost"; //你的服务器5 S3 S" p2 D: E7 E8 Z$ D
$db_user = "root"; //你的mysql的用户名6 v7 d5 V7 g" f+ A# O) C
$db_pass = "password"; //你的mysql的密码# U h! _6 } [" H& e
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 h* I; ]9 \& `
$timeoutseconds = 300;取当前时间。
- _1 [8 N7 M0 g$timestamp = time();上面的完整代码:9 Y X& }/ r$ W$ o# B3 X [' O
<?php5 p) Q1 m, s# T
$server = "localhost"; //your server$ X; J: Y2 Y5 z+ @8 o, K: z
$db_user = "root"; //your mysql database username/ c( h- e" K. _( A
$db_pass = "password"; //your mysql database password if any, n! M- d& [+ w: T7 E
$database = "users"; //the db name
9 w$ t! _0 H9 A7 l9 o' t$timeoutseconds = 300;//timeoutseconds limit
5 C( A' G2 g& e+ z: m//get the current time* G1 j+ j5 t: B$ u
$timestamp = time();4 S+ V1 j N7 O& {7 _
//calculate the lowest timestamp allowed
8 ?3 z2 c; }% p$ d& V' N8 B; O$timeout = $timestamp-$timeoutseconds;
' k% {6 p% U( t7 Y, f3 i?>连接mysql
% u: b" B0 E1 i+ k3 r. [) o# gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
2 e! I1 Y* B, R+ L( { [4 F$ Smysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
9 l+ I, M y' h& o6 |mysql_connect($server, $db_user);查询数据库的代码:9 y, V: d3 P3 }) u$ e+ X; S, N
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 ~" J9 @. m4 {, ], W& @; p- V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% A" J9 n4 |* _6 e2 L+ @
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 U* H0 t$ v/ }& [% J. @- x如果用户用错误信息的话,这样处理。) {" Y- O5 p8 x' u
if(!($insert)) {
- \9 X9 M$ X/ B6 ^2 Cprint "Useronline Insert Failed > ";' i- M n- d# K7 t
}然后实现当超过设置的时间就删除该用户记录。
9 ^3 ^ H, R4 P0 R3 L" K9 Y/ x3 o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; |. {6 g( I- Z' _0 eif(!($delete)) {
9 b4 w$ |4 j# E9 f+ N! Kprint "Useronline Delete Failed > ";3 |- K k/ I6 ?
}下面我们解决数据库中不同IP的问题
7 Q K8 b* f# o4 V$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
& {% l! K$ ]' H' ^- Y+ H3 m t2 v7 Dmysql_num_rows(query);来统计用户,代码如下。
7 Q! C8 ^+ B0 L0 W$user = mysql_num_rows($result);最后关闭数据库。
( s3 E. F3 Q7 ^; W0 {mysql_close();显示在线的人数。
* `" P" o9 n# j y3 qif($user == 1) {- S1 t+ \. V; |+ `) Q- s# C5 Y
print("1 user online\n");+ J4 O; k# N0 h/ R
} else {
7 n9 F2 x5 J, H& O* t/ B$ N1 `5 d! mprint("$user users online\n");9 F% C! B0 j8 O. f2 p7 v2 b0 }7 u3 y
}最终把上面代码写成一个PHP文件如下。 J/ R! {$ ~; X4 Z9 Q
<?php
( H; |" |% _1 D' ^0 s* u//Put your basic server info here
]9 r% x& x/ u& }0 e$server = "localhost"; //normally localhost( d/ C7 t2 f2 u- \
$db_user = "root"; //your MySQL database username
" J, A6 u' U& x+ } v% b5 Y3 u$db_pass = "password"; //your MySQL database password6 y' j% ^& u6 I. v& X( Q4 [
$database = "users";& M* N8 A4 \4 Y: F
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% \; `7 f- a. C9 |; q, x1 S6 P
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
- V3 h O. S/ P5 C. s/ Y2 s+ E1 f' y, h// $timeoutseconds seconds)9 q5 y# @' s% K1 C$ X3 |: \+ \
//this is where PHP gets the time
( A+ o* D( T$ |8 X+ [ L$timestamp = time();
, r6 \" h! v# @/ k9 Y! v) e; A0 |//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
8 {9 g" n, w& i- w) Y$timeout = $timestamp-$timeoutseconds;
5 S% |8 c& o2 r2 ?' O//connect to database' `) S, y8 N* {6 F
mysql_connect($server, $db_user);" k0 z7 q# q# S5 u* [* z$ l
//add the timestamp from the user to the online list
2 e# [* W8 B$ m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# e! r' l8 T2 u; v$ D( u4 Q6 M('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 G% b& \( d7 ?. V; s* K' v0 t+ bif(!($insert)) {# m5 z- M9 M5 {2 i
print "Useronline Insert Failed > ";
, H. P- F- q( F* J ~" ?' U}
: r# [' c$ t2 y& G//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 K+ Y5 G1 C# K1 \* f$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# @9 D6 D" i C7 K7 @7 A
if(!($delete)) {. _5 d. R" b) u! p3 |7 c
print "Useronline Delete Failed > ";6 v+ D5 M: O- a% T f
}
: R0 [; q" I. H& I! J//select the amount of people online, all uniques, which are online on THIS page
; I( U% P7 i6 z! _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, L/ T- Y( M2 w: G0 v; q! wif(!($result)) {: F- ^8 ^% a) n/ J6 }! _6 B
print "Useronline Select Error > ";+ Z! h9 }6 w4 W: R
}1 `* p- ~3 ?7 R0 p& O1 [/ s% I
//Count the number of rows = the number of people online3 ]4 d1 ]+ e0 V& }# [( X. V4 _8 V
$user = mysql_num_rows($result);
1 h( _/ R& A+ v, t- A//spit out the results
# L; P8 B6 o8 imysql_close();
" D( ]1 [8 D) l$ M l0 [. O/ d4 ?! pif($user == 1) {' m- r+ ]" m& \6 J/ n P
print("1 user online\n");
. J. J! c9 w' _- d9 @} else {8 A, c2 s1 j- n' z: M& i& m
print("$user users online\n");" w; E; @) E7 K* _! N, C) P
}
% `/ `- ~% E; w; M6 T: o?>
( m8 e+ K! y" e5 @
, x- V: i& o) P* C3 ?% Q% g6 R以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
# ]- z4 |$ I' J$ M9 x时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- S# |* C* c0 w4 _/ w5 v3 J* w我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 G$ D- r+ M6 `* S C7 i8 T
当然啦,这两款主机也是相当不错的。
- I" r# l, K* V5 D智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
' N. G" g6 x$ g3 l# E: p/ X标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
; _$ B, o, b* @( m9 d, \提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
5 r j9 f; H3 h空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; b8 F% W! w! b+ r( `" @6 k4 l
自己加QQ去问吧。 |
|