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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
+ T7 m4 V: U7 u) n. l( n$ C我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。1 c0 }* e' e- d5 x. @
首先我创建MYSQL数据库表。5 N  ~: Z1 v, Z4 R0 S
CREATE TABLE tablename (
8 M3 D! n, |& l( ]3 bfield type(max_length) DEFAULT 'default_value' (NOT) NULL
( _! C# U5 d) j6 p- b0 \}可以使用的SQL语句。! n* z8 \0 Q: Q/ Y, p7 D, r
CREATE TABLE useronline (
+ ]" A7 k: m7 d0 x' H) m! Ytimestamp int(15) DEFAULT '0' NOT NULL,& F6 [' [) U  Q6 U+ l* c
ip varchar(40) NOT NULL,7 Z" A7 Y# [9 f: r/ h. |
file varchar(100) NOT NULL,- ~% F) f5 D0 L& x+ i: j
PRIMARY KEY (timestamp),7 M' Q2 z9 N. t& ]2 P
KEY ip (ip),- F7 n7 u- L% ^( ?) `5 ?" z
KEY file (file)
8 C  ^& C' u4 }7 k& c. });下面我们是PHP脚本,首先我定义MYSQL的信息。
* |+ W. O1 {) [: I/ A3 Q' ]$server = "localhost"; //你的服务器
3 I4 z& m! |7 j; j4 M$ i3 c$db_user = "root"; //你的mysql的用户名
; f1 q3 U) j4 y4 [. `/ [$db_pass = "password"; //你的mysql的密码
0 P/ H! e  ^4 \; H$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
! ^" h& k8 E/ M& h# ^. n! O: g$timeoutseconds = 300;取当前时间。' f/ @/ N  m& _
$timestamp = time();上面的完整代码:
9 v4 T# N6 @" Z9 |% Z6 ?<?php2 V) G4 r) p" i( O9 f
$server = "localhost"; //your server& F- h* g: A' @( X9 r; N
$db_user = "root"; //your mysql database username; r" B- I: _0 ~# [2 k0 S
$db_pass = "password"; //your mysql database password if any( N0 R( ~, C0 P, l* i3 o
$database = "users"; //the db name
% t3 k  T, W# E0 s9 b( t1 T$timeoutseconds = 300;//timeoutseconds limit  X, c3 o# _4 |9 i2 \2 H6 `& v4 B4 z
//get the current time- _5 U/ ~0 Q) U" j9 _) t5 w
$timestamp = time();
4 J4 b7 |( _- ]/ p5 p) ^//calculate the lowest timestamp allowed+ O' R" c4 u4 f: X
$timeout = $timestamp-$timeoutseconds;
- A# h: q' g' m0 w?>连接mysql
" b! T+ I6 n8 h6 p" @9 Y3 c- Qmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 W! z7 t: u: N5 vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 N, `  J* V" amysql_connect($server, $db_user);查询数据库的代码:
, E0 d: V  x, D$ M3 c+ ymysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
! g9 D% t* s7 l8 G6 U3 h$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 Q, ~0 j1 k1 y7 O+ q, c( c('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");) {+ G: H3 _5 }9 g, {
如果用户用错误信息的话,这样处理。, G; |/ Q7 {1 @2 E( R
if(!($insert)) {) C8 ]  {6 Q: i7 Z9 C0 [4 o
print "Useronline Insert Failed > ";
1 r6 X# l- I/ Y$ B6 I% `}然后实现当超过设置的时间就删除该用户记录。4 K/ M3 Q5 q; d7 n9 s. ]1 X" m& n5 [6 Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。4 h* u6 e) Y; q" _, g- o! A
if(!($delete)) {
7 t$ S; l5 Q; Z7 @8 o4 qprint "Useronline Delete Failed > ";
' }* l3 B- W  F) ?5 R3 f% H}下面我们解决数据库中不同IP的问题
/ R* c* j# q/ _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用) _( T( X. D8 w) i: e: y! T
mysql_num_rows(query);来统计用户,代码如下。
4 U# V; w9 |5 Y4 ?8 ^: V$user = mysql_num_rows($result);最后关闭数据库。
: n( z! a0 k- vmysql_close();显示在线的人数。
2 i& n& Y8 s3 n7 _# r/ tif($user == 1) {! f$ D3 _* V9 |1 _3 U, ?" b; l( c& I
print("1 user online\n");
! h) Q! [- v) S' T3 `. Z4 n0 z} else {
. F: |  X# F4 Rprint("$user users online\n");
, ?. F! n3 N; ?4 l1 U$ A}最终把上面代码写成一个PHP文件如下。
& Z& C% h) C2 F" j, w<?php+ u4 H0 \# n' i
//Put your basic server info here( J2 r  N3 j, H, b* Y
$server = "localhost"; //normally localhost8 t, `; K7 H# k7 f" q- ~
$db_user = "root"; //your MySQL database username1 _% T7 o% j: M
$db_pass = "password"; //your MySQL database password  h- K8 B3 r+ t; m2 r; U
$database = "users";
! Q. v5 K2 V3 \1 j# K( i$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ R6 g4 B% L" P" `
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
% E/ o+ S& H+ s; _: K& B# T) O$ X// $timeoutseconds seconds)& Z4 v9 \7 H' X- E' M. c
//this is where PHP gets the time) ]+ ]) N+ y! D  Y7 ~' F4 `4 Z
$timestamp = time();
0 z1 K6 ~- O+ B: k4 ~  h9 H//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
7 o+ b" L* V4 X% w. r! s9 M# P$timeout = $timestamp-$timeoutseconds;' z, v% c, d7 C% R/ i
//connect to database1 z: e- U! q9 P
mysql_connect($server, $db_user);( a+ m! e1 l; c3 i! ]% \( W5 \
//add the timestamp from the user to the online list
2 O7 V/ U, [% Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) d( Q" v. g, \: t9 O8 P! f
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( S+ b& U" S" F$ C4 C
if(!($insert)) {
! U. A% F3 x/ Eprint "Useronline Insert Failed > ";1 {& t, \/ A+ D+ U2 l
}
& e% N9 W* @$ l1 H, A: M6 F//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! E! c; }; K) y0 T
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) d$ n' q; }  S! N9 y' f" U5 z+ Pif(!($delete)) {6 {  |5 r3 c) J% g, t
print "Useronline Delete Failed > ";" k+ q. \7 k' B, E
}3 Z/ F6 j$ {0 @
//select the amount of people online, all uniques, which are online on THIS page
8 A' k3 G: L( ^7 U7 h' Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");6 t5 J! B* V: {1 X8 p' B% e* b
if(!($result)) {8 ?6 u5 i+ w$ T1 V/ o" `) m+ g( Y7 M
print "Useronline Select Error > ";
; }5 x, \1 s: Q6 [& I! t6 N- W7 Q}" T: Y: C5 ]5 T: i( x  f
//Count the number of rows = the number of people online
8 o" B5 n' D8 _7 ^2 a( L! D* E; t$user = mysql_num_rows($result);
: W6 h+ R: K# p! B0 h' @//spit out the results6 V( c3 B& U0 L( G/ s1 c
mysql_close();3 [6 G1 [2 ?0 U3 j
if($user == 1) {; z! _0 _- `6 ~( ~* S8 {- M- O
print("1 user online\n");+ s" m- ?7 b! m3 S
} else {
7 X% z1 V' t" T- Eprint("$user users online\n");
5 B9 n) E0 Q# ~}$ y2 E" ~: _; J4 {" d
?>
6 X6 M0 h2 f6 v. o( X
% W. v! w% n* {" Q$ J2 K0 z7 n以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。, P, [1 D1 e0 o0 {0 N; s. P
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 e0 [2 E0 h1 _( p我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
  y; p3 Z0 L8 M* ^. f! |+ l: e+ P+ F当然啦,这两款主机也是相当不错的。
4 K1 X6 p* |# ^! q1 r- a: G智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年  l" |" a% t8 V0 h
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年# @+ I* q7 v% S6 v
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( `# }4 i( q" G$ \! Y6 c/ I) t
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=558 Y+ e3 O$ h& _1 h6 N
自己加QQ去问吧。

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