|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; V% p, x8 P( R; V' Z8 h% q" [
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 p( a1 }( B/ M2 G# Y首先我创建MYSQL数据库表。
+ ]# ~/ ?! U+ {, C, u+ V! CCREATE TABLE tablename (# g6 G1 i# T, T
field type(max_length) DEFAULT 'default_value' (NOT) NULL
! x& u$ ^$ r0 u/ T4 H$ W}可以使用的SQL语句。0 s& u/ P1 ? r4 |" s5 E7 y7 r
CREATE TABLE useronline (
4 J# U7 @% O8 J5 i: Z3 _timestamp int(15) DEFAULT '0' NOT NULL,. f- ?+ d2 i6 I& x
ip varchar(40) NOT NULL,3 `. n( b! K) H$ d& S6 C" K
file varchar(100) NOT NULL,
2 p3 Q% f% z; O0 s. e UPRIMARY KEY (timestamp),( y2 R4 y2 \5 z
KEY ip (ip),; j+ Y4 S8 R; y* M' x
KEY file (file)
2 X$ g$ i n% s8 J$ M);下面我们是PHP脚本,首先我定义MYSQL的信息。: k; m5 e4 b N% ~/ w
$server = "localhost"; //你的服务器) ?: J: V3 f3 z
$db_user = "root"; //你的mysql的用户名3 C& t) ~# m9 J9 ^/ H" f0 \
$db_pass = "password"; //你的mysql的密码
3 e8 R1 d, I2 S5 ?+ `$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 L5 W/ y8 m8 ]+ J2 l M
$timeoutseconds = 300;取当前时间。
6 m8 I& u3 f% U N9 e2 @$timestamp = time();上面的完整代码:! L6 W3 y4 l8 P4 q
<?php( l8 G2 f+ j; N& F8 L2 ^) N
$server = "localhost"; //your server
2 O+ \+ p6 r3 J# G8 c. z! \7 L- r$db_user = "root"; //your mysql database username* V, |8 j% k9 t# v( z. r6 U* I; w/ U
$db_pass = "password"; //your mysql database password if any
* H7 D3 X; g) ?) Q9 `. I# R$database = "users"; //the db name3 w _( A2 j9 p- P- b6 t
$timeoutseconds = 300;//timeoutseconds limit$ f( W$ {+ v* X, Z9 d) Y, z# c
//get the current time
+ [2 m# F, @+ i' h/ Z E$timestamp = time();+ R' g8 j+ z, _- k" d$ {. y
//calculate the lowest timestamp allowed4 `6 U( e. @; d6 z/ ?+ d
$timeout = $timestamp-$timeoutseconds;- \ }2 g* I" Z! b) [: C1 x
?>连接mysql
7 K4 n+ U8 G! kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。# E4 S( |" y2 {$ E
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接. z7 L7 z) V8 J# Z9 C
mysql_connect($server, $db_user);查询数据库的代码:. v9 S* r& [; {6 }2 e% y. Z% M( r+ G1 c
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。5 X! l1 P: x: ^% @4 i8 ~
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% L- C0 p) g6 X* h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 r- W4 @! _" |9 |2 h6 H如果用户用错误信息的话,这样处理。
; n' _6 c: @7 ~" P# f) Hif(!($insert)) {
( o' i1 m- r" @9 Oprint "Useronline Insert Failed > ";
' F0 M1 w7 h& |( x}然后实现当超过设置的时间就删除该用户记录。 i" U0 ?$ r: G. G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
. G2 s. w) n# \/ J7 {! _- Qif(!($delete)) {! m' t' ^/ a0 A
print "Useronline Delete Failed > ";% U5 ~. ~+ c% e5 N
}下面我们解决数据库中不同IP的问题8 i' x+ V- Z9 K# z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 D$ M( V* ^1 c# b. s4 d' R
mysql_num_rows(query);来统计用户,代码如下。9 L7 s: ?2 k+ z( W( B
$user = mysql_num_rows($result);最后关闭数据库。" n% T. U* }( [: L3 y/ ~
mysql_close();显示在线的人数。
. {* n1 h& d2 Z, R5 sif($user == 1) {
4 } A+ C! I. k+ S1 E$ R0 D% Q3 sprint("1 user online\n");, g9 z! q4 n9 s# O- g
} else {' h5 U* U: c9 S
print("$user users online\n");* \" G- E4 S. K' o/ m% n! e, e
}最终把上面代码写成一个PHP文件如下。& t& X/ t4 ~2 x2 X9 B
<?php
/ u0 c+ F2 J4 p3 q2 t8 M$ Q//Put your basic server info here
3 J$ h, l6 ?* p g' R! j$server = "localhost"; //normally localhost: C% K2 w7 [! o' H; k- V3 F- d* S& u$ }
$db_user = "root"; //your MySQL database username0 e) M; f2 \0 v- K4 L2 O8 q* ^
$db_pass = "password"; //your MySQL database password* G7 o2 l, W+ h9 ?' d6 H3 _
$database = "users";
& E/ A% ]/ @# @$ \& M2 N$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 d. ]9 W* C" O+ v x
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last' a9 W" R( G( O5 M
// $timeoutseconds seconds)3 c7 O# x# D" k( x8 d3 k3 T- y
//this is where PHP gets the time
- O6 H& g5 y: O* ^, F$timestamp = time();
; J7 W* Y# c& s//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ h; u/ V) o# f3 I/ `; n$ i) _$timeout = $timestamp-$timeoutseconds;
8 M6 G6 Q% F9 ?! b/ x/ }5 s//connect to database/ M6 w8 P) ^5 a* Q" E3 N' @0 d U2 ^
mysql_connect($server, $db_user);
! h; u3 S4 c7 O9 v! g//add the timestamp from the user to the online list! \3 R8 H" `+ Y! b8 e9 V" |' v! S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 S4 ~1 k7 t/ E8 }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); r: L5 z( u( i5 m: {! A! ^2 `
if(!($insert)) {
" o0 {- ^+ k2 S9 n) Bprint "Useronline Insert Failed > ";" h' F7 M. }& u4 h( U( w+ v- @0 d
}) m* D- V1 T$ E8 J, j% h+ d5 d
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 M# Q4 g" ?' \# S7 n6 E, z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# k- X! G$ B& k
if(!($delete)) {, p& X( {+ B0 E. ~! h6 ~
print "Useronline Delete Failed > ";
% [. d3 }: J) s v5 o}
' u4 h: ]% k: y+ P8 ~1 U//select the amount of people online, all uniques, which are online on THIS page, |+ d& ~1 \! w3 p
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 C# R- i. S7 a' L7 h7 p! ]
if(!($result)) {
! h+ h% q8 _4 O# K) y/ Dprint "Useronline Select Error > ";
* o/ ?# b5 k+ d9 u4 i$ ]}- T: y3 h2 c: Y0 X
//Count the number of rows = the number of people online" N3 `5 { _# h y2 R, ]( }- d
$user = mysql_num_rows($result);6 J0 F" S" n. v9 B: i0 b$ |
//spit out the results
( v0 O& D+ U. R% N5 |3 z! ]8 i* Gmysql_close();
$ X) R8 o8 V$ K, z1 T" Tif($user == 1) {
8 d! K l+ l' Q1 e' v& f4 oprint("1 user online\n");( M# n+ B5 y" ]) C4 H$ a
} else {
' ]& |8 d! a% Kprint("$user users online\n");
2 N A9 n3 }9 V1 ?* X- j- k}( m/ r- c' `1 }5 z8 ~
?>
" z& c( f$ P" W3 H8 d* r% N: w# q2 k- a
+ h$ h" f8 M' Z) f$ v以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。) ]* i' }) Q# g- ~ B
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
* n" Q& k' _# y: F. `3 o* c我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
) P+ O, Z8 y. _( z8 `当然啦,这两款主机也是相当不错的。
& z5 w/ l% @5 N) {* x智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年5 `- E5 U: B( o: j/ K* M- @
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- l" {1 l) B7 T0 f提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 6 n( v. B- }9 K4 R6 k
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# d4 t. [' w1 @. z2 q自己加QQ去问吧。 |
|