|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 N& H7 G! N/ H/ r' F
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 k$ B4 |/ n, W4 E
首先我创建MYSQL数据库表。9 `6 m4 b) z9 a% _. l0 ^
CREATE TABLE tablename (6 @7 U4 ?. R! Z& Q+ R( I
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 ^. u6 ]) V( m7 n: B: S
}可以使用的SQL语句。
. W# o6 {' U6 U8 [* YCREATE TABLE useronline (1 P, E; p$ J: @! H
timestamp int(15) DEFAULT '0' NOT NULL,% a0 w" Y' ]+ H. E `
ip varchar(40) NOT NULL,
/ [+ F% |/ h6 h; H$ N+ L9 a8 q) c7 wfile varchar(100) NOT NULL,
! ]$ Z' X2 \, p( OPRIMARY KEY (timestamp),
; {- K# e6 Z0 F. lKEY ip (ip),& t' Y& L9 }& s9 X6 a
KEY file (file)
. z1 E+ ?6 K8 x- @" J; o, {1 O- L);下面我们是PHP脚本,首先我定义MYSQL的信息。
4 S Z& M* d; J# X3 r# T# {$server = "localhost"; //你的服务器1 w, T1 F8 \! {4 s! v: K- g% Y
$db_user = "root"; //你的mysql的用户名* d; |' H; @+ f& v# D. I
$db_pass = "password"; //你的mysql的密码% K7 o1 Z( d# \( x S
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* N9 w- `2 \% t* m, c1 T$timeoutseconds = 300;取当前时间。! H1 K5 K6 i$ P* A
$timestamp = time();上面的完整代码:
+ u% _/ v) o& i: @% x. x! h- Y<?php
" K: l8 q3 ?* k$server = "localhost"; //your server
" s+ p! Q. L, z6 K- `0 U" m$db_user = "root"; //your mysql database username* f5 m% s; ]0 q4 b
$db_pass = "password"; //your mysql database password if any
; @& N4 {' C9 h$ G' P$database = "users"; //the db name j4 K0 {0 a& b' ~! M
$timeoutseconds = 300;//timeoutseconds limit
. K( f) x0 M( o2 K! N//get the current time
5 g# _7 q# P% ^$ u$timestamp = time();
+ I5 z) G: c% E% |//calculate the lowest timestamp allowed
8 u" e& z2 P1 p, k$timeout = $timestamp-$timeoutseconds;
0 _, K0 t/ }- H+ n?>连接mysql! R1 j% Q: O; G. Z* X
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 i( D1 I0 m3 bmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接1 Y |4 t( y4 J
mysql_connect($server, $db_user);查询数据库的代码:
+ U' F" O. S. B; Q5 _! zmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ S) e, Y% S4 b: C9 |- f$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 d! }: L3 E. J. l# f- w('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 p1 Y- ^* x( m$ \. k% O如果用户用错误信息的话,这样处理。. b6 h x! O3 i$ S7 ^5 ?) M+ O
if(!($insert)) {, F$ d) x; g4 j' R0 z# g, R1 f
print "Useronline Insert Failed > ";
8 {8 e, V+ f: U5 y}然后实现当超过设置的时间就删除该用户记录。
' a7 M6 h- m7 \$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。2 o) o: c( C8 h K: c' o+ m
if(!($delete)) {- ~! c5 W" n0 [, N {3 F! j. y
print "Useronline Delete Failed > ";
3 e0 { ^# F) f& ^' E}下面我们解决数据库中不同IP的问题4 o# h% r! Y% @
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
" @. p% D/ j Smysql_num_rows(query);来统计用户,代码如下。& N" w" _, @7 _% [% x6 ^
$user = mysql_num_rows($result);最后关闭数据库。7 m# I. r. u! x" z
mysql_close();显示在线的人数。
. `5 o7 S: t8 O6 `+ ~7 Tif($user == 1) {4 O5 Y5 @2 v N. J( I' r# s+ s
print("1 user online\n");- H1 ^9 w- [9 w6 U
} else {
$ F$ B( B } |! b* S! V6 t" Uprint("$user users online\n");4 N: h5 q( A4 Q3 L" q% U
}最终把上面代码写成一个PHP文件如下。, g. y3 F x/ p
<?php6 W6 [0 `) ]9 C. C
//Put your basic server info here
4 H9 v1 _0 q& e# c9 l M) ~$server = "localhost"; //normally localhost, k3 e' b. D, ~2 C" g& L& Y
$db_user = "root"; //your MySQL database username
( T1 m$ Q3 g0 H" ^$db_pass = "password"; //your MySQL database password; `) ^6 |! H; t2 p' R1 i6 r
$database = "users";
+ m2 k& }9 }2 t# h0 Z& D- _$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, C. R5 D" z: L; ?. H# \/ j/ L
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 ~! p, c* `, V$ N1 X* x( K* R; d// $timeoutseconds seconds)
; D i2 v n) g4 U1 D//this is where PHP gets the time
9 o/ ?" `% A7 a) E8 M6 _$timestamp = time();3 i5 e- H5 t1 U2 H4 n9 A ^
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, l* Q- h3 ?( _4 ?% A. r* v$timeout = $timestamp-$timeoutseconds;/ B t l2 E8 K6 T
//connect to database6 f& n7 _3 H$ c1 n1 Q& j
mysql_connect($server, $db_user);
% U: j, n+ \ S' ~" O: W2 i+ r( H. o//add the timestamp from the user to the online list
( m. J. N& I: ?5 F$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 e# E( d7 ?- }: R" P* L+ ?/ v
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" f. N S+ _4 }! O* Fif(!($insert)) {1 \4 [7 z, A/ \1 P4 Q0 M0 F. i
print "Useronline Insert Failed > ";+ w ~& b# n: O3 f! N
}
; {5 J$ L0 n# _1 S, d# n6 F//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- G9 J+ O+ E& }; U$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");; R! i% [% R- x
if(!($delete)) {
# A- a! V! l8 ^print "Useronline Delete Failed > ";0 c; D% O. {0 Q) v, \7 m
}
" T+ n! Q' Z. |: ]//select the amount of people online, all uniques, which are online on THIS page
* c7 Q- j; w: ]' n, }' z8 J) k$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 b6 W4 h1 w, J1 `* O T) }
if(!($result)) {5 p; j0 G' R# b) S' X
print "Useronline Select Error > ";
) d* z5 _* _2 n3 i0 ?, A1 q}
s+ _. @8 ~* d/ S//Count the number of rows = the number of people online4 d9 ]4 h' i" w/ c+ n& O
$user = mysql_num_rows($result);4 Q Y; N$ b4 k8 U% \9 h- j0 ?
//spit out the results! k9 g9 I) C/ h0 x% N7 {
mysql_close();
1 [% s% _' m* e7 Rif($user == 1) {( K7 m3 I& Z' f( A5 @8 k- e. F: d* ]
print("1 user online\n");
2 ?# }; _- @6 F" z$ y% [} else {3 O5 K& t5 E. M6 @9 o! f! N; E
print("$user users online\n");
2 V0 l. X9 B. `5 B: Y9 {# _ k} `# u s/ c0 r( z! g3 U" z& k
?>
1 |0 y& V4 F% a4 @# Z0 h0 C' P * @7 Z0 E8 U% X: L/ c
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。/ i0 |& Y9 l! D- F7 g
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ A* Y( e/ ]4 p2 F( f9 B- \我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; r W, A8 P% C
当然啦,这两款主机也是相当不错的。0 N- N8 S1 {$ V& m. ?1 s
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年# U4 X* K- V( b3 o3 l
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年3 y" u* y7 r. f w: Q* d
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ : R7 W$ {0 u1 ]4 n
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55! Z' R! \8 A0 G4 F7 Y& U
自己加QQ去问吧。 |
|