|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ B6 P8 l, C( e7 g; O$ `
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
7 b3 M' K# g/ t5 A% M首先我创建MYSQL数据库表。& `1 k! j) o8 k, ]. @
CREATE TABLE tablename ($ E$ @5 T {: b) q3 `
field type(max_length) DEFAULT 'default_value' (NOT) NULL; P- @9 ?& L9 t1 P; t
}可以使用的SQL语句。
2 O9 N: Q" [2 mCREATE TABLE useronline (
7 q, j; D* t; L# e1 O0 [timestamp int(15) DEFAULT '0' NOT NULL,
; N) n4 C% A0 x- n/ w" }/ Q% j+ Xip varchar(40) NOT NULL,6 m3 a8 M9 L% V( v% V# @, a" e
file varchar(100) NOT NULL,
* t' w) g+ k2 L5 F2 S; hPRIMARY KEY (timestamp),
* F$ Y& z- F* j/ Q) [% wKEY ip (ip),- Z9 C3 E. x+ T
KEY file (file)2 ^/ m/ H7 z3 |; Z! Z$ D, s) i' H
);下面我们是PHP脚本,首先我定义MYSQL的信息。
. X `9 ^, o- _$ l$server = "localhost"; //你的服务器) E5 i0 s8 `* @; O
$db_user = "root"; //你的mysql的用户名! |* A* S; i$ F J) f6 F r
$db_pass = "password"; //你的mysql的密码
& z7 ]( C& `+ ] O- e$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
$ {, T; K, c8 {6 C. r$timeoutseconds = 300;取当前时间。
: S5 k" C: q( R; R$ h1 j$timestamp = time();上面的完整代码:
; ?2 \( m4 l+ g$ p( d( Q+ h4 f<?php( V; C$ C- x' D! Y
$server = "localhost"; //your server# _9 w3 L* W! Y
$db_user = "root"; //your mysql database username
# A/ Y5 M0 l5 Y& r, d- ?; Z: g8 V$db_pass = "password"; //your mysql database password if any
1 N! m1 i% B$ ?, A9 n- y0 }$database = "users"; //the db name* |+ O3 P6 |5 B1 t5 I4 o
$timeoutseconds = 300;//timeoutseconds limit
& A. U6 \2 C8 l//get the current time' R) {& @$ W$ P: D; u$ e, O I- z
$timestamp = time();
( W, X8 f- t$ d//calculate the lowest timestamp allowed1 ?4 c! V# D7 {$ l
$timeout = $timestamp-$timeoutseconds;- {2 C. o- j& v
?>连接mysql
y1 p% S& V) ^4 z, z4 [) a* S6 Kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
8 n; c, {% R4 c& x/ k- w6 |5 Smysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 d9 m2 h# U5 ?2 j2 C: ]mysql_connect($server, $db_user);查询数据库的代码:- l/ r2 ?" v1 |5 _7 o4 \- D! k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' u3 Q% a& C, f5 U3 A" G$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' u7 d7 c0 g' @6 f: r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 `: k/ c2 ?8 x$ e+ d$ F$ J5 C如果用户用错误信息的话,这样处理。* _0 L0 V/ \) \; B- `
if(!($insert)) {
4 r8 b7 @5 S5 h* ]7 q/ d9 _print "Useronline Insert Failed > ";( [8 y3 i2 k$ q
}然后实现当超过设置的时间就删除该用户记录。
. f# x; r7 J; o8 _$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
- Y6 k$ J8 y& y( \" fif(!($delete)) {
1 P5 v: S; y* [& ? U# }print "Useronline Delete Failed > ";" ?( r: [7 O7 n- b6 z
}下面我们解决数据库中不同IP的问题' P v( J1 \" e
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. H5 I# q7 N5 C3 N. _4 c
mysql_num_rows(query);来统计用户,代码如下。
2 b, K( {( _3 r2 `' V6 c j$ x$user = mysql_num_rows($result);最后关闭数据库。
: y/ @$ V! Y+ ]/ T6 ^( W+ }, mmysql_close();显示在线的人数。8 W* H( P4 o) ~& ?$ B _
if($user == 1) {
. {- O3 c! Y [2 B" c, C' Mprint("1 user online\n");9 O; E' V7 {. u1 k, T
} else {
; ~! i9 v' Z9 s/ b G8 o; j8 vprint("$user users online\n");
8 @& ]/ m1 k) J7 j' v, Q7 e( E}最终把上面代码写成一个PHP文件如下。
[7 V t/ C5 |. a4 G; S<?php
& V' G' k. N- e. W/ ]* s//Put your basic server info here
3 X9 |+ G3 ?5 s2 V& Y# s6 q$server = "localhost"; //normally localhost* y8 p- m/ X' M+ }
$db_user = "root"; //your MySQL database username$ r. C% @1 [/ H" _/ E. R7 I9 d
$db_pass = "password"; //your MySQL database password
: c6 y1 ^. e% r- j0 w$database = "users";5 ?( |5 w8 z, Y/ A* m0 g1 i
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' \1 U: ?% L" q+ J. W" T- [6 ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ Z. T( W& E, A4 \
// $timeoutseconds seconds)
: k9 g( k2 I: T//this is where PHP gets the time
& g7 p6 T, i& O# \$timestamp = time();
+ x4 Q( Q0 Q. e" E: K//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! o. j) O' J, U; \1 T4 K% N* v1 B
$timeout = $timestamp-$timeoutseconds;
7 X6 d/ r" P+ i//connect to database
/ m9 ~! q$ T" Bmysql_connect($server, $db_user);2 B/ o/ x8 @4 w' e0 [' A
//add the timestamp from the user to the online list
- m6 I7 h4 M/ Y5 Z- R% z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, ?' }0 P: C7 C) h3 z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
u8 W- I7 Z) j! M; ?' W/ U: Gif(!($insert)) {, s! u' g+ Z6 x# i. V4 _3 x
print "Useronline Insert Failed > ";7 i; a. W3 ^( j2 q; y/ \3 W& A
}
4 M+ ^" d' X8 a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds. M+ b$ g+ q) [" B" |/ a
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 }$ S* j( z# t) |: ?% H8 l- O
if(!($delete)) {* B. r( j6 d0 H& q+ e
print "Useronline Delete Failed > ";0 }) A# u9 i2 B9 m- {* h. a
}
" B- N' h4 k8 S. Z5 R% D//select the amount of people online, all uniques, which are online on THIS page3 @' L3 K+ v" y; t' ^9 ]& g
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
/ |+ x7 m M' v! Aif(!($result)) {, t* x" s' a" L, P
print "Useronline Select Error > ";
8 o2 k4 N2 O0 L3 J+ d( R7 }2 Q. W}
6 ~ S- Q, n$ X6 {) Z//Count the number of rows = the number of people online" y1 u" G2 ?! B
$user = mysql_num_rows($result);* ^8 ]0 z# C8 k& i% _; R) Q
//spit out the results0 U$ u$ f% L- i0 k9 \# X2 F0 D2 r9 m
mysql_close();) }7 s+ p. b4 x2 h( c6 v6 a+ B
if($user == 1) {2 ]+ s* y: _4 {' Y, H! R- S
print("1 user online\n");
" u$ n A+ F. } m2 H, @} else {) g# T6 e; Z: d' L* ^* ~8 i
print("$user users online\n"); V# L$ h% e( C9 v* Y0 `. O/ u/ Q
}9 u& H: z5 F/ v& {
?>7 l, r( m& ]" n

( {! i1 |2 W* z( X J+ y/ x" h以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 i; v0 H# Y5 q f0 @0 ?8 A$ B6 `: `' C
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。, Y( M9 Z$ ^9 T2 b8 B, N3 x
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 U* u/ s0 ~1 P9 t& B当然啦,这两款主机也是相当不错的。' t- E: F2 E! h) S2 R& L
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
) R9 ^8 z6 L, [* W标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
/ @0 c: `2 `( W7 }8 P r8 V提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
! u5 \6 E5 k+ T0 T6 i空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) ?( T" @2 Z) V( a3 w
自己加QQ去问吧。 |
|