|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# u, _$ _$ _% G+ {( g我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
! c. i9 j8 v1 ?& Z& q3 F5 J首先我创建MYSQL数据库表。) y {) j- S9 q& H- w& o
CREATE TABLE tablename (7 s) Y8 n0 c& u; L x
field type(max_length) DEFAULT 'default_value' (NOT) NULL
8 l! S8 [# W' {7 q}可以使用的SQL语句。8 u3 V- A7 i& S$ C6 A
CREATE TABLE useronline () e D; D) k& J$ A }7 u) ^
timestamp int(15) DEFAULT '0' NOT NULL,
4 \5 K6 q3 J* |) @" f: V7 Y, b, Oip varchar(40) NOT NULL,
( ]6 W, M! O( k$ Hfile varchar(100) NOT NULL,
( y. B) s0 U% t [$ C4 BPRIMARY KEY (timestamp),, s7 G/ _4 g9 `; F" i6 E8 T& B% \
KEY ip (ip),
% W/ w8 C7 i6 |9 K O$ |KEY file (file): `( e1 j! x4 x4 ^) t) X. G
);下面我们是PHP脚本,首先我定义MYSQL的信息。
* W; {: q5 l0 a6 J4 p) P4 _$server = "localhost"; //你的服务器+ y( C2 L6 q9 A8 A8 ^' b6 c K
$db_user = "root"; //你的mysql的用户名0 c) f+ r% H: U9 u8 S
$db_pass = "password"; //你的mysql的密码
* E7 U1 i# J \/ l* n2 ^$ H+ D; T/ X' V9 X$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# |- H3 p$ b7 j, \- a/ R
$timeoutseconds = 300;取当前时间。- o* ~# b/ L# `, `* {5 k5 h
$timestamp = time();上面的完整代码:
: b; R5 A* f" M<?php+ g- F% m0 I+ {5 F$ W7 J$ U8 ?
$server = "localhost"; //your server7 e2 I8 ]/ e) }, y# j
$db_user = "root"; //your mysql database username8 B& U! W$ J6 Q! |" z& r
$db_pass = "password"; //your mysql database password if any
5 g, O- ^$ F2 C6 c. S' t L$database = "users"; //the db name
0 t/ t' J3 h; Q/ }" w- J3 ]' W$timeoutseconds = 300;//timeoutseconds limit. a( |5 h2 c1 c9 \7 A
//get the current time/ x; u& G l# S" X) e: @
$timestamp = time();- ^5 {) |+ s9 `" Q$ } `" m5 [4 e4 d
//calculate the lowest timestamp allowed, P. | q8 k; Q) |5 Y
$timeout = $timestamp-$timeoutseconds;: K- ]3 O2 h+ V
?>连接mysql+ r- w8 F0 w3 S) Z7 N
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 F0 h' v9 c* Q5 vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接- Q- n u1 r4 G* e3 p8 g0 z2 ^* k0 ~
mysql_connect($server, $db_user);查询数据库的代码:
. j$ g5 u! `3 z' E; Z* C% f* Vmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
7 z) f7 F, z: A2 O, q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% m: P7 w% S$ ^# {8 |('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& U" {2 E. i! w5 E% y/ t如果用户用错误信息的话,这样处理。
+ B5 T! q8 u9 p$ o5 o: A$ {if(!($insert)) {! R$ x* C3 j: }! u1 U/ K7 w
print "Useronline Insert Failed > ";: f' X6 Y+ t9 S8 c5 O
}然后实现当超过设置的时间就删除该用户记录。
4 B+ ~+ g% d: J! W# P; [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
5 P% s* w; S( N- K) [/ iif(!($delete)) {0 _$ V5 E& S8 h$ _3 f
print "Useronline Delete Failed > ";
& i a g: U& {. ?$ }: v. L}下面我们解决数据库中不同IP的问题% p# O- r( o1 C8 C+ r P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 k0 K0 C4 k, |- g# c a# j" _mysql_num_rows(query);来统计用户,代码如下。
9 w+ T Z3 X1 }# O$user = mysql_num_rows($result);最后关闭数据库。
5 ~" ~: Y- j9 f1 E% Nmysql_close();显示在线的人数。+ J% j5 O. Q3 ?' o8 o/ `" ?. i
if($user == 1) {
5 Y$ v; I. p9 n7 Uprint("1 user online\n");6 P8 ^+ Q& M0 D! E f8 ?
} else {
Y) h) B" t" I2 Nprint("$user users online\n");. F1 B. t! ^, e# j( F
}最终把上面代码写成一个PHP文件如下。+ R* `$ Z6 `# b! q, p% a
<?php5 g1 V& t# w6 M2 _# r
//Put your basic server info here
9 V7 T6 N0 _; v5 v+ v: s$server = "localhost"; //normally localhost
, {: w+ ~! A/ ]& I$db_user = "root"; //your MySQL database username$ V3 M2 \/ ^5 b1 o/ x1 V8 X2 k9 i
$db_pass = "password"; //your MySQL database password9 [0 T3 c( D# T& P
$database = "users";
& i5 O# |- T3 d& F/ k9 E$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are( |$ n9 w0 q6 k* I$ {
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
: J9 A- F& P5 M% _! y) p& l// $timeoutseconds seconds)
* T2 F+ ?) G/ W2 A+ Q//this is where PHP gets the time: p0 o6 T5 d- T
$timestamp = time();
r9 ?( Z' T4 ~/ }+ |4 m5 O K6 i4 M//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed5 a0 c: M6 m& E6 n0 v1 d
$timeout = $timestamp-$timeoutseconds;
, Q: W* ^& W5 w: c4 X! v8 M//connect to database
1 _6 i# w$ s$ [ Q6 G, U, ]mysql_connect($server, $db_user);* `% J* }# l* d+ z- L
//add the timestamp from the user to the online list6 c/ o# T: D2 B* W3 N( ?3 V3 `
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ u1 c6 A. X+ U: q, J, ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 {- `" d! l' X' m' p Mif(!($insert)) {
" i4 I+ d Q0 t0 j" J: sprint "Useronline Insert Failed > ";3 x9 r7 b0 S: U8 [
} ?: W0 n* t3 ?. l0 a( W9 z# a% r2 l) z
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
9 u0 ~. ^6 z+ Z: R- |+ S$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");3 m" T9 I( i: a" P0 A. W
if(!($delete)) {9 w- U& a6 v Q
print "Useronline Delete Failed > ";
- H2 I: |6 Q5 s7 ]7 D3 s, C0 e% R9 ^} c4 D/ U! t: O+ d v& N9 t b* e+ A% g
//select the amount of people online, all uniques, which are online on THIS page
# o$ B9 {- n- ? u# I$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
0 m$ o' c$ V: a: Nif(!($result)) {9 V# D* @/ H2 t% A6 t
print "Useronline Select Error > ";
. H% b! F. I9 |# W1 n2 d! H1 b4 T}' h9 j) W/ a. _& }- ], i; P
//Count the number of rows = the number of people online4 j y5 V8 ?4 \! \ N2 x, f
$user = mysql_num_rows($result);
5 M8 v" i! h4 a# c! i7 [//spit out the results
# A H8 J6 `0 n8 y- }mysql_close();. f: P8 }( W. M6 i
if($user == 1) {
- K) S+ {/ M; Q) aprint("1 user online\n");1 w# T. {& a! X1 F8 C0 O
} else {
" i: |4 S6 m5 Y7 k2 q" U' z# G' bprint("$user users online\n");
, @8 \6 ]5 g* t) Q6 m/ b}/ Z8 g$ X! r$ L& r/ D
?>
* }. W" `5 @1 ~6 [% h3 q/ s 1 Z" C- p+ |% Z& ?
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 R+ }9 ^$ i, a9 W! _
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
5 i; {( h2 f; u E我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# N; J0 B4 A# h% q) F当然啦,这两款主机也是相当不错的。" V6 j" Z7 n, g }* e3 i* N1 ?- R
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& }* Q5 j4 L n! A7 w
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年7 R/ w9 C" p7 {. a/ Z& y3 d, Y8 `- Z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, S, v; `" y# n+ a; A) K空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ Y1 O& B# Z6 S' A" X7 f/ N4 @
自己加QQ去问吧。 |
|