|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
8 |1 x6 O# f, M% ?* c我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。! {: H+ L5 H N, }! K
首先我创建MYSQL数据库表。$ x$ R* I) v; ^( z$ a; z5 r* L0 u' T
CREATE TABLE tablename (- V: S$ w/ |+ Q2 {
field type(max_length) DEFAULT 'default_value' (NOT) NULL' { I ^1 o b" W Y* r- I8 Z
}可以使用的SQL语句。
3 A1 U3 g; _0 i8 U( |CREATE TABLE useronline (
! R0 s9 Z' ~9 u9 g* p& o1 ?timestamp int(15) DEFAULT '0' NOT NULL,
8 B. V8 E! G9 {2 K. T8 `2 ^$ l7 Mip varchar(40) NOT NULL,8 N- u8 W4 T) f& U$ m
file varchar(100) NOT NULL,
2 Q8 s9 f) X" T1 j3 I/ U( \PRIMARY KEY (timestamp),# N4 [# P+ n+ t& ]( _
KEY ip (ip),
7 w8 R! e) Y) }0 R( OKEY file (file)
5 s, g5 P1 Y+ k. B3 W! b);下面我们是PHP脚本,首先我定义MYSQL的信息。& w) z' Y2 a% c
$server = "localhost"; //你的服务器
" x* e) H3 u; u2 f% G* w7 C$db_user = "root"; //你的mysql的用户名
9 ^8 @" |# A) c! W2 J( E% N$ c+ Q$db_pass = "password"; //你的mysql的密码9 V3 r9 z# }8 U) A; v6 w
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
% F$ { T3 U, r. D- @1 M: H$timeoutseconds = 300;取当前时间。3 w0 w3 K. x# F8 w
$timestamp = time();上面的完整代码:0 L' [! a* W: k: ^& ^" [: j
<?php
& J% |3 v+ O; i2 G, H2 c+ j: v3 Y$server = "localhost"; //your server
) h/ |4 O# h9 o/ @- j* F$db_user = "root"; //your mysql database username
3 R& }0 t+ e6 N' M. M4 v p0 ?7 S$db_pass = "password"; //your mysql database password if any1 h! `( F' K; M' s
$database = "users"; //the db name
; \: Q( L3 {$ `6 m* ? I$timeoutseconds = 300;//timeoutseconds limit; ]: `) P" ]" j9 T- f# D
//get the current time
- Z: \" }- m1 u$ F. C" U6 G% Y$timestamp = time();7 v' o/ |( O+ U+ x: m
//calculate the lowest timestamp allowed
K- m' ?1 `7 o, c9 P$timeout = $timestamp-$timeoutseconds;& H* s' B# Q7 ~" x
?>连接mysql
! Y9 H9 ?- u7 F5 |; Kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。( D/ S4 u3 l; u, [! k
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接' t: j8 B5 ~, {+ ~
mysql_connect($server, $db_user);查询数据库的代码:/ W5 X6 J5 S- f% _# E( F
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。% A: y. n/ O2 ]1 M: x+ Q% \
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" _& C+ Y# Y# l% A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& X/ g9 ]+ o$ D如果用户用错误信息的话,这样处理。, o1 _/ A* j% M6 v
if(!($insert)) {
" `1 m8 j1 k8 } s' Q, Qprint "Useronline Insert Failed > ";
* b/ R2 d" {( a6 u0 L7 q2 f}然后实现当超过设置的时间就删除该用户记录。. n9 \$ ?% _( j. n
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 h7 Z) T, ~4 u
if(!($delete)) {$ t7 ?) H( p; S& ^( j( A( J; z
print "Useronline Delete Failed > ";, W1 k- N4 p6 {. j0 J2 ~
}下面我们解决数据库中不同IP的问题, J \. U. `( r* B) a$ Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. C! L3 q% ^3 ]: amysql_num_rows(query);来统计用户,代码如下。# H7 ~: O9 A( W8 T% |' B9 ?
$user = mysql_num_rows($result);最后关闭数据库。( B; v0 j- ?0 Q, L" E1 L, j
mysql_close();显示在线的人数。, m3 l% C, s/ ~( ?1 q
if($user == 1) {
$ ]4 c6 I; p' A7 I6 p# S' M3 |print("1 user online\n");
8 F3 s$ _2 }$ E0 L2 U8 p} else {
8 Z' W6 L$ d" K/ Wprint("$user users online\n");
( g% G+ I" Q8 ^' {- {! l}最终把上面代码写成一个PHP文件如下。
8 X% o/ e' P' M1 N9 N* {<?php' I0 |1 M! W" h3 g( Z* S! [( Y7 D J6 T
//Put your basic server info here4 ]* [( e) {& {1 B* E
$server = "localhost"; //normally localhost& ~2 j4 E: N' |( @; D! x* {7 {
$db_user = "root"; //your MySQL database username
; ^+ I+ S. T* S1 _) i$db_pass = "password"; //your MySQL database password: h- {8 ?; i7 W" t
$database = "users";6 o: _& B* W6 v) A5 f! o
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 H3 j7 V# l8 B/ R# [4 ~/ u- X' t// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 H/ V) a }* A1 m// $timeoutseconds seconds); Y( V! O' d6 y7 H. v0 L
//this is where PHP gets the time( M$ Z+ T+ U6 }' [" ]- D
$timestamp = time();
( [4 R$ o5 e$ \//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 ^3 c8 u7 I% l) w/ [
$timeout = $timestamp-$timeoutseconds;
" J- A+ j: { U, A//connect to database+ H8 I9 m7 v$ l V& _) }
mysql_connect($server, $db_user);/ N' `! h; o* _1 @4 V3 A( g
//add the timestamp from the user to the online list9 ]) b+ D- `0 x; R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& e! k+ E9 b* h% [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 C5 U! \0 K5 m$ O* O+ r
if(!($insert)) { g: z% J* ~6 k0 F
print "Useronline Insert Failed > ";
x% @: M: n. s8 H, H8 g$ i0 A}
% N$ M$ m( O7 V5 {& I5 Z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
2 [7 X4 Q" R- R' D$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");, I4 b& `, d7 p: g& Q0 w
if(!($delete)) {) S5 b! A, y" j- R' ~2 ^
print "Useronline Delete Failed > ";
8 s, Q4 Z: d( f* E}
3 f5 g, k+ A0 t8 B9 ?9 o//select the amount of people online, all uniques, which are online on THIS page
g, U1 m) z& e: [7 d6 u6 r0 T* S$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: L2 R4 }* E, p/ ?. ]
if(!($result)) {0 R7 {# k& Z8 R
print "Useronline Select Error > ";
. X4 W, U9 p, o, T n" N; g}
' T! o" x) {! K6 F+ h0 A//Count the number of rows = the number of people online
( W' X# J& u3 @ K8 v# r4 O$user = mysql_num_rows($result);% V+ ^7 _6 c* b/ I8 i$ Z' ~) p
//spit out the results
. v% B$ P$ D7 z1 bmysql_close();( {; Y+ Q, \3 t y; y, v
if($user == 1) {4 w% O7 Q/ A2 v6 c
print("1 user online\n");
6 L: ?, i P8 P) i) \} else {4 @. H6 j5 x# D- C7 Q9 V2 r/ K; @
print("$user users online\n");" @$ h# x7 |- } y) u* Z
}. c! W3 _2 P4 g! h- |4 q
?>: E$ u* P. P# b* n% P% y2 U

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