|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 t5 E" F3 H' M
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
8 P6 h! y V/ a1 K: _( P首先我创建MYSQL数据库表。
& `$ u9 N& l. W: c9 u6 z2 i& U. ]CREATE TABLE tablename (
( p2 K( F- Q1 A- wfield type(max_length) DEFAULT 'default_value' (NOT) NULL
; V% l4 {, D3 T p/ V( M}可以使用的SQL语句。+ B: _& l$ ?# l: y2 U W. y7 @) l4 J
CREATE TABLE useronline (7 `# Z2 N8 h& v7 V7 {% _
timestamp int(15) DEFAULT '0' NOT NULL,0 n, h0 L" y/ I0 L# P; W; m
ip varchar(40) NOT NULL,
2 S8 u+ c6 r: |file varchar(100) NOT NULL,: N, z% w4 g8 N
PRIMARY KEY (timestamp),
* J& Y1 S% K+ C3 M8 q8 O. ]KEY ip (ip),
8 K+ q; L4 ?3 I* DKEY file (file): J2 y! a+ _5 Z4 V+ ^* ^9 G4 R
);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 q3 C' n+ [# Y. W$server = "localhost"; //你的服务器( ?( w) A3 l% v! E; K( C( ?. ]8 O
$db_user = "root"; //你的mysql的用户名
" ^* l8 t1 ]/ l' t. ~$db_pass = "password"; //你的mysql的密码7 \3 s6 j1 t6 u& ~
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数) z& Z4 y+ N9 L, [& t I, E
$timeoutseconds = 300;取当前时间。
) y1 Y/ l& T( ^$timestamp = time();上面的完整代码:
! \. ]* b0 x: x9 ?' P+ j8 P<?php
% m/ e& P3 q6 h9 a8 I4 B8 F$server = "localhost"; //your server
. N o; T4 p" c/ m4 m9 Q0 m9 u$db_user = "root"; //your mysql database username1 |2 H) E# B4 y
$db_pass = "password"; //your mysql database password if any" M' c+ l. A# m, T' S
$database = "users"; //the db name; t+ r9 [ M! J+ Q2 T3 H5 h$ l
$timeoutseconds = 300;//timeoutseconds limit
* N0 g3 Q) }9 _- |( ^8 g. [" z//get the current time
$ _: I! X' I# n; y$ G3 P' u$timestamp = time();
; j3 S+ W# {2 X. T/ q# S0 a//calculate the lowest timestamp allowed
B. S3 j- ~0 E" R4 d$timeout = $timestamp-$timeoutseconds;
" r9 }- I0 T; k0 D9 |3 q0 g?>连接mysql
- I) N* u, V; n Y" [: {mysql_connect('localhost', 'username', 'password');也允许使用变量形式。: L( L; x, h5 E8 P# ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, l2 f' s) E4 y Q; @- \, _; S$ mmysql_connect($server, $db_user);查询数据库的代码:& q1 c% L7 b( `& c) B
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
) i: k) M( H6 }6 S$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( |, y: e* i: W+ j, r, |7 a, u# `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 K( f% O! j' D% {9 R7 N: m) ]
如果用户用错误信息的话,这样处理。
% R) ^" P& X: v% V1 C' mif(!($insert)) {
1 i7 g/ X( X) [7 o- P$ F9 z+ ?1 Vprint "Useronline Insert Failed > ";
' D8 L$ P6 P) t+ U1 P# y}然后实现当超过设置的时间就删除该用户记录。
% X( M W$ t: O+ s. w; j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。. r3 D3 I7 {$ H4 s
if(!($delete)) {
0 i3 H' f0 ^9 l' \print "Useronline Delete Failed > ";3 ^, W! P* V2 Q$ D5 x- _9 v
}下面我们解决数据库中不同IP的问题# o5 ?: J' x/ R4 C) Q9 z# U. I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 ]" W- w" |5 d) j5 }mysql_num_rows(query);来统计用户,代码如下。# g6 N O& t* c$ U3 u
$user = mysql_num_rows($result);最后关闭数据库。
3 x1 e9 [ g9 v$ Z( H) U4 Y5 i4 gmysql_close();显示在线的人数。) N5 ` O# z! ?1 b, E
if($user == 1) {
; }0 p9 I, t7 i0 Hprint("1 user online\n");( r# i$ @5 z O+ R* k3 e
} else {- f5 ^8 `2 ~) L( u% ?9 I. n
print("$user users online\n");2 ]0 U8 N$ Z f$ B" P5 G
}最终把上面代码写成一个PHP文件如下。
2 C: a$ p5 m9 d9 t: b<?php
2 ]+ u# A; i5 |& o3 b# h//Put your basic server info here
- M* `2 L* R4 k$ _6 ?# n. R" _$server = "localhost"; //normally localhost' x: [( L, E2 G$ _4 |6 q
$db_user = "root"; //your MySQL database username! F" f9 x9 b. W0 l2 Z# n n# u
$db_pass = "password"; //your MySQL database password
( u" D8 W- n/ y8 q4 _' S$database = "users";
# \' n7 i" }$ n# w, V; M* x g2 o! J$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* `( W$ F' y0 C( M3 z/ y& \
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. h8 X; N+ c0 E+ d+ m2 r// $timeoutseconds seconds): |9 @+ z5 k: }3 ~$ V7 W0 Y" Q
//this is where PHP gets the time4 L; e/ Y1 Y7 t) D0 e
$timestamp = time();
d' e1 e$ `2 N, a, T//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
1 B1 O: h2 `: y9 b$timeout = $timestamp-$timeoutseconds;) P/ T) V& [' ^& v
//connect to database
( W9 G) f9 j9 j1 v8 V8 }mysql_connect($server, $db_user);
* q. V' g# {6 ~# b, I//add the timestamp from the user to the online list' ~$ U1 E( T# o. j
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 q/ g( t( b; l/ P; ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 w5 ?6 N! f) k) tif(!($insert)) {1 ^. j3 W! F* c" y/ N8 ^: r
print "Useronline Insert Failed > ";1 c |/ `8 ^( W
}
. ^3 E1 u$ \) w//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- ^, U) k4 s& V3 l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 y1 L. g/ ?" r! f5 X
if(!($delete)) {$ H* ~) J, [* h6 x0 ~
print "Useronline Delete Failed > ";
6 ]6 k4 T3 j8 [% T}; l3 n. y3 C% D/ x) k8 v
//select the amount of people online, all uniques, which are online on THIS page
1 \+ I4 b D+ J7 T$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& i0 |- d3 _+ n) o8 R/ k+ zif(!($result)) {% `4 \4 x# K# s$ H# h
print "Useronline Select Error > ";
& W) _$ S( u6 Z# X: F}8 l9 R& T- ?. ~
//Count the number of rows = the number of people online% l( u2 C6 }( u
$user = mysql_num_rows($result);
" D, i2 N7 n. H" E( M% m//spit out the results9 v5 q' [7 e5 G# v
mysql_close();( A- Y! C, h& t$ `7 }
if($user == 1) {6 ~$ Z# i4 w8 j
print("1 user online\n");
6 y% W: B9 Q: h( Q3 i) X' ]' V} else {% W" r% V5 B6 q) P' b
print("$user users online\n");
4 g% m: \& @, m}
. `) ]) F P. T2 I; P?>% j4 j( d3 V1 q& p
6 s6 p% W3 f$ l' y7 w1 j4 u ?1 G
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
l6 Q9 e1 i+ E8 [" Y# }时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
* i( A- N. I! @+ x' L我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
2 P. `& c" ~: b! X a' J当然啦,这两款主机也是相当不错的。
9 X7 S4 m: y9 [0 l2 d$ M智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年3 S( ?( o. x" L$ V. q
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
" E3 r5 o9 c. `5 C( L提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ $ n9 D" Z+ P. e: Y. A! X
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55 k; L5 C+ G2 z* t! F
自己加QQ去问吧。 |
|