返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
- I- y2 X7 f& B9 _  T& T0 U; I, S0 p我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。  s! E" O1 }* U& z% m* J
首先我创建MYSQL数据库表。0 B* B2 i# e3 F6 u% F! T
CREATE TABLE tablename (
) f  b9 d: \% a" ofield type(max_length) DEFAULT 'default_value' (NOT) NULL* \5 G- R2 l) z8 B# I
}可以使用的SQL语句。
! H8 s/ Q0 a% \# eCREATE TABLE useronline (
2 V  d- }4 v; y$ }% u$ K  Rtimestamp int(15) DEFAULT '0' NOT NULL,; o! W* a8 f) C$ G0 I5 P, C$ P! p
ip varchar(40) NOT NULL,( z: {6 t" T7 X& \
file varchar(100) NOT NULL,
* M. a0 d( \5 e1 k- S$ ]PRIMARY KEY (timestamp),
& B  t' s( J! f$ q2 r4 _- ~  GKEY ip (ip),
- T# ]( g" o5 ^+ X  sKEY file (file)
2 D6 h+ J/ r" z6 u) c);下面我们是PHP脚本,首先我定义MYSQL的信息。. A$ t6 p3 v+ ~. J7 `) s. _
$server = "localhost"; //你的服务器* J7 ^: Z: v7 @; k5 |
$db_user = "root"; //你的mysql的用户名3 }7 y3 L: N/ X: O; Q5 q5 |4 r% E
$db_pass = "password"; //你的mysql的密码
5 d( y* h% g! v5 B3 u, |% S; Y. d$ p$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" s" w8 h) G' k$ x' i2 u3 w$timeoutseconds = 300;取当前时间。
  Z2 S. n; }6 h: r5 F1 t$timestamp = time();上面的完整代码:
2 a  E# h5 F5 a! y9 O% [+ p4 B<?php
9 x0 f/ j+ C# z1 h6 T0 P- J$ i  d$server = "localhost"; //your server! l4 i" F$ M) L- C  }6 m3 d
$db_user = "root"; //your mysql database username& B* I1 k* ]5 i# P) x4 L! G
$db_pass = "password"; //your mysql database password if any$ h( V5 ~2 C% t+ x" A# B5 r4 M
$database = "users"; //the db name
  N: o4 W3 {) g9 M$ Z* f$timeoutseconds = 300;//timeoutseconds limit7 o0 ~* T# c8 ^, U$ l1 f% }
//get the current time
% H' c& W, d' }9 T6 R  }+ B+ Q; r$timestamp = time();
! T( c1 _5 I: v0 u# v. c2 M$ Z/ P  E//calculate the lowest timestamp allowed
. C5 z( O! A8 M3 ^: {; U$timeout = $timestamp-$timeoutseconds;, `' Q* x6 W7 Y/ L3 e7 f8 T3 Z
?>连接mysql
, X0 u) Q  q1 b# `. ]8 V, v5 M# g1 zmysql_connect('localhost', 'username', 'password');也允许使用变量形式。% ~& u  X; Q( J  K, ?/ l9 o& \
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接  N+ ]% a8 s* J  X: Y/ K  v
mysql_connect($server, $db_user);查询数据库的代码:+ p# B% N* E8 G, l4 ?0 K, `; j7 L
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
% q! _1 e+ c- s7 R( ?$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 A6 ^1 f! ?; T" ~6 }3 G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ ~5 B6 @- s9 B- i5 _/ L7 V/ D' `如果用户用错误信息的话,这样处理。$ N" g8 b/ M4 I" j& u
if(!($insert)) {' L* t: }6 U4 G. n) r: \
print "Useronline Insert Failed > ";8 w) k$ Z! j! U0 E+ S/ K# g
}然后实现当超过设置的时间就删除该用户记录。
' Q8 n, h* G& F) O1 o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。1 w" @6 k2 f2 W
if(!($delete)) {/ i0 q4 O" [" ^* C/ O
print "Useronline Delete Failed > ";
$ k- W$ Q& F- E( m& G1 m}下面我们解决数据库中不同IP的问题: H2 N5 Z9 C0 X" A% }. i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
' ]9 J! p& N, W0 C( B5 M& c- smysql_num_rows(query);来统计用户,代码如下。
" P7 ^) H4 _$ e! ]" x7 I6 Q$user = mysql_num_rows($result);最后关闭数据库。
1 G0 o% U) Q1 Q3 A8 ?, W, Fmysql_close();显示在线的人数。$ V; W8 ]9 I8 H; K+ E7 l" Q
if($user == 1) {
) A8 N2 _, ?/ U4 ?7 ~+ C3 Tprint("1 user online\n");; }# ^2 |/ E/ E
} else {
+ S: X% l, ^# P( ~print("$user users online\n");- N! d# R- `, ?6 d
}最终把上面代码写成一个PHP文件如下。, k% N% L, B1 Y3 e0 ~$ G
<?php
  b2 b) g4 z; _$ K//Put your basic server info here
. O+ c$ [' T; R+ Z) Y$ |$server = "localhost"; //normally localhost; a$ k, R8 K  o) T+ c5 F3 o
$db_user = "root"; //your MySQL database username- G" i4 V+ }) J# c; y' A4 F4 Z/ x
$db_pass = "password"; //your MySQL database password9 A( M3 C' T5 J1 e/ {- M
$database = "users";7 @: ^3 H2 w/ K7 {& _
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 i3 l# _) L9 J9 o/ K// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 q  i" Q+ P# @& U2 Z
// $timeoutseconds seconds)
& A* m$ U! ?6 U' |6 v5 J( ]  S2 }3 m//this is where PHP gets the time
) Z2 [; p! Q5 ^% Z# {$timestamp = time();* O* l4 U/ ]& R! D$ r6 C& z6 @
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! o0 V+ Q1 U: {. o" s+ B$timeout = $timestamp-$timeoutseconds;2 Y& f; U6 ^2 S8 T  T& N
//connect to database% z* o* F4 q! D8 ?
mysql_connect($server, $db_user);( o7 b* {; |  J% h- L
//add the timestamp from the user to the online list
/ ~6 `# g- X5 J( M2 f5 V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 [6 P3 B! S: t6 v('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 b9 [9 `' y+ ]9 v8 oif(!($insert)) {
; s, E! ~! D0 f3 P  Eprint "Useronline Insert Failed > ";
% F7 G! O! J" Q. W6 |3 K9 b}
0 |0 ^) ~) M5 s9 Q/ T8 |' m+ m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 y. M1 s1 U0 K  Z$ W* a! {. n$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: T* L7 S. C) \/ G" L  e
if(!($delete)) {
+ B" d2 ]* i/ y3 I/ W3 s" s' J- Xprint "Useronline Delete Failed > ";7 }9 d( Y8 Z4 c8 t% w
}$ V1 r* k8 F. C3 E4 n. Z9 G" q. B7 n
//select the amount of people online, all uniques, which are online on THIS page
( ^0 M2 h9 A/ X  f6 S% j+ B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- [- c% d* {; |) Z0 X! K  a' ^if(!($result)) {6 E* l- v$ S/ l$ K- s/ V
print "Useronline Select Error > ";
( r6 K" M, t! O- Y5 U}4 m7 r/ Q3 z6 M+ a2 q
//Count the number of rows = the number of people online
" L3 o& }1 `, F6 Z) n. g9 ~% w) V$user = mysql_num_rows($result);
3 i1 g  D" t) d/ R* U. m7 {5 y//spit out the results
" I0 }+ {2 \4 [. f& b6 qmysql_close();2 T4 ?' i5 w7 t  z+ C5 C) O- Z
if($user == 1) {
+ l# j. k) H8 S4 X& O2 Bprint("1 user online\n");2 k( H0 X0 R) t3 B7 w/ m
} else {
3 P4 U1 @) v% t9 `7 F2 M0 Uprint("$user users online\n");4 n* ]2 I/ Y5 X$ |/ e0 o5 H
}. F' Z2 m, J% j/ C% G
?>) ~$ v3 j8 W$ N+ h5 E

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

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