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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& \! f# D- a6 Y+ `5 E
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 K" \* @$ o+ D
首先我创建MYSQL数据库表。! G: o* Y* e; R+ D
CREATE TABLE tablename (
9 [" t$ g, z$ v3 {field type(max_length) DEFAULT 'default_value' (NOT) NULL0 Q& K3 ?, ?' E$ Z7 G
}可以使用的SQL语句。) P) p' [. n# X# Y2 }2 @( P6 n
CREATE TABLE useronline (0 R% \2 A8 n0 E4 h4 [8 E
timestamp int(15) DEFAULT '0' NOT NULL,
1 p) m2 W( f- b$ |ip varchar(40) NOT NULL,. ^% O2 ^: ?9 S" Y3 D/ f" h8 K
file varchar(100) NOT NULL,
- Z7 \  {* g, rPRIMARY KEY (timestamp),: l' q$ M+ N+ Q: [' G
KEY ip (ip),
4 d& X! B' P" R1 ~, dKEY file (file)
$ p. @! R- p6 N# c6 M: n);下面我们是PHP脚本,首先我定义MYSQL的信息。
" r8 p, Z7 U0 b( ?- ^" Z$server = "localhost"; //你的服务器3 R( f2 n/ Y* G. V
$db_user = "root"; //你的mysql的用户名9 B' y  E6 @( s2 g, M$ }
$db_pass = "password"; //你的mysql的密码  Y8 D$ B2 w. P/ f# V
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 [, L, j% V0 W# S; y1 Z
$timeoutseconds = 300;取当前时间。
1 S4 S6 r/ q7 \+ S$ h3 R6 q6 P& b1 E$timestamp = time();上面的完整代码:9 l$ G4 r- J2 D. Q. y1 y" m  f
<?php* y0 \: W! [! j$ @* z9 A
$server = "localhost"; //your server. y$ h: q  c/ m/ T$ k# W' g
$db_user = "root"; //your mysql database username
' V! N; Y' L  A# w$db_pass = "password"; //your mysql database password if any3 {( y( {2 j8 a. V  o  I4 y
$database = "users"; //the db name8 a/ Y/ H9 Z. [8 n9 P) ?
$timeoutseconds = 300;//timeoutseconds limit+ R# S+ ?! v' N2 {+ z- N# O
//get the current time
1 D; ~/ B* i* s2 N" p$timestamp = time();' ^8 R7 j# f- M, ^! Y4 z$ g9 X& C
//calculate the lowest timestamp allowed% T- E2 E7 Z1 u8 d" b
$timeout = $timestamp-$timeoutseconds;
0 u- a: b, p* G2 n0 h1 W/ l0 C: s0 X?>连接mysql9 H) G$ C% U- z1 z7 {. ^
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
  Y" a! |" j; `& e$ L; gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接* [- |( }$ p' ]9 J# H, H
mysql_connect($server, $db_user);查询数据库的代码:
* u; t7 n' f* V2 f# |7 L. nmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. B2 j& {  T* D$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 |( [+ v6 W8 J0 B
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 S, U% y& T: F) R如果用户用错误信息的话,这样处理。% ^* G8 q( v5 {3 q( N  A- Q+ K
if(!($insert)) {) _* b" d1 U; u  |8 }6 S
print "Useronline Insert Failed > ";
) i6 t! }9 `5 V( Z" L}然后实现当超过设置的时间就删除该用户记录。
, {: @; |* t4 ^5 H$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ r5 S/ x. {# ?) Z7 N
if(!($delete)) {
7 X6 u9 M5 n: Q, rprint "Useronline Delete Failed > ";
6 g; l8 w1 y! D% `! O% ]}下面我们解决数据库中不同IP的问题. y/ r6 F1 O& k; {5 q3 k* \* L
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 L( B- L% V3 m* a( v& H1 Tmysql_num_rows(query);来统计用户,代码如下。
0 G- t: K. U- S& ~( z$user = mysql_num_rows($result);最后关闭数据库。& C/ B8 m  {4 u+ p! i, a* _
mysql_close();显示在线的人数。1 y$ H, g) x8 v1 n
if($user == 1) {0 T- |* @1 o% `. |6 F
print("1 user online\n");( b$ L: K4 T7 `
} else {
8 v% W- z2 r+ Q" zprint("$user users online\n");
2 w, A* n/ }  ~# g0 o) E0 g}最终把上面代码写成一个PHP文件如下。
/ s0 X' }" s( E0 H, N  L<?php, c( Z/ A& [2 ~
//Put your basic server info here
, T+ q) \3 G* I$server = "localhost"; //normally localhost
: q. ]8 l$ p" S% J: ]; X5 {$db_user = "root"; //your MySQL database username) Z/ }) H4 ?5 y. |6 ^
$db_pass = "password"; //your MySQL database password
: _+ @" X- A! q" z; Y" q* D3 B$database = "users";
. q2 m6 e) u6 i! c8 Z. ~$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
0 m% c* s9 V4 S4 j// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ k: R3 ]! k( R0 `3 }9 @
// $timeoutseconds seconds)
8 M; m, @1 n7 u//this is where PHP gets the time) T  Z; F9 \. N5 b7 I, ?  ]2 |
$timestamp = time();+ A& D6 s$ U  Q) |3 V% P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
: u+ S' q3 H) v  P7 [3 _. t$timeout = $timestamp-$timeoutseconds;- }: |. S  z+ g6 g! k
//connect to database8 T, `7 g# v; `
mysql_connect($server, $db_user);
' A' g/ B9 b  Q5 I/ E8 B//add the timestamp from the user to the online list' d3 Y4 J, b5 _8 O9 u/ Q5 f
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 @! @1 A- C1 F2 `: B- I' q6 D9 ^
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( b' k. I4 w# W0 ?+ H
if(!($insert)) {
6 t* U; m  X# ~# z1 m) tprint "Useronline Insert Failed > ";
# b* V" M+ L' D, }" `; k}4 ~2 c0 \  O- y8 z' F; g8 T
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.( x/ P4 K: Q. o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");/ Q( u/ q5 |% f1 r  d
if(!($delete)) {
6 C4 j% J0 F9 |/ @8 Oprint "Useronline Delete Failed > ";4 A4 {4 W, v) H6 ?2 |1 v
}
+ ?2 y7 R+ L8 M7 [2 E% x//select the amount of people online, all uniques, which are online on THIS page
5 [/ U7 t0 M5 a- \$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");. s) D: i/ V7 m& S9 ?# a9 g0 V
if(!($result)) {% {9 b5 e; z$ R! L- G
print "Useronline Select Error > ";
/ d, p2 c2 J5 k: d) m$ |# l}' s8 M* q( Y0 E! c5 J, Z
//Count the number of rows = the number of people online& m4 i$ T- h& B3 r" {: {
$user = mysql_num_rows($result);
9 T! _1 k0 u; n2 H& h; G//spit out the results6 x( c; I6 R; o0 P" b
mysql_close();: M+ {  o" d+ W
if($user == 1) {
5 Z! ^; H' F# F& P: e- Aprint("1 user online\n");
/ b% v2 |& C0 v; T# t: {9 n- P' u2 \} else {
" {: n7 ?, G) ~- j! ]! I8 ^% bprint("$user users online\n");
1 n' n5 f9 x) ~+ s& e}
" g, _( e' ]: F7 ??>! D, k2 p6 C" R9 l

1 e! w. R0 J, E+ B; a/ Y' k& }* z以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
  e. ^4 d2 O2 R- |% H5 X" p+ d; N时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。8 ~  q0 k, |5 ^- L; t
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
0 y, ?0 l2 J+ [7 A9 D8 z" z* K当然啦,这两款主机也是相当不错的。
2 n8 X6 N- B7 D, P2 s+ c: b1 t& v智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( q3 {" W. ]) c9 V  m6 i
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" J; S. D+ q0 B
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
# @, w" w7 a1 U5 C4 y' F2 y空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
! r( i" A! m# D+ f自己加QQ去问吧。

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