|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; _% ]; ~8 e2 _我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。 v, _; J3 C3 \) y
首先我创建MYSQL数据库表。
1 I9 k5 y" l7 R% r2 b4 ]4 {CREATE TABLE tablename (3 N: C1 D$ Y1 ^0 Z: ?; w
field type(max_length) DEFAULT 'default_value' (NOT) NULL
$ C5 U; [/ F) J; O}可以使用的SQL语句。
9 [8 a4 o( v+ `) ICREATE TABLE useronline (
8 s; I \9 _3 i3 P2 u' [8 }9 c, Vtimestamp int(15) DEFAULT '0' NOT NULL,
- M4 i. c* O4 t& ?1 }5 `) @/ q3 pip varchar(40) NOT NULL,2 L+ W; _6 [7 G# t7 O4 R9 T! ~
file varchar(100) NOT NULL,
1 c% [8 e. {6 n1 o8 W( ePRIMARY KEY (timestamp),
7 S* k- G7 h# K2 rKEY ip (ip),
! j* d Z* R$ @9 J; X8 aKEY file (file)) M5 N" c! i7 M) s+ Z
);下面我们是PHP脚本,首先我定义MYSQL的信息。
% k4 ]; k! |' t" m+ I$server = "localhost"; //你的服务器
& }: ~0 C$ ~" s. l$db_user = "root"; //你的mysql的用户名
2 \9 a4 W' F1 |$db_pass = "password"; //你的mysql的密码
& O, O9 \( A0 T8 K, Y, G$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)3 Z5 _8 s# z+ i
$timeoutseconds = 300;取当前时间。+ b% L/ A4 S: w& W( O& h. }6 S) a
$timestamp = time();上面的完整代码:
5 S" `( y5 d- R. ~/ [$ u. M. X<?php1 d- b& s: P& G
$server = "localhost"; //your server
- T# ~. G: j0 p0 O$db_user = "root"; //your mysql database username
: W! L% b- g9 ~. I# h$db_pass = "password"; //your mysql database password if any
, i5 V+ O8 P6 _0 @4 K$database = "users"; //the db name
) f* ? M5 \( T2 H( c6 \1 b$timeoutseconds = 300;//timeoutseconds limit' p, N. [ ]4 a7 [
//get the current time
- l+ t' |0 {5 X$timestamp = time();) [: k9 ~0 H/ P3 E& S* d2 v( ?9 R
//calculate the lowest timestamp allowed6 e, v: r" m) `) v+ A( J" u* }( m2 K- O
$timeout = $timestamp-$timeoutseconds;4 Z' c- y1 e" ~6 p$ n
?>连接mysql6 T2 @3 a& r4 ~1 a1 o1 c
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
3 i- D8 S# {* X0 Jmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- Q8 r6 U! }6 E7 A8 x% p1 mmysql_connect($server, $db_user);查询数据库的代码:
5 I% n& ]' H- \" C7 r' W0 T6 ] Zmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。& B' i/ D- m! K. {
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 ?8 w' T+ e5 K$ ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( d* Y+ N' L+ T7 L% @如果用户用错误信息的话,这样处理。
% E% C0 T: d4 l% Qif(!($insert)) {
# V1 A% k) d6 w2 f+ B) [ ?print "Useronline Insert Failed > ";* G2 d; O* |; _2 I
}然后实现当超过设置的时间就删除该用户记录。) V, ^, D3 F* J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。* y# o* A: ^ b. r) ~/ ^% u- J3 g
if(!($delete)) {6 r# N/ t+ e$ p9 r' ?! O
print "Useronline Delete Failed > ";
- S3 l9 E- U$ v9 d0 t/ x1 m}下面我们解决数据库中不同IP的问题# R7 S/ ^' V) z1 B- P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
& y2 c4 a7 x2 @0 Cmysql_num_rows(query);来统计用户,代码如下。
) u$ E6 Y7 C4 z6 k# {; i% q$user = mysql_num_rows($result);最后关闭数据库。
[. A6 e7 S5 W. o% R) Mmysql_close();显示在线的人数。
+ ?# r+ i" N# |" t( yif($user == 1) {8 Q a, J5 r2 f0 f$ ~% i
print("1 user online\n");
7 U, U" n$ V, k& |} else {
" J# o* i9 P9 w7 s: P6 s" K1 mprint("$user users online\n");
! Z& F* A0 d! ]$ m! U# F! k}最终把上面代码写成一个PHP文件如下。
4 Q$ [, j2 N' G5 j1 S2 P5 B3 B# b ]<?php
' F( |% W/ j1 A6 ?7 W4 n' w//Put your basic server info here
; j- K5 ?0 Z; I! @$server = "localhost"; //normally localhost1 I" @+ R6 A/ q- f" F( o+ [+ k
$db_user = "root"; //your MySQL database username- c( S9 }3 g5 v4 S+ G3 p# r) f# l
$db_pass = "password"; //your MySQL database password+ n" k/ y" J* A7 y* S- g# D
$database = "users";
+ ?+ c+ P2 T3 |, v6 g/ k/ K$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! p1 E' }6 p. a1 D; y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last- O: A; I, {/ A1 }" B
// $timeoutseconds seconds)1 M# j9 {; W% |0 \
//this is where PHP gets the time
6 G3 W$ k$ I2 R. `$timestamp = time();
4 ~9 b! N3 w$ Z B# ]: a5 o- ~, ~/ W//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
) a2 U( i5 `4 S6 b$ U+ L$timeout = $timestamp-$timeoutseconds;
* z: Z O& d- H8 j( \//connect to database
7 ^& q2 V/ ~1 Y; @ k: d9 Z% `mysql_connect($server, $db_user);# D) z% f/ B7 L% L2 K
//add the timestamp from the user to the online list
9 I, d" h& s5 k9 {$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# W$ A+ p% @# g9 S; p
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 K& q; U% D: H" O, J- Xif(!($insert)) {( G b9 K7 D" \0 Q, @! k, }
print "Useronline Insert Failed > ";
: }0 }2 b. u- i/ C}. E# F" e3 K8 I3 m% x
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
3 U- v% b0 E: {. H' F- [ J' u, G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
W. t5 ^; l! E- J3 d6 W7 a$ {if(!($delete)) {) Y* v# s7 J* D: `$ Y; D
print "Useronline Delete Failed > ";
, C1 H( @% m9 g: u: e* _1 k+ }8 n}
# H" }8 W$ \8 n! Q//select the amount of people online, all uniques, which are online on THIS page4 |2 H2 H* r# \8 u) x& d
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");- A/ d. j1 C9 c( h% H: A
if(!($result)) {
7 w6 V) _& p. z+ x( @7 B; Nprint "Useronline Select Error > ";
2 x: P" i0 @* l- y- i( i0 g} `9 P, H, E9 \, ]8 i( {
//Count the number of rows = the number of people online* o, K2 |! n- E
$user = mysql_num_rows($result);
4 b/ b0 u5 S) {//spit out the results4 ~. I4 W0 J4 J4 T2 D
mysql_close();+ s5 K0 B4 g# ~! W6 b
if($user == 1) {4 W! V/ q2 K C" m& f
print("1 user online\n");
1 V5 Y5 s) d: z3 }} else {
( c# ]0 f/ o: F6 dprint("$user users online\n");3 k3 E, P! s* @/ y" C3 O- c, A
}! S4 a% r' z, H) }6 f
?>/ \! h- b: t- g7 N

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