获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ s# ?1 {0 _5 ]1 o我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
! W" x5 A; {% Q首先我创建MYSQL数据库表。; s, x. i3 V. X8 \8 q
CREATE TABLE tablename (
0 y( Q3 k1 |* n- @8 T, k; vfield type(max_length) DEFAULT 'default_value' (NOT) NULL
% o9 O8 m' N5 m5 m}可以使用的SQL语句。7 E* X, a- j4 r* ~. r$ ]
CREATE TABLE useronline (
2 K% ?# u2 Z4 N( J$ Z6 ]timestamp int(15) DEFAULT '0' NOT NULL,' [7 L1 K5 ^6 B
ip varchar(40) NOT NULL,
" y8 N5 ^) L" ]) r& yfile varchar(100) NOT NULL," Z! x# E5 |/ _4 x
PRIMARY KEY (timestamp),& c; l& Y0 Y  O9 |
KEY ip (ip),
! e8 n4 z& B0 T9 R4 CKEY file (file)) [0 u& h" Y3 K- n' j" B$ e+ r
);下面我们是PHP脚本,首先我定义MYSQL的信息。
4 u1 ]4 j& E: o$ {3 L4 R& e1 U$server = "localhost"; //你的服务器
! X  {  J8 C$ h2 B7 ?* U6 y$db_user = "root"; //你的mysql的用户名
3 m- h& |# R: l  E$db_pass = "password"; //你的mysql的密码1 O8 A; H3 k9 {
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)% a7 M: p* D3 L, z8 ^
$timeoutseconds = 300;取当前时间。+ X& i8 A6 j, P2 P2 I
$timestamp = time();上面的完整代码:2 [' j# d! W6 _5 u1 a6 T  B; V- c* C, f
<?php
+ X) m- N/ e% G. g' p$ D% Z# N$server = "localhost"; //your server
7 q1 M1 V) E2 t$db_user = "root"; //your mysql database username
! h) u) b- P7 z9 f% C$db_pass = "password"; //your mysql database password if any
0 m9 b  b" ]* M$database = "users"; //the db name
% v0 \. Z% \6 W, R6 ?# r; h$timeoutseconds = 300;//timeoutseconds limit3 [3 y2 N$ d) D! `+ N* i
//get the current time
+ u- F- @7 N. h# h# F$ ^1 C$timestamp = time();0 M/ `; X+ ^  m
//calculate the lowest timestamp allowed
/ `5 u8 A( y- W+ a. ~( V6 I: _$timeout = $timestamp-$timeoutseconds;
6 s1 d+ N" o4 w  M+ H?>连接mysql
) J, I( d' S! P& i% Q  kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
0 q- R: `( }7 m; W5 v8 n% z* Bmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
: p6 `  y8 \) E, h; `mysql_connect($server, $db_user);查询数据库的代码:3 m8 f5 I( |. I% W$ l9 _4 |
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. s5 s' C! d' Q" K" S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ T8 [1 s* u6 r3 J('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 ]4 G( G+ i$ w  b+ U0 F如果用户用错误信息的话,这样处理。
2 l- Z2 h$ k8 R2 ]- z) Eif(!($insert)) {8 P: K2 |# {: m. n1 a
print "Useronline Insert Failed > ";
; j4 j- X6 I0 C8 W% @}然后实现当超过设置的时间就删除该用户记录。1 V& b0 c! X4 I: y7 r
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 ]6 \. c4 z7 U: D
if(!($delete)) {
7 B* q% Q/ f. D. B, x- C8 xprint "Useronline Delete Failed > ";
0 h" M, Y$ n" [3 O- O9 V}下面我们解决数据库中不同IP的问题. p7 }, I" I! y& V2 P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
' X& S0 l* J$ h7 w) Amysql_num_rows(query);来统计用户,代码如下。
7 t8 E6 Y; y* t& J( t" A/ L  \* ^$user = mysql_num_rows($result);最后关闭数据库。
  i9 c) J( R9 o3 wmysql_close();显示在线的人数。
& ?/ t) W' x  }' g3 h, z! cif($user == 1) {+ d, w' q2 J+ T+ \$ P1 a! |
print("1 user online\n");6 m$ [& A! v0 n9 q# S1 I. m, C, R
} else {
" _9 H3 e: Q% k; K0 Oprint("$user users online\n");9 T5 @0 H( {5 f: |+ T
}最终把上面代码写成一个PHP文件如下。9 E3 d2 O' T$ P+ y4 `+ j
<?php' C7 x( L9 G, g' j  a( c
//Put your basic server info here
0 e$ m  X3 i' R! m. R9 O$server = "localhost"; //normally localhost
5 j6 S0 N! I6 g$db_user = "root"; //your MySQL database username
. `6 ?0 L$ d3 I2 ?( q& I$db_pass = "password"; //your MySQL database password
" }  E) {5 g# U7 i0 X: }! ^0 v$database = "users";
, S0 [5 j* O" r/ w% p$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are$ [% Q0 r# F% g- m
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 f. C$ A+ v/ w, j) V$ E" [7 G  t// $timeoutseconds seconds)/ L' u, S2 V; P9 @
//this is where PHP gets the time" G& G0 [) [" y) N2 S3 w# D" ?) ~
$timestamp = time();
/ `; y/ s/ I; G! u' i; x5 V//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ a7 n( L0 @8 v: x1 w  d; {$timeout = $timestamp-$timeoutseconds;- ?3 b& f/ G% t: V! X, M
//connect to database
3 K, G9 l/ d% r( h8 Q, Umysql_connect($server, $db_user);
5 N! f- b* @* i! F5 V//add the timestamp from the user to the online list
+ e! Y- J9 G, s7 C$ S6 O# p$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. W$ ?6 v: f4 f! }2 m! J7 B('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ v& i% Z$ Y6 D( B
if(!($insert)) {  Z/ P3 n9 r3 a( b' _1 r( r
print "Useronline Insert Failed > ";
. T& p& P1 z& l: ]; [: e1 v' n( H}
# @$ ^+ T" p" |/ g" S- {; H- K//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& H; M2 E0 b! h+ @. m. e
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! f9 B6 t" {8 xif(!($delete)) {$ n& d2 c4 l  ^: G( f
print "Useronline Delete Failed > ";) F: z" x( {3 M8 k6 l. I7 E
}
- v- G1 _" r& z6 q//select the amount of people online, all uniques, which are online on THIS page0 m! v3 @! ?3 S* e$ v2 t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 A- i* e8 N+ j* ~9 X4 z0 D/ _1 n
if(!($result)) {8 u& N& ]. W1 e/ V$ ?! Y
print "Useronline Select Error > ";
2 [6 j; Q: z. D/ H5 V}% a5 h) B3 x$ }
//Count the number of rows = the number of people online
! ~1 N4 h6 d# {$user = mysql_num_rows($result);
6 v; J- h9 m! A% M4 Q- m//spit out the results
2 o% M8 ]7 Q3 z# o! R& smysql_close();( G" R0 D9 u* R1 u) ]; K) J" o
if($user == 1) {
2 y% w; D" e: x2 L# f9 Tprint("1 user online\n");8 A" K8 h; i0 `* S
} else {0 P3 f$ {, G3 e, q4 r
print("$user users online\n");
0 B5 u9 |8 P' n9 ~9 y# B}+ u3 k  p( \& s6 Y. P9 F$ m
?>2 x6 h$ V! n: o( V7 R/ P
$ M- L# n& @8 `' [8 J* _
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。, L2 v1 d5 a9 d# c6 ?( A4 I, f
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
, M  x2 d% n: I: v5 T# L1 L" w我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 [$ s: k0 n2 ?) C3 _当然啦,这两款主机也是相当不错的。
7 D* t/ |  n7 E  g2 ?# W智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年) E9 A  `! Y; i+ N& D6 E# l
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ X1 r3 |% j1 G- w
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * g* x; _5 t# R. l
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
1 m: _! N8 h0 g' `$ d自己加QQ去问吧。

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