Board logo

标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下! [打印本页]

作者: lilcy88    时间: 2008-5-28 10:40     标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! B3 Z* K" E2 f
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 {) r' C+ B1 y4 w& Q3 v
首先我创建MYSQL数据库表。# I* M- w2 B2 W( A, P8 z
CREATE TABLE tablename (& j$ R$ K4 A4 c6 e' o6 F& M
field type(max_length) DEFAULT 'default_value' (NOT) NULL
; A# ^; L" Y3 _! \3 F- X: w6 }}可以使用的SQL语句。, B, d3 f1 g3 R$ z5 f2 b) o7 Q
CREATE TABLE useronline (
1 Z9 V& \: x5 ktimestamp int(15) DEFAULT '0' NOT NULL,
4 M* F! v/ Q  N2 {' C  Wip varchar(40) NOT NULL,
, Q! `) _: V8 c0 c* ~file varchar(100) NOT NULL,  |6 c2 j$ ?$ M) ~/ H7 Z$ r7 O
PRIMARY KEY (timestamp),& A$ s5 m* |2 ~( Z3 {
KEY ip (ip),
& \% H5 {0 P9 L, MKEY file (file)9 f1 \# g: ?( j) G/ o& d9 ^- y' _
);下面我们是PHP脚本,首先我定义MYSQL的信息。. g, A' Y/ u9 J) @* M
$server = "localhost"; //你的服务器
; E* ]2 g" d$ X5 F0 K$db_user = "root"; //你的mysql的用户名! w. r! F; l! Q* ?- H
$db_pass = "password"; //你的mysql的密码2 ~0 t0 S# l1 t  G% e  J, `* _
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& {: H* z6 i/ M% g3 n! p
$timeoutseconds = 300;取当前时间。2 W4 f% u9 V- A( e7 i
$timestamp = time();上面的完整代码:
8 B1 {! M& s$ h0 q1 O8 E<?php
6 D& u' c+ s$ V$server = "localhost"; //your server) B& d& Q. o) w9 z. |
$db_user = "root"; //your mysql database username* I- y7 W) F8 @
$db_pass = "password"; //your mysql database password if any' r' J% s! V4 W3 d  R$ s9 z0 e3 d
$database = "users"; //the db name
* r! O+ A% `* F' L$timeoutseconds = 300;//timeoutseconds limit5 H5 u- x7 S3 m3 E6 U' c
//get the current time4 a7 L6 l1 j) \5 B- X" k& C% R$ g$ C
$timestamp = time();
0 y1 W/ T  y: Z. E4 F  Z. ~//calculate the lowest timestamp allowed# j9 r! E8 d3 d5 ^: k
$timeout = $timestamp-$timeoutseconds;/ j$ J+ }4 W& I+ R- {0 p& U4 A
?>连接mysql
7 c) b& p! h1 k! S& x5 V; S8 y7 Rmysql_connect('localhost', 'username', 'password');也允许使用变量形式。. A: H9 w# J% p5 f; ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& ]) Q8 Q; {$ P7 {
mysql_connect($server, $db_user);查询数据库的代码:
$ X6 v4 j5 ]% y% V9 v* Kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
  q3 t5 E' X# T# p6 T1 t" @$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# A2 l1 y+ V  O# ?# z  X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ o: P, s$ a! [  w* O8 s
如果用户用错误信息的话,这样处理。
7 D2 P* l# X/ h( E; c" jif(!($insert)) {! A0 O9 C; Z2 t% c7 v, f
print "Useronline Insert Failed > ";; B, G0 a- M- i; _
}然后实现当超过设置的时间就删除该用户记录。7 d* {( \- k( R
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& ?# H: |8 p" f$ p" L2 Z+ kif(!($delete)) {
4 S  h9 ^$ [# Vprint "Useronline Delete Failed > ";
4 E9 ^% o5 S( ^}下面我们解决数据库中不同IP的问题
  u& x6 s+ J- s0 s$ D8 K/ T4 W5 R$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用  X% l" ?; L4 s9 y/ R( C2 E
mysql_num_rows(query);来统计用户,代码如下。
5 R8 j% j+ b. x# s  E$user = mysql_num_rows($result);最后关闭数据库。/ U9 G* E2 o+ [5 U. x" f0 h' p
mysql_close();显示在线的人数。
  \+ @% O; V& Pif($user == 1) {7 s2 G  S! l' l: C5 k( ^9 G) ]
print("1 user online\n");
6 S' u( w8 k# K4 M( M: x} else {
. E; A$ P- q+ r7 Vprint("$user users online\n");
& |) i7 `, `2 T9 j4 q8 Q4 T}最终把上面代码写成一个PHP文件如下。' B! a) H( B: W2 @$ M  }0 h! ^
<?php
; G1 w% R( s7 T//Put your basic server info here
$ ~) e" M8 l% k$server = "localhost"; //normally localhost. s/ M1 S8 |, a' p2 j
$db_user = "root"; //your MySQL database username% V% F8 H4 S* j% B8 m* }6 K
$db_pass = "password"; //your MySQL database password1 e0 k3 j! }* L( h
$database = "users";, P" A7 t$ }1 n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 W4 L" k7 A! ~6 Y  |: N
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& [. b0 O1 T2 c5 v3 E2 d// $timeoutseconds seconds)
+ V" O# V" l5 @* h& b//this is where PHP gets the time) x& S- V+ ~. |# G
$timestamp = time();
; g% J0 t( R, n# r7 J//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed# C6 Q: w8 J+ L* a) z2 x
$timeout = $timestamp-$timeoutseconds;3 {" ~5 p; M, I1 x" ~( S2 B% J
//connect to database& d* }- s$ D- t9 `+ d; a4 u
mysql_connect($server, $db_user);" Q$ J; T) ~  Y# x: a9 W: U: `& [
//add the timestamp from the user to the online list0 S9 T( x9 B# _
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. b9 x% y1 {8 X4 r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, X, L6 |' f8 [if(!($insert)) {# p$ |' B1 \+ e2 @/ w# |
print "Useronline Insert Failed > ";
, t  k3 E( h3 a}
3 X5 q* i: Y0 u2 O8 n//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' ~& T$ l4 v0 W! t5 T' v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");" e6 k# k* g! I  T7 t1 a
if(!($delete)) {" _+ ?  W( d! r+ o0 S) `5 n( Q% ^
print "Useronline Delete Failed > ";2 V; x. e1 q* w. p2 O6 v( T
}8 H! \, N) s2 M/ w2 r
//select the amount of people online, all uniques, which are online on THIS page0 _  y: r+ s: z  R: K7 D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" g8 Y8 L" k* E6 q: p
if(!($result)) {7 S, D# J- c5 k) l; W2 Y
print "Useronline Select Error > ";8 ~# u3 C( E% L- q
}
. _( e! a' F' \  U/ l# s. t//Count the number of rows = the number of people online
# X% s) G' o9 c( c5 h' T$user = mysql_num_rows($result);
$ j5 `% \* y5 W0 J% l8 g//spit out the results
, W1 L" L$ q( K) e) q: Nmysql_close();/ u% A' K7 j* z3 V* z# l& N
if($user == 1) {* a: [; ]) p, u, U3 I* k' q% v0 r, h/ |
print("1 user online\n");1 d3 W* X5 P  P4 k2 ^+ i3 b
} else {
' k' w$ e( d- A+ Eprint("$user users online\n");) P  S8 ~4 }  J/ Q# T
}' H1 T7 b/ g  p2 T; N% F
?>
! k; k0 x6 I4 ^) v/ ?! C8 ^& Y/ w
2 I/ z4 R, v& [3 B. R5 ]3 y以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& g7 a8 ^% i9 D8 K4 i时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。1 Y3 f8 e& K. A! Y0 w
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 \/ X: v7 y. ~+ K当然啦,这两款主机也是相当不错的。: P% l& E" I2 \# O7 A; t- n) h
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
; n) y* o7 b5 }6 B标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 d4 X# C% [: n8 Z  P7 Z9 t" s
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
  H4 O- E7 F6 w! v6 J" n空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=559 r6 i) {  ^  H) |
自己加QQ去问吧。




欢迎光临 捌玖网络工作室 (http://www.89w.org/) Powered by Discuz! 7.2