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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
' I% T2 ?& d8 X& r$ q0 V我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& ~' ?7 {% m; m! d  R% m: m& _  _
首先我创建MYSQL数据库表。
) W! O, Q$ R! Y/ A8 cCREATE TABLE tablename (
, C$ M- T( v7 y2 u9 ]; Ofield type(max_length) DEFAULT 'default_value' (NOT) NULL
8 ~9 L& J% B4 Z4 B4 F& b}可以使用的SQL语句。9 Y0 B% Y9 W' G9 y& R: W. C. d
CREATE TABLE useronline (- ?" M: x/ I; H( R: d  f* b
timestamp int(15) DEFAULT '0' NOT NULL,
' {4 ~$ }* j7 M! R, J, Wip varchar(40) NOT NULL,
- m* L0 ?+ Z! u$ [4 n4 E" r2 [( [file varchar(100) NOT NULL,
0 a! R0 k; F* {2 o; C. [PRIMARY KEY (timestamp),
1 m  k- e/ d. ^/ YKEY ip (ip),
5 @7 q& [7 t' ^% f; G# FKEY file (file)
9 D3 f# C, e2 l4 C& ?( g);下面我们是PHP脚本,首先我定义MYSQL的信息。5 n) U7 U" ?0 {* |* p
$server = "localhost"; //你的服务器
) w5 L/ R3 {. [. `* U$db_user = "root"; //你的mysql的用户名+ E9 M; I) D/ t+ R+ P
$db_pass = "password"; //你的mysql的密码% U  N: q( G+ ]- O
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
1 \  }8 v7 ]6 {0 e2 p: G, A0 e! E$timeoutseconds = 300;取当前时间。+ U" w3 C+ N- n, T/ g( b+ V
$timestamp = time();上面的完整代码:$ Y' C% s: ~; o, i, S6 d6 {7 `% R& u3 v
<?php6 l. v: [6 z' M
$server = "localhost"; //your server; f/ x7 L- c7 h* t) u
$db_user = "root"; //your mysql database username, @' T/ @0 l0 [3 }+ \8 |. N5 h7 P& u
$db_pass = "password"; //your mysql database password if any
" l4 V% N% d* w2 J* \+ a+ a, @$database = "users"; //the db name1 n: w7 [& ?5 W
$timeoutseconds = 300;//timeoutseconds limit% U8 N1 U4 `; b/ H0 v& X. k- p
//get the current time
3 p6 W% \- K3 d# j  l( W- g$timestamp = time();2 T0 C0 \1 f( U
//calculate the lowest timestamp allowed
" h6 c; w6 E: H4 c8 i+ J# p$timeout = $timestamp-$timeoutseconds;
3 m1 u' _+ ^+ n?>连接mysql6 B  g& ]& T1 V, w% ^1 p# h) q# {
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
6 t  \" ?$ _# F; ?/ omysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. N5 U8 [, t& Lmysql_connect($server, $db_user);查询数据库的代码:
2 Z  C3 y, u0 fmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
3 `) Q4 j5 w4 j; Y/ p% E$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) U/ ~/ h4 x& }  s3 d
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 i+ [& [4 ?$ f1 m& u$ A
如果用户用错误信息的话,这样处理。
/ T9 K- W: h( i" Rif(!($insert)) {
: z7 ?, K$ n2 e5 l" W# kprint "Useronline Insert Failed > ";0 h6 A$ M' U! Z# L1 V. I+ T
}然后实现当超过设置的时间就删除该用户记录。+ s1 p8 P8 N1 r  ]. o4 f  i1 U- W$ h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# u) W- h( b2 O, ?if(!($delete)) {( K( u* L, F8 G* ~
print "Useronline Delete Failed > ";
! T( z9 @1 Z' _9 |' J$ [. B}下面我们解决数据库中不同IP的问题% u' {- c& X$ R) x
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
: Y: @4 m& B/ B2 Rmysql_num_rows(query);来统计用户,代码如下。( i7 a1 j8 y# G& T
$user = mysql_num_rows($result);最后关闭数据库。
1 k# w$ S8 a8 P: r4 C4 H) k" V/ ?* tmysql_close();显示在线的人数。
. b1 q7 ]( l0 F$ ~7 Qif($user == 1) {( ]4 A& w* w- f  E
print("1 user online\n");
  N. Q8 L; W0 E! J, L  `} else {
* `- `$ V# l9 T  r5 }( f2 y- X. y& Kprint("$user users online\n");
! J: b: r+ G0 r( u& T8 @}最终把上面代码写成一个PHP文件如下。
, K' L3 ?8 {9 E, k+ B5 J3 |5 {<?php4 n; U! B' Z" K
//Put your basic server info here. r! A$ f: ]9 ]
$server = "localhost"; //normally localhost5 t9 n: C3 P% @5 v3 `; j" R# z% j
$db_user = "root"; //your MySQL database username
) h5 Z3 D- k6 K1 p& O$db_pass = "password"; //your MySQL database password$ s( J9 f0 n3 ^
$database = "users";
2 Q: ^- v8 ^2 Z, s$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are0 y: s2 g% f1 ^+ k8 T5 \
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
* ?2 D% z3 d) l, X// $timeoutseconds seconds)) ^  b2 i$ v* \
//this is where PHP gets the time
! t% ~: ?1 T8 }5 `5 a$timestamp = time();
# o$ p" [* R1 {' M2 Y4 _3 f//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
' Y) J/ ^0 C5 h& n$timeout = $timestamp-$timeoutseconds;
4 R  O1 N4 _& c8 w//connect to database
' q# L# h" j4 Y3 d8 G7 W* ]8 pmysql_connect($server, $db_user);+ C# P7 e6 B5 V
//add the timestamp from the user to the online list
  G! Y( n- }9 D; f$insert = mysql_db_query($database, "INSERT INTO useronline VALUES: e8 U2 R$ ~. Q  I% U# F* L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 ~3 q$ R! a3 K( u* C
if(!($insert)) {
$ k' ^0 h7 Z* ]7 I  L4 J9 T2 uprint "Useronline Insert Failed > ";% T- m$ _# ~! [7 m! I' z
}6 c% V, H5 R! a2 U4 z: Z
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." x" Z+ ], f, H7 T8 D
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
4 m$ e! W- b  e: Y. `8 c5 y, hif(!($delete)) {0 ~+ q8 c  X" S& [7 c
print "Useronline Delete Failed > ";
" a" m  W! Z8 g* D}4 ~  z! ~0 I8 {: X7 I. E. {7 |& H% W
//select the amount of people online, all uniques, which are online on THIS page  A+ q& f* l& H
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& Y" j" _- F; m8 d% ]2 pif(!($result)) {" e: I* [. F- `5 g- Z2 G. Q0 t4 y
print "Useronline Select Error > ";
+ G: d6 j, d8 ^/ @* ^}
" e: u$ b" o8 U2 \* K9 [3 B- u//Count the number of rows = the number of people online
, L! B1 a) ^" M$ ~8 s$user = mysql_num_rows($result);) F: k% T  V% k/ V
//spit out the results' W) s5 T; e! d0 {# M, c6 ~
mysql_close();. ~+ A. S; f4 c& U: s, U- c! `+ v0 l
if($user == 1) {$ h0 }# B+ m6 K6 ?- s
print("1 user online\n");) W: }/ `6 ^. X4 C: t- q
} else {0 I+ ?3 [: O5 ^3 _! _) W1 G
print("$user users online\n");
. K* t( ~+ s1 k- a}5 K3 f* d5 w  |3 x
?>- X1 o) z$ I  {( T# i+ C: K: c5 F+ \
, K6 c0 w! M3 }& n1 A% C# J
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' o4 U- v+ \1 K/ D3 _6 _% c7 Q时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。9 o9 V) ^2 H5 z3 o
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: B' a2 N; _4 Y/ m当然啦,这两款主机也是相当不错的。# a; n0 ]2 R, V1 o0 W$ D
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
# K- k; N$ i6 [8 _6 H标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年% |$ d, p/ e/ E) ?! q5 o! \
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
; M/ }5 C( `- b! N空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=553 M* [8 c. F1 |
自己加QQ去问吧。

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