返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!/ K, h* C/ \7 X: ]
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
) O, ?; F  d) o. S首先我创建MYSQL数据库表。- K3 Q* h# l+ w- Z& }
CREATE TABLE tablename (
" J# E$ _& y7 F: _field type(max_length) DEFAULT 'default_value' (NOT) NULL# C2 [% ^, {" c
}可以使用的SQL语句。
# C8 O+ R7 e6 U5 tCREATE TABLE useronline (
1 k( v  k/ n: T7 T% |* t* `timestamp int(15) DEFAULT '0' NOT NULL,' B5 J, D  v9 k6 X9 X2 f
ip varchar(40) NOT NULL,
/ r8 t1 B: N0 d1 D+ l$ [2 D3 y! P- Ufile varchar(100) NOT NULL,
" H4 D: ^* J: N* e( OPRIMARY KEY (timestamp),
: E# p; }; P* J/ l1 i# @% K6 u( UKEY ip (ip),
7 X0 y5 l" Q  v. a: R9 a' uKEY file (file)
+ r/ n9 ~8 R* ~! D1 G);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 V% N4 |) g* r! D$server = "localhost"; //你的服务器
4 n9 h7 R. c! i0 T& A8 {$db_user = "root"; //你的mysql的用户名
) q9 a% f& J- M, ~/ o$db_pass = "password"; //你的mysql的密码
( j  K1 B( b/ V$ o& S6 @$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
) Z% I- s8 Q5 w$ A; ]$ m2 ?$timeoutseconds = 300;取当前时间。
. X6 n0 t6 G# t; H* Z$timestamp = time();上面的完整代码:
( L: u2 \9 L1 [% {; V<?php( e& J9 w4 D0 S
$server = "localhost"; //your server4 K$ p4 `; S8 ?- p6 M6 v/ z
$db_user = "root"; //your mysql database username7 ~. h1 ^7 P& g, d% O
$db_pass = "password"; //your mysql database password if any5 A. y* o/ u! m# z$ C3 e; E6 Y
$database = "users"; //the db name
0 r# J/ O, K' T  P  w1 E3 c$timeoutseconds = 300;//timeoutseconds limit; K! n9 q7 w3 h( c; c9 o9 b
//get the current time
# p; R; g! c7 A4 T) u% O2 l$timestamp = time();
  W4 ?8 I/ S' t$ e% }& u3 _3 }//calculate the lowest timestamp allowed5 `/ S/ O7 j! A1 b
$timeout = $timestamp-$timeoutseconds;! E* O& E  x& f7 _9 p7 _: r7 l2 e
?>连接mysql
" o: @8 n+ R6 s. X% o5 Gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
, S+ h( r3 K" s$ T- cmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接! H& c3 y0 }9 `  J/ @
mysql_connect($server, $db_user);查询数据库的代码:
# H% k4 @: g6 T6 Q) ?mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。$ A5 o' C! {8 z, R9 U& p9 \$ k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% `8 u# q0 b. v2 X. |1 _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$ @  |+ j) a6 H5 U9 `& [6 z$ k如果用户用错误信息的话,这样处理。8 ?( p2 w4 x" t% p
if(!($insert)) {
5 K7 Q3 ~/ D/ j# e  L4 n2 Jprint "Useronline Insert Failed > ";8 U2 m' `) E1 f7 ^/ j" h
}然后实现当超过设置的时间就删除该用户记录。
5 d# g( M$ m' m$ C$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ ?0 k5 j7 P. M8 U& y
if(!($delete)) {
4 `8 w' ]- t2 o3 P+ A7 b+ j# {print "Useronline Delete Failed > ";
, {4 h  Y# `  g* m- g4 G$ k4 X}下面我们解决数据库中不同IP的问题1 U; b* m! x  p4 }
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用  }, l/ c. l, Y! z, |
mysql_num_rows(query);来统计用户,代码如下。4 B2 M# s- f6 `5 o7 T
$user = mysql_num_rows($result);最后关闭数据库。
6 g) x1 l/ A- T& u- N/ qmysql_close();显示在线的人数。" n+ i. H+ ?% n  ~9 F8 [. O% I
if($user == 1) {
: ^4 C  a  |) z8 D4 \  eprint("1 user online\n");
$ [) p+ F$ w' b} else {
2 t8 y4 i0 J, ~8 s; ^/ T% c& s% \print("$user users online\n");4 B' W  J! D5 ^: M# \- _
}最终把上面代码写成一个PHP文件如下。
. H! Z+ M8 Y  x& n1 J3 W" c<?php5 ~1 t+ [3 J# G
//Put your basic server info here& c/ R! y; i  W
$server = "localhost"; //normally localhost, m9 X; m6 U- @( Z- a1 M
$db_user = "root"; //your MySQL database username6 a  f: x& s$ [& y' C6 c/ |6 b- ]
$db_pass = "password"; //your MySQL database password
/ l$ ]0 d6 I7 `; u2 p+ {) |6 p$database = "users";
* G- u) H2 O3 \$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 [' N" S) \9 H) i. z5 b+ b// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 A& w7 y2 b" w* L
// $timeoutseconds seconds)
# Y$ {& q$ n& I1 p7 u" E//this is where PHP gets the time$ z$ y) R  v5 V7 Z' R& A
$timestamp = time();
  q+ E' O* j  t% Q+ s0 K0 M//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
; }/ k' S" m0 F: Q$timeout = $timestamp-$timeoutseconds;
; y& `" M& i4 U/ ^* [0 M//connect to database1 M( _3 D7 o% U- y8 ^
mysql_connect($server, $db_user);& P4 U& Y8 v' u% m
//add the timestamp from the user to the online list* n) l- t" ^! `+ ^8 |1 ?3 R& Q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* ^( H' i( @! r) n! i  K) z4 ~('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
  K' |9 h8 t3 Eif(!($insert)) {
7 e  c- c+ m% C0 B2 @print "Useronline Insert Failed > ";: u( a- ?: I8 P9 K7 b
}+ t6 v5 w+ t+ \) R3 S
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 Q6 E/ K7 ]6 o  B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
( d; l9 s+ f" f$ jif(!($delete)) {7 o' [& e9 B3 y; p9 s4 X
print "Useronline Delete Failed > ";' u" n, S& k7 C4 `. P
}
7 o6 z  b2 s; K% T" C//select the amount of people online, all uniques, which are online on THIS page
  |$ V( U1 f9 m. a+ l8 R$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");* ^: @* r) [, P' q/ j$ ?0 z
if(!($result)) {) Q5 s" [, |+ |3 c6 G  m  ~+ D
print "Useronline Select Error > ";
% ]( H. |3 w4 N! p. m" E# A* ?  b}, p, m. P7 c' R' U2 j$ ?( F
//Count the number of rows = the number of people online- X" ~$ K& G6 w6 u# K6 ^+ @  k
$user = mysql_num_rows($result);
* ]1 n! q7 ^( J. @9 P# H0 k//spit out the results; A% v, l) h4 o2 w3 c
mysql_close();
9 N& D, ~" a- V/ L$ _if($user == 1) {5 z! m& @" A1 T& X8 m4 d
print("1 user online\n");  s0 @0 a- h) s
} else {
8 A3 ?6 x6 a  |) V4 b# l% G: Pprint("$user users online\n");
6 a4 k9 R6 h- B5 R. s9 H- C8 g* B}8 c3 D3 D" Z4 i- R  k' @$ @
?>9 s  W' a  W2 i

5 r4 `0 U/ z3 [% o' v以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
- K" U. i8 _$ \( i- Y时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。$ {, {( E: S9 N3 k$ M
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。  R  {: W7 l6 |
当然啦,这两款主机也是相当不错的。
( F. C/ y. F" e- K. S  M4 c智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ [1 N9 F* b7 ?* X标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 N5 A5 a8 ?1 J2 h* L
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ / [' D1 j, N9 H8 I/ B, i$ X1 h9 t% m: t
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
6 o. n+ K) x+ ^自己加QQ去问吧。

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