|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 l/ L( |2 t4 K: t2 K" Q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 t2 J `) Z# N9 Q6 q3 Q" R. q首先我创建MYSQL数据库表。
7 c5 M q- Y2 t6 [& u; `CREATE TABLE tablename (# T6 P$ h! L+ N4 g8 W5 J9 O
field type(max_length) DEFAULT 'default_value' (NOT) NULL# S& A7 ~9 ]8 j. E! b. r9 A) {1 a! n6 |
}可以使用的SQL语句。
+ W o/ _% w6 s+ {) nCREATE TABLE useronline (+ j5 K" Q" y: ~' I% m, S
timestamp int(15) DEFAULT '0' NOT NULL,
# c4 h9 H c9 E5 u7 A* u$ {1 ?- lip varchar(40) NOT NULL,
" M9 v% Q- C- k) Y/ F: x/ Ffile varchar(100) NOT NULL,) F% c' A& H$ h) C* Q
PRIMARY KEY (timestamp),
2 @+ d( e* b; a% w$ r/ D2 n5 MKEY ip (ip),
* `& v. R( I* L; eKEY file (file)2 I' c: h' x Y# e8 E
);下面我们是PHP脚本,首先我定义MYSQL的信息。
3 a7 d# e# L2 f; t3 H$server = "localhost"; //你的服务器
( x. E# c5 B# E) B {+ {$db_user = "root"; //你的mysql的用户名
: [6 h: j9 T; E- W% d2 x* ~2 ~$db_pass = "password"; //你的mysql的密码7 C0 o8 ]) C* L/ |4 B6 a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 L9 p9 H2 q" I! U$ C( ~( ?
$timeoutseconds = 300;取当前时间。
& s" b) O3 F( b/ \, x$timestamp = time();上面的完整代码:+ a- G+ l8 Y: |
<?php
! u" `- }' j: |$ c) u$server = "localhost"; //your server
. E! w. T( {9 @% ~& v7 Y7 H3 u$db_user = "root"; //your mysql database username
v+ k. l" @2 [! \8 M$db_pass = "password"; //your mysql database password if any' ?) A: T2 V! M4 ?2 Z& q
$database = "users"; //the db name
9 g- _) r& X/ B# E8 _3 E$ c# k& B$timeoutseconds = 300;//timeoutseconds limit
4 _- p6 D- C' Z; k* e+ t//get the current time
6 v/ @1 f5 X$ ]8 n. o* a, N) ?$timestamp = time();
8 L9 N( w% Y. X: c//calculate the lowest timestamp allowed
* E4 g- ~1 e4 d3 g6 @6 O$timeout = $timestamp-$timeoutseconds;
9 l3 d3 M) ?; @) x?>连接mysql( q/ u5 g4 ?$ x/ P j, u
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。' v+ C9 O* E) ^
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
& b' e3 y/ M9 j* v L- B' dmysql_connect($server, $db_user);查询数据库的代码:
) p+ m9 V% K4 c2 {& K" `mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
" `& p2 E' R% o; y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
2 ^2 B8 U/ B- J! F5 `( O5 H" k' R('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- m' s* y8 b' H- c! b8 R如果用户用错误信息的话,这样处理。( r8 V1 Z- Y- h! w; {
if(!($insert)) {
" g: L0 u" h. r# l7 y f1 |print "Useronline Insert Failed > ";
+ D+ p3 q, {, S}然后实现当超过设置的时间就删除该用户记录。: K" T4 e5 N2 e4 y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。 s* ^# H; c9 I9 \1 j# o9 w
if(!($delete)) {# ~0 W( l- k8 y$ Q
print "Useronline Delete Failed > ";
+ U2 f9 A" G6 r}下面我们解决数据库中不同IP的问题
( G7 V# v: e2 p8 f8 H' V$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用; e% Y0 o/ a6 @
mysql_num_rows(query);来统计用户,代码如下。
1 C; ^' q1 r8 c% N# `$user = mysql_num_rows($result);最后关闭数据库。
! @/ s* v- g' e8 n* R8 cmysql_close();显示在线的人数。$ P2 S& t) h# k( x; \, N. P( F
if($user == 1) {
$ m6 }% p I, w1 i) kprint("1 user online\n");& V$ f& d' u' x3 P
} else {' p0 m) N6 F. a; k* g( m
print("$user users online\n");1 ^4 |9 z+ p3 _6 H
}最终把上面代码写成一个PHP文件如下。
" h2 v3 a! X/ W: V4 T6 I& R<?php. H1 O5 j1 Y j0 o
//Put your basic server info here1 T, g9 I* }. ~
$server = "localhost"; //normally localhost0 _/ c( P/ ]4 l' h2 f5 J
$db_user = "root"; //your MySQL database username
. _0 w2 Z) I6 f3 x$db_pass = "password"; //your MySQL database password5 m9 Z8 i* M0 t* h v- D2 K
$database = "users";
( ~) }- R# H+ {$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" G: R/ ?$ j+ w7 H// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last9 E d4 r1 G" Y) h. @6 D {
// $timeoutseconds seconds)
8 ^- K4 G; b% Q' w0 S" }6 T* M3 O% T//this is where PHP gets the time
# L$ I) e# L9 ]) z* v/ o+ W) [$timestamp = time();/ T" o% \$ t# L# W' _
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
9 ]( x8 C4 O. \% S& Z4 D9 V2 u9 F$timeout = $timestamp-$timeoutseconds;9 K1 g5 d9 O0 }5 k1 g
//connect to database
w3 O* E3 x0 fmysql_connect($server, $db_user);8 t( R% a$ J+ P P; s- t
//add the timestamp from the user to the online list
% {1 o0 U C; v/ f3 W( Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES d$ I* Q, E; i. P9 Y+ p
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 Q$ a% D1 p) Q' O5 _
if(!($insert)) {
9 Q3 F; d$ e+ R, r6 {% s+ dprint "Useronline Insert Failed > ";
5 \( s; l7 V4 A7 r* `}
0 J) `; ^5 g$ C: K//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
" ~5 ^7 N7 v) q6 _4 U* H. }$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. A; b# N W# A! Eif(!($delete)) {, E5 P+ N H6 ~8 F4 d+ K0 a
print "Useronline Delete Failed > ";
" G5 D9 q |* g! s7 M, Z, C}
1 |- Q; Q) j4 }2 H y" h8 d//select the amount of people online, all uniques, which are online on THIS page
; `8 F7 n/ K: {4 ~% s( V# r$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, o1 c& o/ |; aif(!($result)) {
5 W9 k! `" }) Vprint "Useronline Select Error > ";
) k) ^2 q; ]1 V/ B}
5 j# U6 j$ h. M! ]; C: Z# C1 T. ?//Count the number of rows = the number of people online
% ^& E2 d- r# j$user = mysql_num_rows($result);
+ Z2 H7 U7 K7 o6 A$ k0 S7 C/ `6 p//spit out the results
3 W* ^/ m: ~7 m4 @5 z: B. r' zmysql_close();
/ O- E( O0 `# H' w. ]if($user == 1) {; N$ e5 k: |3 l0 a+ Z
print("1 user online\n");
- d2 g3 H9 {# ~4 `( ~. G} else {* f. H: v6 e# x/ m1 J
print("$user users online\n");, y+ g6 R8 Q* ]- b. `: o; G
}9 b8 ~. F& j( Y E
?>
4 E% p& D5 S! K4 V0 _+ T3 j% }! W$ C8 r
! v6 Y7 j8 e( i. \2 T' i以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
3 w/ z9 S2 ?; W3 H+ D# I1 z时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
u+ Z/ r" m, @& Q2 ?. |5 E我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。1 |6 C+ Z4 Q' `' I5 i x. T' X
当然啦,这两款主机也是相当不错的。( G' u8 o- b) @( }
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 c* e) X; C( J
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" R: B- `4 Y6 ^5 b$ @
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
9 h( D+ o' _% r0 l9 D4 F1 K/ Z6 b/ _空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
6 x" o) o* U: r& n自己加QQ去问吧。 |
|