返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ L" [* l; T3 K1 i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
  R# X5 R. F- \6 q* H# D- y首先我创建MYSQL数据库表。
+ x$ M# A, u0 h" j" V+ j# e# ?) mCREATE TABLE tablename (
. a; l3 ^$ i# b' L9 M4 nfield type(max_length) DEFAULT 'default_value' (NOT) NULL2 x. U5 y6 {5 z! c
}可以使用的SQL语句。
, v7 n( r, I0 _! B2 t& d4 tCREATE TABLE useronline (: a+ I  X/ m9 }- B
timestamp int(15) DEFAULT '0' NOT NULL,
$ ]) H3 y" g/ g3 h# N6 u* ^& |ip varchar(40) NOT NULL,
* H/ ]& e8 B  W7 _/ o1 G& `file varchar(100) NOT NULL,$ Q; {  P& W' z! \; }
PRIMARY KEY (timestamp),
% [' X; }7 T& n; @KEY ip (ip),0 W# @0 ~; B9 B2 S0 x
KEY file (file)
4 b2 J" K. Z6 F) f+ |7 G/ |);下面我们是PHP脚本,首先我定义MYSQL的信息。/ R. T; o) \8 W5 `2 }
$server = "localhost"; //你的服务器, h/ G( L. d5 w
$db_user = "root"; //你的mysql的用户名
0 r* q. J: m0 @& m/ a* M$db_pass = "password"; //你的mysql的密码- F: J$ ]  O  B5 M- Q' V  A& z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( E9 Q9 a- }. d/ s9 N9 x  x$timeoutseconds = 300;取当前时间。
& p3 T( s  s5 K$ H6 s) ^6 @$timestamp = time();上面的完整代码:/ |. s+ \! G" W% n: n
<?php0 Z; |/ Q: S, s& x
$server = "localhost"; //your server
% b3 C* @* H/ r  d  s/ Y$db_user = "root"; //your mysql database username
! P: \8 ?" r; J2 ~$db_pass = "password"; //your mysql database password if any0 b2 F6 i6 J% n2 U
$database = "users"; //the db name; @3 h, F% H% h& T
$timeoutseconds = 300;//timeoutseconds limit- y! _1 w: i0 [
//get the current time9 x  D( y6 W7 o; i. O
$timestamp = time();
% L8 E, ~: M9 E//calculate the lowest timestamp allowed# {( b4 h- }9 V; P0 Z+ Y& u
$timeout = $timestamp-$timeoutseconds;! }7 S0 L- p. s! w2 _3 l
?>连接mysql0 F1 I% B7 w  y. J4 w/ ]4 D' L
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
) \. {& ]' b9 Y2 f% D0 J4 mmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接. c9 Q$ Z4 S' C" Y1 o
mysql_connect($server, $db_user);查询数据库的代码:
1 C7 z3 ~: P/ r: p& X/ V. e* qmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。+ r4 J* L' O' h$ ?# v
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' T* f% z8 o7 h' F; N('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ B+ @: F' Y+ E0 N; W
如果用户用错误信息的话,这样处理。: I6 r0 ]9 C5 Z* w5 c1 d
if(!($insert)) {8 S5 B+ f5 Y+ t8 `& H% A! j
print "Useronline Insert Failed > ";
: [& K/ y2 C: ~& T; f3 |}然后实现当超过设置的时间就删除该用户记录。
6 q* R) d5 h, c% R, g$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
. g! X* P! F  ^if(!($delete)) {
: e* i1 j7 a# q9 O0 C* ]6 Zprint "Useronline Delete Failed > ";
9 f! `9 m) B+ D}下面我们解决数据库中不同IP的问题9 q2 j7 u5 u% o( }( {! l4 i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
7 \1 {" a1 g# _9 k5 ^$ Q" Q" k+ z1 [mysql_num_rows(query);来统计用户,代码如下。
' x0 S* K; ~- z+ |$user = mysql_num_rows($result);最后关闭数据库。+ y; o# O' i# L0 t
mysql_close();显示在线的人数。, c6 w6 j) b. B  D7 p5 K% y
if($user == 1) {
- F" ]6 x0 ]; r6 lprint("1 user online\n");
) a! B! q$ Y. Q- b} else {8 x! s* ~4 U% f: h
print("$user users online\n");
  ?3 H6 I4 X- ?+ u% G) }- E}最终把上面代码写成一个PHP文件如下。
: u2 V. h) l! g, i" E0 }: r( e<?php) ~! {8 J6 L# Q1 G$ p0 q5 `
//Put your basic server info here
; i% z& d( Z& H$server = "localhost"; //normally localhost  ]0 p. `6 m8 D
$db_user = "root"; //your MySQL database username
% C( M- m, R4 d$db_pass = "password"; //your MySQL database password
# x+ Q; e: S/ v$database = "users";; Z+ G' M% k* F8 K% ]5 c
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
7 ]1 T; D0 D0 `# ]( `8 M1 h7 w  t// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last, K2 n) Z6 P: h9 Z. G8 [
// $timeoutseconds seconds)
4 y2 s& w7 Z7 T+ P' t//this is where PHP gets the time  g. \6 j: C. C1 i, F+ {* x" T
$timestamp = time();& N8 ?# O0 F2 G5 Z+ _& V
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
' S! G; \# e, Y5 M) h+ D: T( ^' T$timeout = $timestamp-$timeoutseconds;
5 L7 k4 j  S( n+ Z) ]. X6 D//connect to database
+ B. k) n- V3 v4 Z& M" e2 kmysql_connect($server, $db_user);
% R8 I6 T& a3 e. o//add the timestamp from the user to the online list
) X( q4 V6 b1 \- }. S$insert = mysql_db_query($database, "INSERT INTO useronline VALUES  \  A8 u: F( n  _3 g. b( y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* Y, f* w" o$ j  f6 gif(!($insert)) {% X2 A. z* Q5 B$ K& }& A* e, H
print "Useronline Insert Failed > ";* ]$ g9 \) @) F
}. m# N1 K" o* }' m2 ]% y$ G
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.* O3 R1 b% W% t! h  _1 g5 |3 y" z/ Q( a" \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
7 W( a! q% H- l' W, G/ Eif(!($delete)) {
. F6 b; I' L- E" X! yprint "Useronline Delete Failed > ";
- H9 ^+ S- O# i( H}
5 _4 G. ]/ O! z" X  c! F5 M//select the amount of people online, all uniques, which are online on THIS page
$ ~: k) h. q% V! I) V5 N: o; h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 \8 W  f: P" E1 V& D5 s9 T
if(!($result)) {
/ B+ x* @2 s9 R( b) X# i! X% u) {print "Useronline Select Error > ";
/ Z+ V! q( \) B1 c5 h}# z, I( W& Q9 H; I) n2 V
//Count the number of rows = the number of people online
) T# o6 \+ g9 J) n' s2 _4 j6 z6 j$user = mysql_num_rows($result);% z6 f8 ]* o7 G' g3 R+ u
//spit out the results
$ p4 \" H1 I$ ]" Fmysql_close();9 C0 u' L$ P7 Q  C$ |9 N& V
if($user == 1) {
6 B( S% Y  c7 `, }print("1 user online\n");
" ?- ~% e2 [+ e6 A+ U7 \3 |7 I} else {
/ W. P& f) {/ G$ R! Y0 E  R* F$ dprint("$user users online\n");
, \" P/ h" G6 H# N6 T}6 W: ]' P9 x9 r4 k4 r
?>
/ H" {& O. s# F  q: Q+ d& f
; C" m, b$ j& v) H以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ i$ d1 G' E" S* P, U+ z6 {时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ Z; r5 U$ ~# k0 F我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. y3 c+ m4 q! N7 K9 e. L2 a$ I4 h% M
当然啦,这两款主机也是相当不错的。
* ]! u, s, H- T- ?- ^  {智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年$ j3 W3 a$ K7 T
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年- ~3 T1 c7 Y) t) R3 b
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 8 R- G4 W0 e, g$ S* ~) |" V& A
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
& g% R9 l8 C) @自己加QQ去问吧。

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