返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; e% [* K- ]( H$ F8 b) M2 G* q! J
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) [: i# }: U* E) \4 l
首先我创建MYSQL数据库表。
* T- V) |+ s) _& S# F1 n. \0 OCREATE TABLE tablename (
7 b, W9 Z2 H* kfield type(max_length) DEFAULT 'default_value' (NOT) NULL
: w+ y# u0 I  h. d# k5 ^9 W( {}可以使用的SQL语句。  v* s! P9 l; H* D
CREATE TABLE useronline (
6 ~1 }: Q& @7 y9 x+ m2 G9 b4 mtimestamp int(15) DEFAULT '0' NOT NULL,& D5 x0 Y9 f8 u& P# u1 q  w
ip varchar(40) NOT NULL,6 e" a! G$ q1 m9 q
file varchar(100) NOT NULL,
. A/ L- V3 G, O5 d! i4 o2 L$ ^8 tPRIMARY KEY (timestamp),  {; @4 }+ e1 I: C
KEY ip (ip),2 a1 z0 x5 ?" p* x
KEY file (file)
- R: D' g, p/ d# L) y);下面我们是PHP脚本,首先我定义MYSQL的信息。. ~/ \- \# L$ f9 J( I. j0 e
$server = "localhost"; //你的服务器+ r. [& L2 w9 w1 C6 J6 j  M1 t1 @
$db_user = "root"; //你的mysql的用户名% `& P2 \) c0 E/ ~5 C- D
$db_pass = "password"; //你的mysql的密码
4 N) A) V5 _4 a  y8 E/ Y) H$database = "users"; //表的名字设置统计的时间(多少秒内在线人数): z8 s# M% E4 f1 _3 d
$timeoutseconds = 300;取当前时间。
9 r3 N/ ~5 Y& Z& k5 h$ J& ?$timestamp = time();上面的完整代码:+ y7 p4 z8 A5 z  a1 T' d7 S) X
<?php
" r2 ?6 q, f2 ~& s: B$server = "localhost"; //your server
! ^! @1 G# q3 |1 D0 P( \3 d2 \7 F3 v$db_user = "root"; //your mysql database username
+ K% z( C. y. o' n4 l% f9 m1 _( X$db_pass = "password"; //your mysql database password if any
2 K6 s6 y" s# C: c1 C' b8 h$database = "users"; //the db name4 O. X2 d( ?3 d1 Q4 J
$timeoutseconds = 300;//timeoutseconds limit" g1 C$ u- H6 v" J/ q- W
//get the current time% p! b* A  m( e$ R, H; S1 }: C
$timestamp = time();# t3 }5 g- F5 C7 p
//calculate the lowest timestamp allowed
) I# P# q5 P& J6 @3 I* H$timeout = $timestamp-$timeoutseconds;; Q; {5 a5 z& m3 g' x" p; W
?>连接mysql
; a' l# [+ U5 U( p! omysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 B9 @+ u- Y5 A
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接# S2 N: x6 [& S& m% c# D/ n1 S& `4 a: ]3 G
mysql_connect($server, $db_user);查询数据库的代码:
# u. r( ^6 z+ Y% lmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。( Q3 l) d& Z: Y, i5 V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 a5 ]$ K! {" N) a8 l1 o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 u' u! e5 h. m7 J& E4 z9 R
如果用户用错误信息的话,这样处理。
& O. x  {7 x* n# yif(!($insert)) {1 X* }5 N  k4 c) Q+ J2 [7 Z
print "Useronline Insert Failed > ";% Q" j( B4 o0 V* T. |# B
}然后实现当超过设置的时间就删除该用户记录。
5 r6 H6 S. w' f) a5 u1 P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ y. d+ T3 i2 H0 x# E* P
if(!($delete)) {
+ v3 T9 @( E# ]8 p1 bprint "Useronline Delete Failed > ";! ^* H3 q/ T4 a7 j9 L
}下面我们解决数据库中不同IP的问题
0 Q) W8 P! a. Q& I$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 x+ C+ k1 r. y9 Q
mysql_num_rows(query);来统计用户,代码如下。
4 T( _( C. F. ^# W( p$user = mysql_num_rows($result);最后关闭数据库。
" \" d! V" X/ m1 {; t3 d% Wmysql_close();显示在线的人数。
1 Q2 l2 R- L! H+ x/ k. nif($user == 1) {
1 T7 ?, V1 p/ H* D  E& I& `4 J: n; Rprint("1 user online\n");
  p' v$ F; \' I' r} else {4 G" W7 r( |' M% f2 u) i! q
print("$user users online\n");2 q$ R: F" y7 H7 p) H; {
}最终把上面代码写成一个PHP文件如下。; n# e2 p( n3 Q' o5 a: J! f. p+ D6 j
<?php
) @! |/ f7 H& G1 ?9 [//Put your basic server info here
- K. w( X  i. ~: J1 V/ ]9 X$server = "localhost"; //normally localhost- t2 z* S" T7 r- k" f* P5 j
$db_user = "root"; //your MySQL database username; z, I5 Y  d: n) c# R
$db_pass = "password"; //your MySQL database password7 z2 u3 m+ n: Z$ {( }: g" ?
$database = "users";
. C( ^, B7 V) t$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, \  O7 R* W5 N; ?' r- O// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 i8 \! Z  @/ }3 z4 [: _3 d
// $timeoutseconds seconds)! a! q6 r8 ~  A. S1 o
//this is where PHP gets the time
) N; h9 j; f3 u$timestamp = time();) m8 ]/ f+ _& b& A2 n
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed8 R5 o$ W( m. e  r, `7 q
$timeout = $timestamp-$timeoutseconds;
$ R7 M6 }5 m6 H" f' q# p' M//connect to database
# k+ o! N; [* a0 `# ~7 L) [mysql_connect($server, $db_user);
* a6 N  y, A* p# h7 m' T% E5 G//add the timestamp from the user to the online list
& G  x" w4 [% d$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 A: t7 ?" D- U2 T('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, i+ N. _/ b3 V+ \0 R# {  a  R+ i& _
if(!($insert)) {
3 t3 X$ q( r9 I& z3 A2 z' Z+ f" pprint "Useronline Insert Failed > ";
( t: H, G, p! I2 G2 F+ ]}
6 S, d$ k% @5 ]# r4 y% @//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.+ y, M0 A8 Y6 B* A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2 z& `2 P$ Q: A
if(!($delete)) {+ d; s' X8 V2 Y/ ^* H; k
print "Useronline Delete Failed > ";
5 V$ y3 V& r6 I# v1 Y4 |}" P/ ?# n7 Q: D  F4 o. z7 I" M
//select the amount of people online, all uniques, which are online on THIS page1 q7 {/ o0 k8 U6 a  _
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 y6 {5 {/ t0 u# r  ]2 `' T
if(!($result)) {9 v% @8 N. C; `' K
print "Useronline Select Error > ";$ T: Z( M* @! x
}
+ ^( c1 q. U- h2 D) S, e6 D' f. s8 g# R//Count the number of rows = the number of people online+ Y0 y! l: x; i$ h/ s$ L' z
$user = mysql_num_rows($result);: S+ w' I6 L+ A  b: }
//spit out the results
! ?' B3 \. o- L$ k8 d. X; m8 cmysql_close();
" S" ]  B. ?3 Y( k& X* z6 L- Kif($user == 1) {  c3 \5 _- k! B- g4 C1 u  X3 n$ Z
print("1 user online\n");
( e0 P# H8 @9 ~% ^; ~} else {- K. _; C6 f. `& L2 M* [; {. B: K
print("$user users online\n");
2 O+ X4 C- s% W}& u9 j4 {7 n* H  K) @; Y1 C' y
?>' h6 T+ Y" _4 b1 [3 G" B

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

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