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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
+ m4 W7 x6 P  ?  C8 S9 q我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 u6 t: M0 _$ \& V首先我创建MYSQL数据库表。
3 d& Z* m- S8 Q/ X9 {0 zCREATE TABLE tablename ($ }* l2 M& a9 F
field type(max_length) DEFAULT 'default_value' (NOT) NULL
( i4 g6 |$ _& a& A' V}可以使用的SQL语句。  R( A4 l) H: O* H6 ^$ j; U. C
CREATE TABLE useronline (4 v" }3 x5 E; M7 e
timestamp int(15) DEFAULT '0' NOT NULL,6 |! ?4 Q1 _0 ~9 @8 S8 ]& ?
ip varchar(40) NOT NULL,/ T2 m) d: n/ `- g# Z& b! E
file varchar(100) NOT NULL,+ k9 L8 i) F3 o2 t1 c7 m
PRIMARY KEY (timestamp),
0 q+ p. l( N$ k0 p$ OKEY ip (ip),
/ S6 Z: W, P. n/ c0 x6 u! L; @KEY file (file)6 _5 f. M* E2 [) ]) k! p( J- p
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ J0 T8 u! G# t3 Y$server = "localhost"; //你的服务器
0 L/ h' O5 E4 W6 V$db_user = "root"; //你的mysql的用户名  R% h, ^( D, [# w
$db_pass = "password"; //你的mysql的密码& \$ K2 ^7 r6 M$ G8 E% {
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ u$ q5 Y* D" f+ N$timeoutseconds = 300;取当前时间。& h, D8 e4 h% d3 O' Y
$timestamp = time();上面的完整代码:9 T% F2 T2 `5 u' d, u6 t  ^7 c" G3 f
<?php
2 {* P7 j5 k& A5 M$ }* `) k$server = "localhost"; //your server4 u, h# s. ]' Z" i. l
$db_user = "root"; //your mysql database username
2 c4 y" n$ U& Z' w! y$db_pass = "password"; //your mysql database password if any( t' T, w# x* F2 A1 m5 O+ Q9 y
$database = "users"; //the db name" k. d: F/ z' b# A; ^8 e: t2 K7 Q% }
$timeoutseconds = 300;//timeoutseconds limit
& L2 _* i$ ^1 |% {5 x( B# h& u//get the current time% C, A9 r9 j: J3 r
$timestamp = time();+ B: }: o; F4 \1 ?
//calculate the lowest timestamp allowed* Q* W( V. I" I2 s: @7 T7 }+ u
$timeout = $timestamp-$timeoutseconds;  y8 C/ z1 c2 U7 Q3 y, U' j, M
?>连接mysql4 i, l: `8 ^7 E% Q8 B1 w6 T
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& Q: [2 J1 \( J* _- m0 q; cmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
5 }5 k2 ?) E" T" Amysql_connect($server, $db_user);查询数据库的代码:
1 }4 R: t9 x9 `+ h. B; s8 R  _& ^mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。/ X/ K6 \) i+ W" I- `: f
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
2 u& E7 g, x+ L('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 }: v0 W7 ]. v3 G3 ]+ D" q7 j
如果用户用错误信息的话,这样处理。
4 n* _- U" h8 ~+ Fif(!($insert)) {
9 ~$ [6 V8 L# B6 r8 U% _/ d9 `+ Eprint "Useronline Insert Failed > ";4 E: D8 P0 r8 N; H, q
}然后实现当超过设置的时间就删除该用户记录。
; }' K8 ]0 L* _+ n* [$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。$ g( B9 |) q0 b! j# U( B
if(!($delete)) {
0 I# H$ e; x5 H8 xprint "Useronline Delete Failed > ";
" O. c, B0 W2 q# r}下面我们解决数据库中不同IP的问题/ x/ L# \. [5 i. V3 ]- R5 K# B
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ ~" M  }) g0 u0 A9 Lmysql_num_rows(query);来统计用户,代码如下。( Q9 X8 T, }$ U9 a3 ]! e
$user = mysql_num_rows($result);最后关闭数据库。
9 G' O4 L, n* Pmysql_close();显示在线的人数。
$ Z8 @5 k' n* q7 a" vif($user == 1) {
9 G* D( t9 ~2 ^: o* w' Hprint("1 user online\n");
1 o" C9 }+ `2 O% r( M+ j, M$ ^} else {  ?2 n) j8 b* c2 Y0 f8 z
print("$user users online\n");% S8 ?& ?0 t) ]
}最终把上面代码写成一个PHP文件如下。
5 ~3 T- s8 H' K2 M( y. Z<?php
  t$ }% C+ G; K( c//Put your basic server info here, M0 M, S3 p6 u, S) R1 [
$server = "localhost"; //normally localhost8 i( k; m9 Y0 R1 F+ g* F) _
$db_user = "root"; //your MySQL database username! j$ @+ e; l7 O5 S: |, p
$db_pass = "password"; //your MySQL database password
* ?* E" I8 [) |& e# `: U& }$database = "users";: a& Q5 M* ]$ s* L& J; A
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. [/ p0 q2 ^: ?% `: i; V// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ M8 I* h, j' E. @$ y, C, s// $timeoutseconds seconds)# y% }( M! g% M( R
//this is where PHP gets the time
% T# L6 q$ P, `7 ?: j% F$timestamp = time();
) Q/ j+ K0 i" g( Y+ T//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed7 G  k$ g' `2 r
$timeout = $timestamp-$timeoutseconds;
  W$ }( a$ D9 n" d+ f//connect to database
+ B! u, g" Y% i0 K7 Fmysql_connect($server, $db_user);: i8 g+ ^& N  b9 S6 N, p, P
//add the timestamp from the user to the online list
1 Z( V0 k. {# R8 Z2 n* [$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; |) O" q1 b: N9 @% f3 `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ Q- a; B8 g- F. A7 }/ L0 W! c
if(!($insert)) {
- C+ L* ]1 ]4 N0 h" Z. I5 s$ E2 x$ j  _print "Useronline Insert Failed > ";  ~# N2 Y  z" E) L) s; G, L- t
}
' L( A- v* j$ k- b- C//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.# W% h- F) K( ~' Y6 R) N
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
4 l2 S$ X+ A9 g+ k- {4 Uif(!($delete)) {3 ?3 ]9 H+ z% J0 r
print "Useronline Delete Failed > ";7 Z) i3 I" k% y6 h  J
}
9 D' J* m- b: K/ q//select the amount of people online, all uniques, which are online on THIS page
# Y4 ~% a5 P% [$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 o* Q6 H* k  G. c- R0 T
if(!($result)) {
2 [( x+ S4 `  E8 Eprint "Useronline Select Error > ";
& ^2 M  ?  N8 J# D0 T" [" q}
* {# |$ h% w7 J8 L# k//Count the number of rows = the number of people online* z- T- Z3 E$ ?5 {$ R
$user = mysql_num_rows($result);
+ d4 |  @6 Q4 B7 X- b" f' _//spit out the results
$ W% W: N1 @' Dmysql_close();
# W2 u% Z+ K3 u6 bif($user == 1) {
4 c6 z' X) d  B6 n+ Gprint("1 user online\n");
+ x2 q, s1 b# Z  u9 [} else {5 ~, r4 C" d- |% S- B- o
print("$user users online\n");
  C" w' n, o0 L- p}% ~9 [$ ]% K( u' U  W- a
?>6 d$ E$ \# D: Y0 A  ~* V6 g* C
3 D9 U# J  N' G- I2 [  j6 L
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。# [7 g- c" C8 r5 a/ F( P2 t' B
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。/ V# y  I0 D9 w, ?
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。" S! N( d" M; X  E3 D
当然啦,这两款主机也是相当不错的。# K' h. ^6 i8 ]  w/ E0 M0 s
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
8 K: r" G( F. K8 G标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年. p3 g% B; m$ ]5 u5 X
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 7 }* y- v3 N) \5 C# _
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=554 g* w5 _; E3 O1 {
自己加QQ去问吧。

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