返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
, P/ v+ Q' x$ F% K. @我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。7 ]( W# \7 `1 _" W2 N0 c+ ], A
首先我创建MYSQL数据库表。5 V' t( }; p  u) K6 L$ Y
CREATE TABLE tablename (4 w9 l: B/ J' @+ ?& F& s6 e
field type(max_length) DEFAULT 'default_value' (NOT) NULL
- H% O$ p* r# m/ y4 Z9 g/ ]/ G' n}可以使用的SQL语句。! X7 e- D8 }$ j3 r/ v
CREATE TABLE useronline (0 v) I3 e4 P: }
timestamp int(15) DEFAULT '0' NOT NULL,
# l( L5 b* E$ I6 g5 H0 O9 Sip varchar(40) NOT NULL,
& S" V; I/ q# F) T" _; zfile varchar(100) NOT NULL,! `' X$ U2 ~1 a
PRIMARY KEY (timestamp),; V- ]1 {5 k1 |, Z" ?7 r
KEY ip (ip),. \7 e1 `5 F1 r! \; t
KEY file (file), e) _" \4 I! [, U
);下面我们是PHP脚本,首先我定义MYSQL的信息。8 H" z3 h* Q3 W
$server = "localhost"; //你的服务器
/ }/ x, V1 D9 t4 @$db_user = "root"; //你的mysql的用户名  a) _5 [8 l+ x5 K" `9 \$ k
$db_pass = "password"; //你的mysql的密码
: Z/ V# |5 k) w, C  h$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 c5 f' `5 M+ K$timeoutseconds = 300;取当前时间。
3 @: Y9 r8 A7 M) S  m. _$timestamp = time();上面的完整代码:
% K/ [2 V) V1 T; V; W5 [<?php
; s( ~8 o3 {+ j8 Y4 j% f$server = "localhost"; //your server
3 D* g" E: |$ e# h3 {. K$db_user = "root"; //your mysql database username
) l3 H/ p. B5 T+ ]$db_pass = "password"; //your mysql database password if any
: x9 ~6 D$ T- n4 C. E$database = "users"; //the db name
, m, {% Z4 u8 N. `! q5 |- @- [$timeoutseconds = 300;//timeoutseconds limit% ~2 B! J, J6 O: p% j8 Y- }
//get the current time
/ c: U: U1 V5 W+ I. c" U$ K$timestamp = time();
  _9 _. Z. Z, K" [//calculate the lowest timestamp allowed
! H6 c! Z' m1 r8 b5 P$timeout = $timestamp-$timeoutseconds;7 ^+ o, i  |7 b# i3 n
?>连接mysql
  \; i8 ~$ |- l2 {1 e1 dmysql_connect('localhost', 'username', 'password');也允许使用变量形式。9 o1 g- L; }5 N7 P: U
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" l3 K6 H4 E% ~0 V6 j
mysql_connect($server, $db_user);查询数据库的代码:
( ?2 F2 N& C. G6 P( {* J" gmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' D9 ^% T- T6 U7 \
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ }7 e2 _2 ?* M; I7 a6 F/ s  f('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 Z: H  {: t; G' r$ e* M/ `如果用户用错误信息的话,这样处理。. M& R: g3 @! J# z0 Y) y5 ~
if(!($insert)) {1 p, Q- L+ S' }6 w2 }; e
print "Useronline Insert Failed > ";' M4 O" {9 s, ]. L
}然后实现当超过设置的时间就删除该用户记录。
& `  G$ c! G8 O+ ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 P& L( o4 T0 M% I9 I2 cif(!($delete)) {
7 Z( \; o8 @% Bprint "Useronline Delete Failed > ";
; j2 j9 B+ T5 n/ Y/ v. w. T}下面我们解决数据库中不同IP的问题9 c8 h# j- F) i$ ?" G. Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 K8 H5 a6 G" l9 r3 G1 i5 F, B3 I* {
mysql_num_rows(query);来统计用户,代码如下。0 ]4 Y6 M7 {) B4 i4 q) o4 z
$user = mysql_num_rows($result);最后关闭数据库。, N' {& K3 e( D( V
mysql_close();显示在线的人数。# R4 A: [1 s1 q& c  U
if($user == 1) {& i( f' G, d' D4 u
print("1 user online\n");
/ c, k. V5 e4 @0 @% Q. t} else {8 s/ O8 O/ E; Y% l# j
print("$user users online\n");
2 Q6 F* w/ q' z, K/ T}最终把上面代码写成一个PHP文件如下。5 _( y( L# j4 @8 e) t; {# o- V: D
<?php
# R, y7 U! ~( U  m1 Z1 l  E' ]$ ?, f//Put your basic server info here+ z' t! ~6 n  m- v& G9 @, n
$server = "localhost"; //normally localhost
( _( x) h, }( |* T7 s6 f$db_user = "root"; //your MySQL database username
+ _# _9 e6 v5 _1 p* ?# \( C$db_pass = "password"; //your MySQL database password2 t- H3 _' g$ Z  G# p& s
$database = "users";4 J; Z. D8 N; N( M1 T' S/ R) G
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 _. Q0 U1 C: a# y7 v  X3 y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( o1 R' H8 \: S( ]
// $timeoutseconds seconds)& V+ ?7 I* S- O( L& l9 E& v) z6 }
//this is where PHP gets the time
0 p+ W. R8 }' f$timestamp = time();/ S7 x6 u* E8 G9 e( Q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
# E; m' c1 H+ c, s$timeout = $timestamp-$timeoutseconds;$ O) R9 f$ A/ N0 N$ q
//connect to database
8 k+ G6 L* \3 I2 i. Fmysql_connect($server, $db_user);
( d! L' n2 Q8 M' f  n$ ]//add the timestamp from the user to the online list; ~9 l7 a( {' u$ A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 ^" U/ S. [# s2 {8 L# e9 R7 ]/ l7 ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! Q! O" [. }4 z. {
if(!($insert)) {# C9 p" H  j$ H. K$ p7 |2 O
print "Useronline Insert Failed > ";
( u, E3 q4 Q$ B) y* e' Y}* L2 L! S* `! n# m% d
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 S) f+ r; p$ n! K; |$ o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ E$ ^* C7 n. h4 Z- Uif(!($delete)) {' b* [6 n0 b2 T4 q
print "Useronline Delete Failed > ";
4 e, T( {( V9 h}
  w$ m6 g) P4 n3 X* ?//select the amount of people online, all uniques, which are online on THIS page
' a  ~* s7 T3 i8 o" l9 O3 F$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ E$ d$ c: h6 v+ J- ^  s
if(!($result)) {* e6 j9 l3 o5 I; U
print "Useronline Select Error > ";( o( J% a5 O9 B6 u% s' D7 d
}9 E, s* T; _2 }* }
//Count the number of rows = the number of people online8 t/ s2 M1 j' l, c1 G* y- |
$user = mysql_num_rows($result);0 i  f8 P3 [5 ?
//spit out the results
# x+ R4 K5 K9 I$ U& j6 Dmysql_close();# |% d7 }9 h8 |5 B/ e3 S& s
if($user == 1) {
0 L( [0 U! B$ {, g- iprint("1 user online\n");
/ U7 U' |4 G* z6 D' v} else {( |! q1 O# w+ L" i5 s5 `
print("$user users online\n");
9 U& Q2 @/ g& C0 D}
* |! i6 b- w6 D7 b8 w?>
5 j; w, N% [' M+ y
/ y$ D& J! @8 R, N# B3 |7 R以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 g5 k  m" B/ ?1 ~  m5 `时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。5 V# K. Z1 `. \1 `7 y( v! a
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。# m% C  d, D; r4 z
当然啦,这两款主机也是相当不错的。
" J& B0 O1 A% o: b" \5 L+ _0 q智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
* C2 H9 c2 G1 \5 r. s+ J9 A# ?标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
8 X; D' [# M/ r% v( ], Q提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ $ A! I% j7 Q/ ]
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
- h5 b9 O& C1 O7 Z9 o& D8 x! d7 p自己加QQ去问吧。

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