|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!% A( \6 H/ J5 G( F6 }9 B# M7 v
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) y( q3 U$ u( u7 n1 F# K
首先我创建MYSQL数据库表。0 a7 e8 j/ A9 v
CREATE TABLE tablename ($ n5 e" K. C2 M# |* V \# Y% H
field type(max_length) DEFAULT 'default_value' (NOT) NULL( y% \9 @9 r5 {' ^7 }$ {
}可以使用的SQL语句。4 I S- t$ ^) R( G8 d' t
CREATE TABLE useronline (
& a- d! H. m# S8 g! Utimestamp int(15) DEFAULT '0' NOT NULL,
- j. P" i. C8 Sip varchar(40) NOT NULL,
) g. u* o2 G d* b/ `' [file varchar(100) NOT NULL,
" ^) a- r7 |$ QPRIMARY KEY (timestamp),
. w& b5 v% I6 V+ C6 z- RKEY ip (ip),
! C, V- n: k S+ B" n; mKEY file (file)$ T4 z5 ^9 p i, i" v! t2 j f
);下面我们是PHP脚本,首先我定义MYSQL的信息。
5 j2 ]7 q4 X. j0 g6 M7 M: b$server = "localhost"; //你的服务器
9 o/ e1 h% S( P/ V$db_user = "root"; //你的mysql的用户名: _( }3 T# q* Z" y% v9 k8 X* u
$db_pass = "password"; //你的mysql的密码( Q( k3 Y! C E' [ i/ A4 t
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
0 g9 e! ^4 K D: O$timeoutseconds = 300;取当前时间。* h! W5 b. F; ] {1 R( ^
$timestamp = time();上面的完整代码:
7 K/ s$ Z- Z# a* \$ I( t3 X0 _<?php
+ ]' P& |4 I+ B% ^4 t. `# w$server = "localhost"; //your server9 ]5 H( L5 @6 u2 z. i8 y" I' Z
$db_user = "root"; //your mysql database username& f+ N7 k, L: Z. e" Q1 g, {
$db_pass = "password"; //your mysql database password if any
, L/ G; z4 \2 Z( q0 e: U! G0 y$database = "users"; //the db name; `7 W3 b; E3 n# l- P& a7 f" U* l
$timeoutseconds = 300;//timeoutseconds limit# h2 X6 E5 ]' x+ P0 z# q
//get the current time% C! p$ a$ A1 l$ e; Z* f) N4 `
$timestamp = time();1 }8 j8 e- y# f& q2 K+ @3 g
//calculate the lowest timestamp allowed
N, k8 p" k) o$timeout = $timestamp-$timeoutseconds;$ H( B" Q5 Q9 Q% r/ P3 }# q0 x
?>连接mysql1 y* j. a1 y; |! p; {- x8 F
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。! }5 ~7 q+ E( p4 V
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
2 C) k5 P. i- B5 ?! Z& Vmysql_connect($server, $db_user);查询数据库的代码:2 `1 e4 a2 ?& ?
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. c7 Q% h1 Y M( J) g3 V8 I) ?
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 w8 I" ^9 z' M" q! f
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- g. T6 F! C4 {+ Y5 H2 F如果用户用错误信息的话,这样处理。8 ]! c) J. V8 d' E9 a
if(!($insert)) {5 G. r3 ^' t! Z- i
print "Useronline Insert Failed > ";* Q9 P, e& b! h4 p
}然后实现当超过设置的时间就删除该用户记录。 t; V p) |/ {' I$ y' T7 A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。; @% j9 a P b$ O. P/ d/ L
if(!($delete)) {6 w3 v9 Y. W; g( H6 |3 N
print "Useronline Delete Failed > ";9 Y) G. @9 S. O4 [
}下面我们解决数据库中不同IP的问题
0 m6 K( q& d _9 W( t$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) f) L1 q# X! nmysql_num_rows(query);来统计用户,代码如下。" Z1 G+ N# |4 ^1 o2 m6 B, I
$user = mysql_num_rows($result);最后关闭数据库。
8 [/ g+ L+ @* [- d) {mysql_close();显示在线的人数。
7 L5 F& g0 ^8 D) K, Nif($user == 1) {
) c0 P2 C6 C! hprint("1 user online\n");. x: _, J. A2 O2 V4 @# J: o9 a( T
} else {
$ w+ t) u0 Z6 }% W1 Iprint("$user users online\n");
, K! S4 k1 [* M}最终把上面代码写成一个PHP文件如下。/ t& Z3 X7 v& q! G
<?php" Y; T5 ?% d* h+ @1 U, t+ G
//Put your basic server info here
, _0 y6 s/ l$ A$ P: m, w$server = "localhost"; //normally localhost
) q, s V$ W) N0 F7 n2 ?. ~5 F! j$db_user = "root"; //your MySQL database username
1 v$ a. [( `% ?$ T5 W }& e$db_pass = "password"; //your MySQL database password+ r- a7 c! V- x
$database = "users";
4 a @1 W# s$ [$ Y3 u4 e5 Y$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3 r6 _6 j" n% e4 c$ Y1 i0 n// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last9 C N+ N' X4 e' K% r
// $timeoutseconds seconds), n; u9 C8 k$ g. M& s1 G
//this is where PHP gets the time
q c; T; M% n" S$ O, s! T. t1 g$timestamp = time();
& \' S2 S+ ?3 d1 t! s. ]4 B//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! X# s) d, Y9 b2 ~3 N+ {
$timeout = $timestamp-$timeoutseconds;' r* K- w2 g4 n- b; K# s+ y0 u
//connect to database t9 x- f1 H: L' ~% V
mysql_connect($server, $db_user);
8 h- m/ H. a- y: `& |( n/ w//add the timestamp from the user to the online list
+ d% Q0 C/ l" |8 m. H9 X$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* G5 E5 _! X$ Y7 L5 M! v: T('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 ?0 F& P: i6 A& i6 T9 X& q) ]if(!($insert)) {
* z; X7 y4 @* U' Q9 Mprint "Useronline Insert Failed > ";
" t3 c" g! D9 B6 x}; T0 O, A, T1 p
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.% m; |: K* \$ ~
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
& _& N$ V, U8 O- B+ w zif(!($delete)) {
- A. s' l$ K) t% H8 d$ Bprint "Useronline Delete Failed > ";
N6 M) |0 w% E5 |; z3 B3 q4 m}/ H& _" p1 ^* H8 v" ~9 m
//select the amount of people online, all uniques, which are online on THIS page% j7 @9 K. H; f- N7 N4 {2 ~ n
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
' [9 ~( Q* g) q V1 hif(!($result)) {
: V$ \% |1 @% ?- C. k; cprint "Useronline Select Error > ";
2 d: ?& d9 Q8 {" ?+ D. e C0 d}
: G$ t4 l( {+ r) |' b. B7 F//Count the number of rows = the number of people online
@+ o5 f( w1 S* q4 R$user = mysql_num_rows($result);0 j7 L* w. B4 w
//spit out the results4 s. B4 K- I8 T0 {/ J) Q
mysql_close();1 n. Y% F" D3 K( U/ w) |5 z) q* F' P: G
if($user == 1) {$ R$ W3 }0 V$ \6 ?( X) H0 ^* G
print("1 user online\n");: d+ h( u1 X. O' p L
} else {% M {8 |3 p& Z
print("$user users online\n");2 e, O% B# S& {, y1 E
}
3 o* |5 u& a: _) M9 A: f; H3 O' i?>+ z, ]* B! R- G; l6 P& k

3 `. [* b! U6 z: L h8 J以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。. U- P# b% z7 \% b
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。( d, U) ?, D- `; k e
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。 H/ L1 E; J( }. @$ Q& _ g7 M/ y1 p
当然啦,这两款主机也是相当不错的。
' ` F6 o1 {% J智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
( s" H8 t1 l" g5 F! K标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年; V- a6 ]# U$ E+ `0 Q2 P
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 k) i. s" Z3 s9 U0 F$ H" q空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
5 ]' _! K0 b1 D6 l自己加QQ去问吧。 |
|