|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 w9 r5 ?2 o2 ?( {, @3 O
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
7 E( s9 ?/ y0 R) Q首先我创建MYSQL数据库表。
0 ^3 P" S+ d6 E/ l2 LCREATE TABLE tablename (
5 k& l3 t; z, e4 f" Rfield type(max_length) DEFAULT 'default_value' (NOT) NULL
/ N( M2 o$ }/ V7 d1 S}可以使用的SQL语句。
: d+ ?% O7 b1 ?3 bCREATE TABLE useronline ($ i: e1 C# @" f1 O7 Y0 c! J
timestamp int(15) DEFAULT '0' NOT NULL,
. s/ D, |2 y7 w: ?( j( Oip varchar(40) NOT NULL,& P! @ Y7 T) N6 f" J5 S3 J
file varchar(100) NOT NULL,% r. }6 m( v3 G- T
PRIMARY KEY (timestamp),
2 D! E5 L/ _* DKEY ip (ip),
( J% f4 S6 b& f7 } {* f9 q$ gKEY file (file)& D q1 X, _% M) y
);下面我们是PHP脚本,首先我定义MYSQL的信息。
* s2 R0 e5 @$ ~$server = "localhost"; //你的服务器2 E) a- x+ e6 {9 N# t
$db_user = "root"; //你的mysql的用户名
$ V% P: v; m' x7 @) R3 i$db_pass = "password"; //你的mysql的密码
/ }. g/ q" P* C& E$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" y! v5 b* ~) d+ _) L2 A0 u/ T
$timeoutseconds = 300;取当前时间。9 h' h" F' o+ X
$timestamp = time();上面的完整代码:
0 F* b ]! T6 o+ l/ @% E# ?<?php# B& S g- i9 Z( p# }* F, A5 T
$server = "localhost"; //your server
: J) v# Q6 ^3 m' c- ^" v$db_user = "root"; //your mysql database username8 c, e5 X" d$ Q, O3 E$ f
$db_pass = "password"; //your mysql database password if any6 s- t, a4 z7 p% ?
$database = "users"; //the db name1 }; d) Q( I/ O2 ?3 z
$timeoutseconds = 300;//timeoutseconds limit" k1 E* q) y, z/ b* ]% u
//get the current time
2 D1 m2 K% C0 {$timestamp = time();4 I; M+ f$ R1 \$ d- q
//calculate the lowest timestamp allowed( V" s& ~5 a7 q/ ~. M* K
$timeout = $timestamp-$timeoutseconds;0 |- a: |5 H& ^! D5 _7 `
?>连接mysql
8 K! W7 W9 {7 i9 R# s9 Z# emysql_connect('localhost', 'username', 'password');也允许使用变量形式。" T- X# o, U# D
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ U2 `9 A' J. G: A' b1 L+ m' ~0 z2 a- {
mysql_connect($server, $db_user);查询数据库的代码:
. F6 E8 f- C+ Amysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 m/ [9 R) F& n+ D$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# [; v, M L: k! s/ a. V0 e2 J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); l+ w; Y* f% v; z s4 W, Z1 U
如果用户用错误信息的话,这样处理。' C+ Z/ z2 M1 Q4 O5 w" p
if(!($insert)) {# d0 I: _. X; l4 k3 d3 N" m; N
print "Useronline Insert Failed > ";$ U" d" y |8 p4 R$ G. X) y
}然后实现当超过设置的时间就删除该用户记录。
! L' ^' r) w1 N0 n8 @2 g$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
t# }% \' ?/ N7 K) @if(!($delete)) {2 d4 c2 m! |; W! F
print "Useronline Delete Failed > ";
% C8 b+ Y" ]* I$ s F}下面我们解决数据库中不同IP的问题
+ j( `4 j9 [- R! a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 E5 x# C9 o( G# h& [! Pmysql_num_rows(query);来统计用户,代码如下。
6 Z5 J J" }) ^3 ]! m7 Y$user = mysql_num_rows($result);最后关闭数据库。
' K! n6 Q W. ~# A7 dmysql_close();显示在线的人数。+ s1 c# D/ n+ A$ Q
if($user == 1) {
, e9 k: p% Z4 a' j7 k1 m" uprint("1 user online\n");: r8 U( p( @( t6 u) ^
} else {
# f: G! B* ?" c, Pprint("$user users online\n"); y: u9 n: S% G3 b
}最终把上面代码写成一个PHP文件如下。. m* f9 n& p3 f0 Y) d( B1 r
<?php6 p/ I7 b" |+ @
//Put your basic server info here' \, L U, H) L7 s& j3 ?
$server = "localhost"; //normally localhost0 [' [8 |$ I" p& g7 n8 `1 {
$db_user = "root"; //your MySQL database username
! k4 u8 m0 N/ a1 ^5 C$db_pass = "password"; //your MySQL database password! K2 j1 T g+ h
$database = "users";
6 ]' V$ q5 N/ F$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- K8 b/ N [! ~( C6 M7 R) Q: k// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
0 y: D3 w' v5 K6 H1 o9 D8 I// $timeoutseconds seconds)
1 ^* p5 W0 `0 h* K//this is where PHP gets the time
, O# T; ^% C! O s6 s$timestamp = time();
/ E S8 c! m8 b//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: G% J/ T1 Q! p8 F6 {" P2 ]" m
$timeout = $timestamp-$timeoutseconds;
- p. ]; |& s0 r. A; E/ K& |//connect to database
& P8 }0 X3 y0 Y8 k$ omysql_connect($server, $db_user);) T Q/ T3 k8 B/ g4 s" L
//add the timestamp from the user to the online list7 q1 o0 l; @. G9 k! H' A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 S( Q! C0 @+ E% g: T
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" h2 Q1 L) G& Q' cif(!($insert)) {
) ]# \ B1 `# B6 @- yprint "Useronline Insert Failed > ";* l: M9 i5 f* z$ w8 h8 u% l4 Y, }
}
' R5 W3 B; n$ Z/ H7 x- Q3 K//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.) ]$ ^ ?; l# f' l9 Y* t, C7 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
& ?6 Z- j# c, u6 Z- E I7 rif(!($delete)) {2 i% W& g$ S; \" w; _) s# U' f* J
print "Useronline Delete Failed > "; e J7 c0 l: |" u+ F
}
) V1 l/ r) O1 S3 x2 j+ q e//select the amount of people online, all uniques, which are online on THIS page4 B1 b* w( S m7 ]* j) J- ?+ ]; Z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
: F) W+ Z- W* s. gif(!($result)) {. E2 M- j& r) E/ Z0 R/ Z# S4 w+ H9 H
print "Useronline Select Error > ";
# M% l. e0 P; Y: p( h; c2 a/ |}
2 `5 i3 m3 `8 m; w3 |4 ~. A1 e W//Count the number of rows = the number of people online
8 F& ?$ z. D: O! g# p$user = mysql_num_rows($result);
7 E) W) R/ ]0 j$ E5 }+ \//spit out the results1 N) ?1 V C2 M( n7 ]8 b X
mysql_close();
, ]' m1 P- ], d5 Z& A2 m! H" \% c* _if($user == 1) {
. @, | A3 {8 @9 Y) P. A5 Bprint("1 user online\n");9 H' i: `* o* ]; j6 ]9 O
} else {5 v0 d, E4 s9 O, U& A
print("$user users online\n");
7 _. E2 p3 W1 J n; g. o- `}
% D/ S# _$ ?# Y% x& J?>
, A% _- J& S% ], Y* D
8 o" X9 N& g8 {5 R以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 d* ~ S0 C5 R g3 d m0 D时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。0 A. r) t8 P5 d" i+ x, F, Y( U
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。+ N+ P, E% d( o- D* r
当然啦,这两款主机也是相当不错的。
, \7 H6 z2 M) V5 B智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
/ }; g p& C8 g$ _+ n标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
9 o x3 F a/ }提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
) J C5 x: |6 @: [5 k& d空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# k3 W \3 a0 r) ]+ f自己加QQ去问吧。 |
|