|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 V; J1 W, R# \. o; c2 h
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
& L! N2 H- U) r& M首先我创建MYSQL数据库表。) B- o* P7 W0 v
CREATE TABLE tablename (/ ^$ r M" e- ~: g: K: T9 G
field type(max_length) DEFAULT 'default_value' (NOT) NULL, h# w" @$ V2 F/ i2 n O% h
}可以使用的SQL语句。: I# q' u% h& h7 B) g% d7 j" p/ m
CREATE TABLE useronline (' r$ u5 X# d. @6 E8 u
timestamp int(15) DEFAULT '0' NOT NULL,2 U& D4 X. }" B9 n. G9 a
ip varchar(40) NOT NULL,
4 v. n6 I, j' C8 n8 sfile varchar(100) NOT NULL,
4 \: a P& P4 ZPRIMARY KEY (timestamp),9 W4 F( t( T) G5 V) E% s z
KEY ip (ip),. C; L, h8 j5 t6 H0 c( s
KEY file (file)
! G- [6 e k1 R$ a: Y);下面我们是PHP脚本,首先我定义MYSQL的信息。
% j0 r2 a' D" k+ |4 |8 e- x! F$server = "localhost"; //你的服务器
+ t4 m, k" Y" L4 |$db_user = "root"; //你的mysql的用户名
3 S1 u; ^, z }6 A& L( O9 P$db_pass = "password"; //你的mysql的密码
. V5 r$ f) [6 M k/ g4 T$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 Q/ y! B& C) g, u2 c C2 J- q+ f5 l6 \
$timeoutseconds = 300;取当前时间。1 [& I# G/ b0 U7 L8 s* B
$timestamp = time();上面的完整代码:$ G, Y. H4 _1 K7 [
<?php
3 g% X3 E7 u" f7 N' y0 \$server = "localhost"; //your server
2 w0 U. H5 l' Z( }. }$db_user = "root"; //your mysql database username
3 G! p9 M& l# f! i) r- a9 G. }$db_pass = "password"; //your mysql database password if any
( a3 P$ s( K" y+ ?; J$database = "users"; //the db name5 r E* G m9 r2 K( U4 D, S* T
$timeoutseconds = 300;//timeoutseconds limit
* Z3 R+ O! k' i, v4 W" v$ M' @//get the current time
2 S* ~3 P6 n2 I- z5 O1 [$timestamp = time();
: {- T. z0 s6 `# V/ n+ x+ w& M0 T//calculate the lowest timestamp allowed
; ?0 P( J$ ^* D* v1 O- H$timeout = $timestamp-$timeoutseconds;
+ i4 z- P- M$ M8 P6 Z- O?>连接mysql
: G. D8 m3 {$ m: i; dmysql_connect('localhost', 'username', 'password');也允许使用变量形式。' H2 A; Y0 g$ q! ~. |' Y. F6 V
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接2 Z g+ q6 t5 G# t
mysql_connect($server, $db_user);查询数据库的代码:
$ L" B0 R' l, g Amysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. |: U) Q( c1 x$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 I F& p: D" R: U' D('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");. P6 A/ G H$ ^$ n0 j
如果用户用错误信息的话,这样处理。
: O7 K% A4 A( T2 f1 uif(!($insert)) {- V$ {3 Z5 H2 c% y' S
print "Useronline Insert Failed > ";
& @# b4 ~# F4 A) ]; F; @2 P1 v0 d q}然后实现当超过设置的时间就删除该用户记录。& h2 f! G1 X L8 Q4 p
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 I/ q% H" H* X. f
if(!($delete)) {
6 g% ~( ^4 Z% y% K- X1 ?( R5 eprint "Useronline Delete Failed > ";
, G9 u! b& L8 |; e}下面我们解决数据库中不同IP的问题
) ~; V0 W& k7 o/ y0 `7 C' r$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) e' `4 w6 o$ Imysql_num_rows(query);来统计用户,代码如下。- U2 V7 m0 {/ ~% ^1 f
$user = mysql_num_rows($result);最后关闭数据库。# b, Q5 \' \# o( X' z
mysql_close();显示在线的人数。
% I) ]' Z, P1 S8 t, pif($user == 1) {7 h" R8 m: ]: B3 E
print("1 user online\n");; s7 ~% u( M7 n, v. T( @% ]
} else {1 Q$ d* K' @% p& p( r( [$ u) V2 l9 j
print("$user users online\n");
# |% I) D" ^: f; w" A1 ~. e+ j5 D$ `}最终把上面代码写成一个PHP文件如下。
) C1 [1 h9 W- `2 l<?php
) j& Y% v% [8 E- m//Put your basic server info here, w7 z0 K9 l/ k- p' z: K8 s& d
$server = "localhost"; //normally localhost
; X6 M v" m' E( X$db_user = "root"; //your MySQL database username# g) h0 i) ~! r9 v: w; V
$db_pass = "password"; //your MySQL database password8 W; v5 M. B/ i! o1 _& w1 k
$database = "users";
, \: L; L. P( ]9 Q4 n$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ F2 R" Z5 \: w. b/ x; h, p1 l) D/ u
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
% @+ d( `/ J' r( i: l// $timeoutseconds seconds)
1 b* `4 P! V" t* S( y//this is where PHP gets the time7 k' ]* H( p& x, I, E+ n
$timestamp = time();8 g9 C2 S- T3 m
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: N1 V4 j# v$ E
$timeout = $timestamp-$timeoutseconds;
7 S- v2 ]/ U& S! a//connect to database2 \+ S3 L o2 N, r6 F6 O
mysql_connect($server, $db_user);' I% t) B p, R4 [2 H' Y \4 V
//add the timestamp from the user to the online list+ \" x* L! |7 n
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, p" c( \# q S, p3 G( B
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 P3 K1 I0 f3 t( E4 V2 Kif(!($insert)) {
8 |2 g: H6 E5 f8 ?+ V" W9 xprint "Useronline Insert Failed > ";7 q, V4 q" E# A9 @ U
}9 S9 D/ k# G2 j8 ` D
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds. d1 Y2 r/ z9 f- K
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout"); B; o; ~& p7 k. y4 O
if(!($delete)) {$ V& b3 E. k0 F* o# B
print "Useronline Delete Failed > ";, P' R3 M/ Z+ `: K) o6 H% T! Y
}& V i3 |4 G) { d9 U4 H
//select the amount of people online, all uniques, which are online on THIS page
5 F" N, M' V* i, o9 i$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
1 r( s4 J' y4 }9 ~7 eif(!($result)) {9 s. r2 |$ Y1 S% L, @6 Q5 b% T* f
print "Useronline Select Error > ";
+ e. I' u0 v$ i, j}, Z7 x# l' {) V: x. J! Z& s6 v# @
//Count the number of rows = the number of people online0 u% e8 Y' S" y/ i+ z3 P
$user = mysql_num_rows($result);& z- ^- T6 [5 v/ y3 n
//spit out the results' W# l6 o! i7 F( g: F- i9 [: l( a
mysql_close();
: a4 @) e! i3 C; _if($user == 1) {, @* P% Q M$ Y; X
print("1 user online\n");3 e7 {4 P* v, Y" s
} else {
& E$ e3 y+ Q6 Y$ wprint("$user users online\n");) q/ n/ {7 R- I7 ]) a. v2 T
} ?/ D& H- m6 O" m: s
?>
3 r4 u, U0 l- z5 [- L! d- ]0 r " \7 ?2 W2 Z% K4 b* q: x6 Q: m
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
5 Q( b/ Y$ i) m9 O# m# _3 _时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
y7 l1 z# l9 ^; G我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。( A- i0 C+ ~: ^
当然啦,这两款主机也是相当不错的。/ e! F9 p4 |$ u+ z9 W% D5 C( E9 ]
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
1 K' k! O1 \) t k6 ^8 M标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( Y% H" S) j1 h$ y
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ - C: D- M. T7 N) x
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
! P: ^" L% I0 [! }! ?+ [9 m1 Z: f. v自己加QQ去问吧。 |
|