返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 g8 G: M( u) i+ d8 }6 y6 ~我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 q' h* M  d+ O# }2 a9 i) T首先我创建MYSQL数据库表。3 t. ?0 o0 D  b( V1 c8 n' B
CREATE TABLE tablename (
$ n, P9 D$ `0 [# a$ Afield type(max_length) DEFAULT 'default_value' (NOT) NULL3 j& t0 [% Z3 \$ e3 }
}可以使用的SQL语句。
0 X! _3 q& U! e+ F  t9 aCREATE TABLE useronline (2 s8 G( R, T7 e3 f+ W
timestamp int(15) DEFAULT '0' NOT NULL,
" j) P7 c8 ~( e/ F  T8 p6 Fip varchar(40) NOT NULL,
: q2 r. p1 y& Y8 |' E& Zfile varchar(100) NOT NULL,4 q4 t3 ~8 r' s2 d5 {0 S
PRIMARY KEY (timestamp)," ^) b% H2 y9 z
KEY ip (ip),* W" P6 C6 L% E, T! K
KEY file (file)) A/ F+ s# |& [8 _, X" J1 l
);下面我们是PHP脚本,首先我定义MYSQL的信息。) u& v  c; x; ?- ^$ p4 i  x
$server = "localhost"; //你的服务器
  ]4 l' {1 g+ \" C# ?0 ?  k$db_user = "root"; //你的mysql的用户名6 x7 w( d0 N1 K! e" L) M, Q0 U4 s
$db_pass = "password"; //你的mysql的密码
+ F7 z6 i4 C0 Y9 f3 m3 d" Q& h" ~$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
. b$ Q% s# o4 v. p, y# e$timeoutseconds = 300;取当前时间。
8 b& z2 U4 r4 B) o% K$ M/ {$timestamp = time();上面的完整代码:
3 V% _; X: l; U6 q& @<?php
. c: V. G" E3 ^7 Y* }6 R5 t- Q$server = "localhost"; //your server! w" M- d+ E" M6 ~4 }
$db_user = "root"; //your mysql database username
. Q" @; k: S( |$db_pass = "password"; //your mysql database password if any
8 |4 v& ?$ }9 _6 O$database = "users"; //the db name! n  E4 A8 P0 ~
$timeoutseconds = 300;//timeoutseconds limit% T/ b/ e7 O" p$ o4 ]  D
//get the current time' y0 `+ p9 s# r. ?7 q
$timestamp = time();
" |- u6 m: f+ l! m& @* t//calculate the lowest timestamp allowed8 S" ~2 [! N9 E6 X% R3 p7 g+ \4 X+ O
$timeout = $timestamp-$timeoutseconds;% [+ \) `) n( a; L) n. F+ d) r
?>连接mysql6 z9 p4 b9 U0 g& `- e" y
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
) l3 ?& C6 t$ c# d  ^0 g$ \& d' t- kmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- s0 J5 S& o, U/ V9 W  Nmysql_connect($server, $db_user);查询数据库的代码:. ?. Q* J! `7 S. B8 ~
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
, g. z* e7 ~; J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 r3 \+ q& Z. E8 M$ ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- E* d* ?4 e3 D; Q* [& B
如果用户用错误信息的话,这样处理。
& _4 o" o2 C2 cif(!($insert)) {9 N* T; o& d7 d7 v' x# c
print "Useronline Insert Failed > ";
8 _1 j* Q- ]4 I. Q}然后实现当超过设置的时间就删除该用户记录。% ^4 _- L& }0 i1 t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 B  l1 G) p2 P& u) \1 Zif(!($delete)) {
* H- N9 ]5 X. E/ w) Jprint "Useronline Delete Failed > ";
& D1 a5 }6 i. Z6 ]}下面我们解决数据库中不同IP的问题
7 ~. J+ N: n. A  k8 Z1 Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用6 I# F. ~, i' N8 G" E
mysql_num_rows(query);来统计用户,代码如下。
$ J# Q4 K" C. t( K) Z* S7 C$user = mysql_num_rows($result);最后关闭数据库。, s* j3 }2 \7 [6 X0 g
mysql_close();显示在线的人数。7 J' c2 I* `" g( z, e
if($user == 1) {  \  ^8 V& s% p
print("1 user online\n");
1 |9 N8 Z3 O4 u' F/ D7 d# {} else {
, y7 ?+ z, S  K" Q$ \6 _, L- ~print("$user users online\n");& q: y2 ~3 `+ @, b/ c" @# F
}最终把上面代码写成一个PHP文件如下。
& H$ N2 {) G$ i  Z<?php7 @& Y+ x, S$ `# H
//Put your basic server info here
! N9 [+ W3 g( u: b5 |8 J) m3 j$server = "localhost"; //normally localhost
+ L0 W2 B0 ?* c: r) l$db_user = "root"; //your MySQL database username8 J- N6 Q( Q; J/ _: C/ F
$db_pass = "password"; //your MySQL database password5 @* ^" V% G+ r6 ]5 J: a
$database = "users";
4 s% j+ e2 N( {/ C$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 w  A7 [$ b5 s5 i' A8 w& g// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last) r, R4 E, Y9 O# Z+ J
// $timeoutseconds seconds)/ x% B' @$ X4 ~4 U$ @. d8 S" O+ x
//this is where PHP gets the time
+ J0 k! @8 ?! N- V& S$timestamp = time();9 `9 t' j  I7 X6 D9 Z2 {
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! U8 z% O( X% r3 B3 E# N  _$timeout = $timestamp-$timeoutseconds;
" R  d* S- H3 o4 |, ]9 e% s//connect to database
/ ~: N: k/ `  w2 P; ^mysql_connect($server, $db_user);$ Q3 m3 N" {. L8 u) P+ N8 h
//add the timestamp from the user to the online list1 [. u1 V3 M, p4 y; C' H* s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 e, \5 ]" ]2 q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, n/ [: V3 J- s% kif(!($insert)) {+ n7 |* P5 [$ G+ H3 ^/ r1 x
print "Useronline Insert Failed > ";
; l8 X! T6 t2 T7 b9 x}
+ X! Z  z5 H* B8 y1 S+ i//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 {8 x; @0 ^$ m/ T7 p: k7 U. X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 Z4 z6 m/ Z. H9 v- g/ cif(!($delete)) {
: x/ Q. H3 m- e. F& s" z0 }print "Useronline Delete Failed > ";
' d! a6 e- B9 n  n9 h+ e& w}
6 b" o  v* K8 O$ _4 E. ?7 y//select the amount of people online, all uniques, which are online on THIS page
2 b) R; Z% H% w8 n8 T; h" f$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" |, d8 F1 u* h& R  @# Z
if(!($result)) {
7 x; f* Y( ]) Y1 m# x7 X5 |' ~, fprint "Useronline Select Error > ";
3 @! ]  |, ~1 P; P" D, q}
. I3 L  ^7 ?0 v4 R3 M: E//Count the number of rows = the number of people online
+ F/ b  y- y$ b# P' U+ i5 ]$user = mysql_num_rows($result);* w$ A3 X6 ~' e5 _! O4 A) H
//spit out the results% ^2 e5 W, G% M8 ~; `
mysql_close();
" O- x0 Q0 @2 n2 Mif($user == 1) {6 ]% @8 S0 I" `0 H
print("1 user online\n");
3 t/ f9 S, H0 R5 K} else {4 H* H  r+ U1 v
print("$user users online\n");
6 w/ \$ p) X; v, b}
' Z: [$ S7 [7 k8 e1 Q?>& x/ W/ U5 n( S0 d% _, i9 \

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

返回列表
【捌玖网络】已经运行: