返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
  S, {( n# c% P3 \- F% t% }我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ G$ b: x" z* @3 T# A+ X* _首先我创建MYSQL数据库表。
; v; d7 O8 F" h* @+ kCREATE TABLE tablename (
+ p4 ?" G$ u) `- u$ yfield type(max_length) DEFAULT 'default_value' (NOT) NULL7 S- i" f& |5 p  _
}可以使用的SQL语句。; {& U, w# D. X8 ~, F7 S
CREATE TABLE useronline (; f( l  c; F; q2 O
timestamp int(15) DEFAULT '0' NOT NULL,: p1 q: A7 `2 M# R% c1 p0 ?5 A
ip varchar(40) NOT NULL,4 B3 o5 Y% `3 H' J/ x0 F1 E
file varchar(100) NOT NULL,! g- y. Y) g3 L1 X
PRIMARY KEY (timestamp),
* |0 v( t  D5 t! a6 j' t9 s/ cKEY ip (ip),3 p* D8 L9 X( _6 j" [
KEY file (file)8 M6 R  x" Q/ k# f; F0 ?" o
);下面我们是PHP脚本,首先我定义MYSQL的信息。+ h0 B3 D' v) g/ K
$server = "localhost"; //你的服务器  o- z$ g# F8 V$ M
$db_user = "root"; //你的mysql的用户名
0 ~/ ?$ |. I7 X8 Y7 x) A& `$db_pass = "password"; //你的mysql的密码6 Z  A  v' `: Y2 t3 m- `1 T
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)6 \2 V% A) x" c& D
$timeoutseconds = 300;取当前时间。
! k2 `/ ^3 `8 L$ ?. R) x( P( b$timestamp = time();上面的完整代码:* c$ _( S; v/ h: ]' L; ], ^1 |
<?php5 i% j  x/ l* ~9 H4 `+ J2 ]- \
$server = "localhost"; //your server
9 I6 B; `. z! _& @% x' x3 Z. I, W$db_user = "root"; //your mysql database username
8 b3 i) W6 y. X! @0 w% z$db_pass = "password"; //your mysql database password if any
1 r) Y' @+ V! X$ M& r$database = "users"; //the db name
5 M; f% G, `% ]9 L$timeoutseconds = 300;//timeoutseconds limit
% R+ i' `  h0 o0 d, f: f0 r//get the current time
+ Z4 X& E9 v4 m, `$timestamp = time();+ z" O' `, ]7 v4 N  n
//calculate the lowest timestamp allowed. C& u/ X. I4 o- a3 p7 d( C/ e
$timeout = $timestamp-$timeoutseconds;
  s9 J2 G9 e- t0 B9 }. S# n6 _?>连接mysql
- }# d/ u4 _, C7 S$ Bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
- \" w6 t' t+ c, l0 W# v$ vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接! O3 |8 R) o5 k. K) c  {
mysql_connect($server, $db_user);查询数据库的代码:
: S& F/ j( r, J! {# Zmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
0 k1 j! k0 ^) Q/ ?  h- O$insert = mysql_db_query($database, "INSERT INTO useronline VALUES  Q( s9 C: h" `$ h3 s  j
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 T$ E5 L  ^, |$ a6 M; g/ k/ f如果用户用错误信息的话,这样处理。/ p: B0 n, ~+ N$ D, p
if(!($insert)) {
- ^7 u2 x( N6 }3 @print "Useronline Insert Failed > ";
9 w8 \& n, R0 a- s* y}然后实现当超过设置的时间就删除该用户记录。8 G& r. G1 Z9 Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* |, `& l! f, P2 i+ ?- U& Xif(!($delete)) {* _; E6 p) ?4 s/ a* a% f
print "Useronline Delete Failed > ";" }- W* x( ~, D6 r5 H
}下面我们解决数据库中不同IP的问题
, P% j# [$ T0 N3 e) N5 ?4 O$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用' h' g1 P; G$ i4 x+ D8 C$ h: `
mysql_num_rows(query);来统计用户,代码如下。$ X6 H& e+ Y& z6 T2 e
$user = mysql_num_rows($result);最后关闭数据库。
0 }; e9 L# h+ h! g3 }: A6 amysql_close();显示在线的人数。6 u8 \: k8 e7 n3 ]0 P/ _/ _
if($user == 1) {' v# A' m+ S- X5 _. b' d
print("1 user online\n");
% i) Z  V/ G% f7 U/ K, P. S} else {
8 f& T5 L" H2 F: S3 Q! `, P% pprint("$user users online\n");$ r$ |" @0 A! w: _
}最终把上面代码写成一个PHP文件如下。) _! {8 }# _- ?4 u% O( D
<?php
" [0 X! o. W( G/ M1 |  Z//Put your basic server info here
6 ~  x6 G' X% o$server = "localhost"; //normally localhost/ u6 {: `9 O' p) S) ]; y) u1 g# b
$db_user = "root"; //your MySQL database username% X9 M. E% b, o' v
$db_pass = "password"; //your MySQL database password
2 J( c- f  J2 E$ f* u) l$database = "users";( Y$ A2 x* A9 [+ N! s$ a  o
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are1 P9 \1 {+ g0 R
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
; z( n5 F* j+ v  b% B// $timeoutseconds seconds)* z+ J: M) E2 f' r, O2 W7 u
//this is where PHP gets the time5 ^) I8 f8 T7 V5 o: V" F- N
$timestamp = time();; G( {& g: w4 Q- s2 {' C+ k3 e
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* u5 Z" A, G) K( r5 i& w
$timeout = $timestamp-$timeoutseconds;% g' C% N" z" b, g5 w
//connect to database
' M7 h" A# B; \0 zmysql_connect($server, $db_user);
' ^7 `, p8 c! Z+ O, S//add the timestamp from the user to the online list7 N5 Z, y$ i$ f7 a4 X
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! {: g( @5 C% H, S
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 y0 O6 A1 x8 G; e! C* i
if(!($insert)) {/ k4 ]* @; {8 R# ~7 e
print "Useronline Insert Failed > ";, ?$ Q; {3 z2 C
}
: A) ?/ g# w$ f//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
* b) h; Y; g" j2 z: v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
  a: h0 j+ H4 kif(!($delete)) {
, [' c& I0 b! `. V1 q9 Xprint "Useronline Delete Failed > ";
1 y; F  i2 e0 N* z( W4 R( v}
' `2 Q& Y' r3 }: e; ^//select the amount of people online, all uniques, which are online on THIS page
2 r9 a/ k7 V% `$ \0 |5 l; V$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 j' Y. p5 ^5 z  l- U! o. rif(!($result)) {2 X  {2 a' v5 S  A) w
print "Useronline Select Error > ";  S% u$ |0 M8 P
}
5 ^, x1 Y* A' o. o3 x9 i: z//Count the number of rows = the number of people online
+ L6 J0 S( T/ i. Z5 B" G, {# s$user = mysql_num_rows($result);
4 Z- Y+ L/ U8 a  u. [//spit out the results
7 `. T  B' o% z5 F3 Zmysql_close();/ g! _4 k; \. D% @3 W
if($user == 1) {
" X8 {: x5 h9 z# [! Z: zprint("1 user online\n");0 ]! Y, m, V/ m! n0 E" |' K# R6 Q# \
} else {# n6 L3 E% u+ |# |$ V* L# `. `& q' ]
print("$user users online\n");, x5 L; e4 E: O; y8 q# j
}5 \9 W5 b' U4 ~% E/ c0 s
?>  P3 h( c/ {! }

, w4 k1 ^. L* Q8 a' ]# S% M* Y& Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
. `% O% M, z7 `4 {& p! R; v; J时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。2 j4 y4 k' D6 G4 U
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( O" [% D% p+ x) M) e; O当然啦,这两款主机也是相当不错的。! m/ Y- D' G2 ^# D2 x
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. x8 B. Q" n/ V8 Z标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- ~2 K; q, E, m& w1 \' y8 |提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
1 O- I9 Y; N; I: L% b9 W3 I4 O空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=558 h; [( z+ ]0 e: e* {
自己加QQ去问吧。

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