
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 t& j. H6 W0 y f4 L& ^
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) N" x6 r/ M# d+ ^; w, G% ~- n
首先我创建MYSQL数据库表。( l' F, r$ e" i3 O( r' V, O
CREATE TABLE tablename (
* i% Y) j4 ?% j: afield type(max_length) DEFAULT 'default_value' (NOT) NULL
" Y( _4 }) Q5 c( O% |" ]}可以使用的SQL语句。
9 l4 F+ q( H4 D% O7 s( J) H: ?CREATE TABLE useronline ($ E- U. j( X2 ?- j- [
timestamp int(15) DEFAULT '0' NOT NULL,
; ^; |2 ]* v0 D; o, T' G+ Hip varchar(40) NOT NULL,
' d! F2 I5 c" H* M$ u7 Q5 J- ~file varchar(100) NOT NULL,
) N u8 {6 |3 @8 C( v' oPRIMARY KEY (timestamp),
' @) N' L' w# PKEY ip (ip),# |) H- W' N/ w( s7 q
KEY file (file)
. |" A+ [7 Q( l: a/ y% k+ |% M);下面我们是PHP脚本,首先我定义MYSQL的信息。3 L+ L2 |+ g: A5 W5 v! k
$server = "localhost"; //你的服务器0 r* c4 A$ m1 J' C8 e& Y2 o0 W$ F& v
$db_user = "root"; //你的mysql的用户名
% U( `( R1 e5 k& ~$db_pass = "password"; //你的mysql的密码
5 ?# t, Y2 |! A2 f9 C. \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
D& O) |4 }' B9 Z$timeoutseconds = 300;取当前时间。" z% d' h& y7 F3 V) z$ v4 l& v6 N
$timestamp = time();上面的完整代码:6 M; l7 V# {2 p$ u6 _
<?php# ^3 A/ B3 Z; |+ J% R! @, |3 V
$server = "localhost"; //your server
3 A) N: B9 h9 J* u$db_user = "root"; //your mysql database username' f0 n8 |2 H7 W! Q) j
$db_pass = "password"; //your mysql database password if any# g2 f) ^' `' G. u
$database = "users"; //the db name4 p' W- \/ N9 x: F& E0 j
$timeoutseconds = 300;//timeoutseconds limit
2 o" E- d6 i, b7 Q; g, {" A//get the current time1 W8 A! ?3 ^: M. b) w
$timestamp = time();
, A) T6 j; U$ M; a+ L//calculate the lowest timestamp allowed
) J+ ]: w0 W1 K) q) Q$timeout = $timestamp-$timeoutseconds;
2 q! C$ d- D. ]1 k" J?>连接mysql: G }! Z: ]+ T. j4 [( s2 Y6 d* E
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' W' S/ K/ I6 O6 w ?mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ h5 K6 {. F6 Vmysql_connect($server, $db_user);查询数据库的代码:
, h. g I( [% b9 O& smysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
! O& U6 ?1 Z: H! e: [1 k$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 k9 H4 @) n W+ h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
v. s( l8 i& O) ?/ q如果用户用错误信息的话,这样处理。0 [1 |# m" r2 l7 S0 i
if(!($insert)) {4 l" y4 f0 d9 D) @) @
print "Useronline Insert Failed > ";2 {" `( [; J4 C4 M4 z8 v
}然后实现当超过设置的时间就删除该用户记录。! Z1 G' R* s0 d; B% `
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, Z4 ~& K3 K7 E5 j8 R' Nif(!($delete)) {' M8 w3 C4 b2 A
print "Useronline Delete Failed > ";
i I2 ~; I# A8 { r; Z0 n h}下面我们解决数据库中不同IP的问题
# x+ k1 ]8 m/ I$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
, E6 o' S+ l4 w4 J( ]: x m. _- _mysql_num_rows(query);来统计用户,代码如下。
2 H3 [0 m R& d& S/ m2 r$user = mysql_num_rows($result);最后关闭数据库。7 E D7 {# v/ y3 a
mysql_close();显示在线的人数。
0 p! L4 Y" {) P1 ^: u& a1 Z( M" u8 o1 kif($user == 1) {
8 @& W* w; H: h; \3 m3 u8 g9 Uprint("1 user online\n");) x J9 Z9 f. H
} else {$ S! A2 K0 J0 g* g( q, f
print("$user users online\n");
5 j! w7 V$ F- z5 n}最终把上面代码写成一个PHP文件如下。
% [( c0 X% C0 _3 _$ Z6 x$ B) E s<?php% E8 O! T4 _. e# Z5 R
//Put your basic server info here
5 w" C, {" Z3 {* B. a7 K$server = "localhost"; //normally localhost/ J% x0 ~0 F% n: I, X2 r; h3 ]
$db_user = "root"; //your MySQL database username
- L1 c: z! S) v1 b" O' H$db_pass = "password"; //your MySQL database password
* D/ Y7 _% O- P' Z$database = "users";
$ ]4 Z8 u' b8 Q3 d8 i t9 G$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- u2 m/ n; l- f// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ {; g6 ^: z. z; x8 p8 N0 a3 ?
// $timeoutseconds seconds)
4 g, n7 s! I' p. e//this is where PHP gets the time
2 ?! X; E* K+ h3 w+ `) k, P" f0 i$timestamp = time();- }* }1 J; ?8 b& X1 N( m* I! m
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, d) \# f5 K2 _ o# k( g0 e$timeout = $timestamp-$timeoutseconds;
0 U( J( a8 G/ C5 ?. ^//connect to database- ]- \& ]# _7 E+ P% M
mysql_connect($server, $db_user);8 a9 G: [- Q N( n6 _
//add the timestamp from the user to the online list1 c2 p1 r: o! N! p
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES: c& z3 A( w8 p1 f1 k
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 o. U* S( y& ?+ w8 ~0 \: eif(!($insert)) {
6 F: m0 H8 a) Zprint "Useronline Insert Failed > ";
# v @8 @% c; T0 l}
9 l1 {4 e+ G& J. @, ?" V1 A//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! J% p- o0 l+ |
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ B7 a3 }. U$ uif(!($delete)) {* B7 B2 |7 a4 A# g9 T- E
print "Useronline Delete Failed > ";
3 b6 w" R" P6 Y' @" `}
5 Y( M$ |; W8 E//select the amount of people online, all uniques, which are online on THIS page
% ~* d; W8 {( g/ e3 [" x1 j5 j$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 X+ O& u' Y0 p* ]if(!($result)) {
! ~/ I S/ R) w4 a4 @print "Useronline Select Error > ";8 f$ Y+ `- r( z# {" ~
}
& s" O: U4 a9 z7 l+ r, \//Count the number of rows = the number of people online
, Q8 V4 L; Y3 B$ y( y0 T. H c$user = mysql_num_rows($result);
/ R, }- p8 \* h# l7 X8 G% a, }& {//spit out the results
& Q1 z& d9 o# j0 f8 |0 ^mysql_close();5 z% ?0 P. J- P( H" r5 N2 k
if($user == 1) {
; P1 ?% ? ^9 g9 \! E, Vprint("1 user online\n");
2 o$ {: Q. J- M; y} else {
9 q2 d8 C% N1 n( Fprint("$user users online\n");: [4 r4 S4 u |+ c1 q7 y
}, }% T9 d( g/ w# X3 D
?>
~" b0 x; p/ p$ v8 t 3 g; p; z/ f# C+ X" H' I1 @
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 q M0 y$ p- ]- }. ]7 {: T' R) u5 \
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
" y% K3 Y& j) h. F! ]4 A我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
4 I2 s* J7 x/ m1 T2 A当然啦,这两款主机也是相当不错的。- d6 B6 f0 z" G6 e, K. F8 X
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 Z0 F+ ^$ P6 i- j标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年9 C, o2 ]$ L# Z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
! E2 C! f! ]( ]' T+ s# e! t空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 \ ?6 l: [- [: l$ l( i
自己加QQ去问吧。 |
|