返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
' ]" g( ?( F) U! p我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。$ W9 l  m" S  d: A. b  S1 K
首先我创建MYSQL数据库表。$ h6 N# r; s2 S1 h% q+ F# f9 m* S
CREATE TABLE tablename (4 @6 c# f! b5 @
field type(max_length) DEFAULT 'default_value' (NOT) NULL
2 \5 c) K. \, i* ?& U& t}可以使用的SQL语句。
5 l8 s' M4 F: q$ s5 g& y, k6 cCREATE TABLE useronline (+ j5 v' x: L$ Y- d( P
timestamp int(15) DEFAULT '0' NOT NULL,
$ q# y1 L3 c1 W! Xip varchar(40) NOT NULL,
5 v, [1 D& O$ h( Pfile varchar(100) NOT NULL,3 C: s. `; k/ X3 u9 k. U
PRIMARY KEY (timestamp),6 P2 G: K6 \" x/ Z
KEY ip (ip),2 R' c" ]7 x, v+ A- v& V  O
KEY file (file)
- Y7 i: ~& B3 ~; W- k' C);下面我们是PHP脚本,首先我定义MYSQL的信息。% c3 E0 L. b" I2 o) Q9 ^
$server = "localhost"; //你的服务器
- V% C' f/ E$ Z5 N0 v- g$db_user = "root"; //你的mysql的用户名2 F9 t. I$ O: q6 z6 y
$db_pass = "password"; //你的mysql的密码' {5 X- |1 Q2 V% O
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 Q" N, U! s2 W6 t1 z+ r/ ~1 z  \
$timeoutseconds = 300;取当前时间。9 O  O/ k5 t0 R$ ^. J
$timestamp = time();上面的完整代码:
- ]7 f/ M. F: h, X<?php
$ t4 a7 w) n; O+ [. w$server = "localhost"; //your server
) [; [6 V6 g$ Q/ h$db_user = "root"; //your mysql database username! R* v- r/ Y7 h. S) [3 Q1 Y
$db_pass = "password"; //your mysql database password if any
9 F5 k! R/ l6 q9 K  D; D$database = "users"; //the db name
7 d0 t  {! G& @! Z! I$timeoutseconds = 300;//timeoutseconds limit" j5 I$ m7 g2 z6 {& p$ u3 l
//get the current time
  w7 g, C9 o# O. T$timestamp = time();/ E: w0 o8 L$ ^4 R
//calculate the lowest timestamp allowed( {5 b* M5 w6 r) M' Y# |
$timeout = $timestamp-$timeoutseconds;
8 h! v+ H! N# P( \' E# D?>连接mysql" x  [( I& i  o. n) q& c* V" O% o7 `
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。/ ~, C" ~  a! m. Q) \+ j) K5 d8 [
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接6 |; K6 x& R) `4 a0 {
mysql_connect($server, $db_user);查询数据库的代码:, ?2 [$ f9 f9 |- l& f, @7 ?7 Z" H
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 P  ~  `5 c  I; l
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* ?& W1 b) a/ u5 t2 u1 @. S  G1 V. Q: C
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: M) V% v0 U0 {3 Y! \如果用户用错误信息的话,这样处理。7 @4 Z# y, {% r, x6 x
if(!($insert)) {1 Z( i6 _( L# u) U$ G
print "Useronline Insert Failed > ";
) k& X9 b9 T, j1 K' t  s: }# l}然后实现当超过设置的时间就删除该用户记录。
0 p, R: G4 Z4 ^; V% x- y4 Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 o7 o2 N2 B' i
if(!($delete)) {$ {; j% U' |& v5 }
print "Useronline Delete Failed > ";
: C- g( q" W# ^4 V4 D# U}下面我们解决数据库中不同IP的问题8 b6 M# F  ]% ^" D3 }7 i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用9 j0 r8 Z5 b2 _7 W  q
mysql_num_rows(query);来统计用户,代码如下。
9 c2 H! k$ E+ j, m2 q0 l$user = mysql_num_rows($result);最后关闭数据库。6 l: G2 O. M( e" B3 a/ u
mysql_close();显示在线的人数。
; o$ O: U, k% |6 ]if($user == 1) {
8 n% M* M* J! O3 A2 D, hprint("1 user online\n");
% Z1 _7 d' U/ e. O} else {
" I- |- t7 T, r( j3 s' w3 bprint("$user users online\n");
* {' F% V5 [- J5 ?$ Z}最终把上面代码写成一个PHP文件如下。' O3 ~6 c# I/ Y8 g% z% t) M
<?php
  w/ ^0 F3 N- r. X//Put your basic server info here8 [) I, N, m# p! K" h
$server = "localhost"; //normally localhost. r' ?* v8 f5 A: O5 d$ P* K
$db_user = "root"; //your MySQL database username
' k8 j- A4 ~# }7 I) p$db_pass = "password"; //your MySQL database password
4 Z: K$ q+ h/ ]: T3 _$database = "users";
# G1 e; T& P8 d& D8 d% |$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
5 }- E: Y9 I: O+ ?9 c0 G// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last) n; k+ k* z+ i# _' x7 A7 K
// $timeoutseconds seconds)
% K* }- I$ d9 f3 W. V4 c! v) Q//this is where PHP gets the time
1 E; o* D/ U, M3 @* V3 U  M3 h$timestamp = time();3 v- Q% W& M! C
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
: h- B6 ^5 Y. o* k/ N$timeout = $timestamp-$timeoutseconds;
5 i5 s/ i% v# P$ D//connect to database' Z5 m& `3 i  `9 M6 j: w
mysql_connect($server, $db_user);/ V5 J' U9 p9 T' |
//add the timestamp from the user to the online list
1 ]1 v" Y) \/ s! _: K8 o$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, ]. S- J# w3 K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& j8 `( |8 E' L$ V/ O) Zif(!($insert)) {
6 G1 N# F" I; @5 rprint "Useronline Insert Failed > ";  b* E0 y! g3 {: [  c- r
}3 _. q$ ^  |( A$ V; k. |
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
5 ?6 D- _+ E. U; v# `1 z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");; O$ R0 P6 C3 L" Z( i/ o
if(!($delete)) {/ x- T1 u( s; ^& K% A9 J6 N- m, E
print "Useronline Delete Failed > ";
: t/ t$ d. a: S}
/ i5 j4 s& S3 S4 @1 l4 \6 C$ S//select the amount of people online, all uniques, which are online on THIS page
  X' F8 k/ X( n6 Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 C6 P; c+ o! P6 u+ y+ w6 b9 s* aif(!($result)) {7 j  a5 o" j$ g6 g1 t, A# n% e
print "Useronline Select Error > ";# Q, G. p! n: O, L- A8 Y% X
}
& c8 K" k6 @5 }% ^' m//Count the number of rows = the number of people online
( s2 e# ]" a( b: @: y% j$user = mysql_num_rows($result);7 q( V; Q4 |1 P$ A5 H4 M8 e4 v6 ]! n
//spit out the results
( F9 d- ^! u5 \mysql_close();
( T5 e0 i+ G0 Q! ^4 r5 D  G" Aif($user == 1) {
6 a/ q# K- @- _print("1 user online\n");+ c5 [4 z0 i- e: V
} else {
7 ]+ F0 ?) {* Z9 ?print("$user users online\n");/ Q; ^  E8 b" u2 j% |$ T! B
}
, r2 |0 \! ?% J& v2 E  \?>2 m. k+ b7 z7 x7 z, x

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

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