|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!2 w, v6 F* y9 D$ i( M
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 f0 m) N/ p6 g' M( j* D( L+ t首先我创建MYSQL数据库表。, Q# h( _; p4 x4 i
CREATE TABLE tablename (% f! L! e/ v) c+ p; w
field type(max_length) DEFAULT 'default_value' (NOT) NULL5 n) U2 @8 Z- z6 _( d5 [ _1 E
}可以使用的SQL语句。# A4 n c6 }+ s, N+ z6 t
CREATE TABLE useronline () X# g& O1 G c; `* ]% P7 w) u/ S
timestamp int(15) DEFAULT '0' NOT NULL,# q$ k' V/ e* f" M& F2 M8 [5 @
ip varchar(40) NOT NULL,( O& o" W% z" g+ a
file varchar(100) NOT NULL,6 ?0 U" a F4 Q# k J4 M
PRIMARY KEY (timestamp),
7 ~6 v; T4 T) T" ]- z/ ]KEY ip (ip),0 D) c1 }) ` \3 b
KEY file (file)9 i% y5 ?3 ?; n) v& H, H1 ]
);下面我们是PHP脚本,首先我定义MYSQL的信息。% k Y) l# O) e0 n' E
$server = "localhost"; //你的服务器
) }' r- W0 T; A, Q) G$db_user = "root"; //你的mysql的用户名
$ @; @/ X) k! F7 A) r4 |7 b$db_pass = "password"; //你的mysql的密码6 q+ _9 x9 _4 [4 t# K
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* N1 n+ C7 E% f: i( j4 s$timeoutseconds = 300;取当前时间。6 R+ ~% X# Z9 W1 e- m1 i/ ^: D$ v
$timestamp = time();上面的完整代码:
9 G* B8 }( U# ?- r+ e<?php& A* i) x5 m, Q/ C) Q4 I, f6 v# I
$server = "localhost"; //your server
+ G G5 R0 W; ]) f1 S. S2 p5 {$db_user = "root"; //your mysql database username
1 R2 j, b; V' j2 m1 D/ R5 B6 ]$db_pass = "password"; //your mysql database password if any+ V7 v, U: o+ D, h6 W, _
$database = "users"; //the db name
3 z4 q0 l$ S1 s# o! t( B3 ~$timeoutseconds = 300;//timeoutseconds limit
, I8 |, V% `$ J& ?" u+ N6 e//get the current time
' q: q4 N/ v! T8 m0 i$timestamp = time();
1 K( N1 ?8 y* J: R( E" G* x//calculate the lowest timestamp allowed" P4 i( q( A" o+ a' I. @& f5 D7 O
$timeout = $timestamp-$timeoutseconds;
; r6 O+ U, K2 `( e& q/ Q- u?>连接mysql2 M- j1 L9 x- Y/ P; u
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 j8 j/ {* X) L' v. M3 ]7 v; o7 @- p5 nmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接' M& p" O" t1 M& @' }, d3 b
mysql_connect($server, $db_user);查询数据库的代码:2 D- n0 z$ s& ?6 p# Z5 ?( M3 _
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
, E: V, Z8 _& F, F$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 K$ V$ x/ V; y- Z! X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* V. w* Z8 P- N* R/ R. i6 x* U如果用户用错误信息的话,这样处理。
+ V& e2 [) R! tif(!($insert)) {/ v3 Y' R5 y( \7 L$ N# B
print "Useronline Insert Failed > ";
; P/ e, ]/ H0 z' K+ ~ P}然后实现当超过设置的时间就删除该用户记录。
e3 Z1 P: C, L) d7 m8 D3 C5 o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# S) L2 A2 w( Jif(!($delete)) {
5 @5 V( {# p( ~. Fprint "Useronline Delete Failed > ";
% Q. C; G- w& B6 |9 T$ f( w}下面我们解决数据库中不同IP的问题! |+ y. w; s; d% f5 I2 @
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* G: Y S: k% p3 Z0 Y3 c. `1 U* W
mysql_num_rows(query);来统计用户,代码如下。
- ~4 R9 q6 j; y$user = mysql_num_rows($result);最后关闭数据库。
% C# k7 P# p4 w( _' R+ X) D: y8 qmysql_close();显示在线的人数。
, @! K) n: Y) r3 Y( d9 x+ Rif($user == 1) {& C2 B( @# N J0 D8 l5 o) ?0 c, L
print("1 user online\n");) G- {" M( Y! e3 w$ J0 w4 Q1 t
} else {
+ O8 t5 @8 p% {7 V7 G3 oprint("$user users online\n");
; t8 D" V+ ^7 B* X}最终把上面代码写成一个PHP文件如下。; G7 a" |1 j$ b7 Z& g
<?php+ p- K( \) N* M, i1 }
//Put your basic server info here
& E+ d8 F, Q7 l- p$server = "localhost"; //normally localhost
6 a' K( F7 V, }) m/ r9 ~$db_user = "root"; //your MySQL database username
$ K) p7 t! f( R) e' l$db_pass = "password"; //your MySQL database password, m& |0 \6 a/ W ?1 C
$database = "users";
+ V; b8 U2 U- }/ [$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
# ]$ [& s5 P* {+ D, f// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
+ T8 J, P1 S1 q4 Z7 @" x1 @$ X// $timeoutseconds seconds)9 x7 o( _2 e$ s- R* m" D
//this is where PHP gets the time8 K# E3 O6 Y$ z
$timestamp = time();4 k. X. d' V- O
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
1 ~! f# r4 u2 S* t3 g4 x$timeout = $timestamp-$timeoutseconds;/ N) G: D f0 Z% x/ E
//connect to database
5 @, c! N6 x/ H& s+ j( B4 }* H5 Wmysql_connect($server, $db_user);
2 {9 z4 C% X A7 J8 o//add the timestamp from the user to the online list
% @& m5 J/ P7 k1 `: P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- P/ u) y. k9 K1 ]% Q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ x- ]/ O+ b% A0 Y4 w' E
if(!($insert)) {
1 T$ D) t* M! X5 c( h8 h bprint "Useronline Insert Failed > ";
. E, J F: ^+ m5 W9 @}% Z" @, [ _8 p1 G; O3 W
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.5 t+ v8 F! y. d& z# J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");( ^2 c/ K$ z& |0 q0 ?
if(!($delete)) {1 y1 w( V' k* a6 D1 Q7 |" `
print "Useronline Delete Failed > ";' y" V: L: |1 B9 ~8 _3 k9 e+ a
}
8 J- b# d6 i0 v' E# j//select the amount of people online, all uniques, which are online on THIS page0 ~# e! O% |! R+ |' d6 d; E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& \: G5 _: X; T2 Rif(!($result)) {6 J! f# J) h7 c6 c: ]1 r# H
print "Useronline Select Error > ";
& `6 B( H6 A0 O5 B9 F' |% P/ E}
8 @, y$ |3 Q' \$ Q3 A& ]//Count the number of rows = the number of people online' W% K6 r/ G7 X6 u2 m7 w" r7 c- i
$user = mysql_num_rows($result);! J5 p7 Z2 J; a) k6 @
//spit out the results' y/ t6 t* C- g! t6 }/ G" ~9 V% @
mysql_close();
/ |/ @, D% r( L& {if($user == 1) {; ^) b; H- q; W; G- h
print("1 user online\n");
: Q' p D$ P2 z$ o" Y} else {/ _( z* ^; N0 u# M: _- k- m' V
print("$user users online\n");
* @2 \. B! I0 a. ^* O}
0 ]" Q( I L( E$ k?>' C7 {5 x5 v) Y4 O
: w9 x) y2 M# ^- x+ h* x
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。- U) M* s! B, d' H9 z- _$ [$ d
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
5 l) ]. G) I5 j* F) a0 n我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
* V2 E j: e% p$ j2 J, b5 K当然啦,这两款主机也是相当不错的。
1 F0 H0 h4 r3 n3 c2 i% }: z智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年$ l( U" p/ H$ v3 Y1 j
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! n7 J0 o' M: S5 G8 D2 ?, V5 @提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
( d* x; M1 H+ T# j* n' j+ S! N& j) x2 [' w空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=555 ?1 D. N: P; M+ \& r
自己加QQ去问吧。 |
|