返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!) K* }: ]) x$ @# ^/ ]1 D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。; c  S: @2 K& p
首先我创建MYSQL数据库表。3 C6 P$ b; z! @" C8 b" h. h6 i
CREATE TABLE tablename (
" X. K2 f0 T9 z8 M2 Bfield type(max_length) DEFAULT 'default_value' (NOT) NULL3 D( j4 R: `" W, ]8 n. P2 V% ?; W" [, }
}可以使用的SQL语句。
* `/ G& |; p( L! R7 N( Q' _# }CREATE TABLE useronline (' F$ [: T/ F9 j$ I* N
timestamp int(15) DEFAULT '0' NOT NULL,
+ H8 D0 ^/ P8 Z" Hip varchar(40) NOT NULL,# {' U0 f3 [6 j) |- M# V
file varchar(100) NOT NULL,
! W( E- ~# v* m+ _  L4 mPRIMARY KEY (timestamp),
/ f' ]- l  O" ^4 a& C+ E# }KEY ip (ip),
3 @) Y" [9 R  N) c3 YKEY file (file)
  X* w5 \2 u/ g);下面我们是PHP脚本,首先我定义MYSQL的信息。
: ~' K& j7 c" ~+ V+ K" M, d$server = "localhost"; //你的服务器- J& ~: ~* D# s9 |# p$ W9 |
$db_user = "root"; //你的mysql的用户名
$ W- R- J9 C: T: q, b7 y0 k$db_pass = "password"; //你的mysql的密码5 V9 m) q/ @+ U+ r
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)6 e( Q& x: }! y) [# x& c, r
$timeoutseconds = 300;取当前时间。& S3 F1 s  f  B# P7 p7 y
$timestamp = time();上面的完整代码:/ u7 m4 ^$ U) G  K) C; T( o
<?php0 u$ b0 {. c; }
$server = "localhost"; //your server3 a  A# n2 S5 e
$db_user = "root"; //your mysql database username
/ W* V5 e9 v) s: L. g2 C$db_pass = "password"; //your mysql database password if any; n$ f8 g  F$ `& g: u
$database = "users"; //the db name' X- ~2 h$ h9 k$ g3 S. O* V
$timeoutseconds = 300;//timeoutseconds limit4 s5 F- Z% |& h
//get the current time! _" ~( N- v% [: ~8 E
$timestamp = time();
7 m+ U+ Q3 p+ a" m+ P% k  l) I//calculate the lowest timestamp allowed% Z% L% p+ g# M; q. V" T/ P+ g
$timeout = $timestamp-$timeoutseconds;
3 [' ^6 T$ u* z7 K5 W! Z& l?>连接mysql2 n# J, W7 b3 E# w9 F
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。! Z1 W$ T) T0 z. X5 x! }4 L- I$ D4 f
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ L, K. g6 ]2 @4 _1 d1 N" A- Y
mysql_connect($server, $db_user);查询数据库的代码:2 \/ U! Q! [) ]1 A) B2 n' t
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
+ w0 p3 s& P! n& p9 m4 x# j* _" z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' c* a$ x" F& U4 \. Q. @8 p('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, @; Q7 J* P& Q: [2 g5 f如果用户用错误信息的话,这样处理。( [/ L5 e) B/ U
if(!($insert)) {9 ]4 j  r5 g$ N( |: V; M8 c
print "Useronline Insert Failed > ";
5 }! ?' @/ b0 b}然后实现当超过设置的时间就删除该用户记录。) \) m" T! D- h+ t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。1 L* Q+ j, M0 j
if(!($delete)) {
0 P! J7 M5 n+ z" m: R2 Mprint "Useronline Delete Failed > ";
$ J$ G  P5 y1 m4 E& h}下面我们解决数据库中不同IP的问题3 x# ?: H/ I+ Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
0 P! K  @" t0 M# O7 t- p! Jmysql_num_rows(query);来统计用户,代码如下。
: c0 G& Q2 E5 v. z# n! t; p$user = mysql_num_rows($result);最后关闭数据库。
+ s( D% h- |* {7 h2 h# ~% Wmysql_close();显示在线的人数。
7 Y& }* Z( r  dif($user == 1) {
1 [! g+ f$ {9 z1 E. @0 k$ vprint("1 user online\n");
9 Y+ q4 x; r: E5 e& F2 O} else {
" O- H" N3 T' v: L) vprint("$user users online\n");
. Y, f# b: l$ z4 Z& b6 ]# Q}最终把上面代码写成一个PHP文件如下。) x: c5 s* {" r6 j( E
<?php
( y& H! t' ]5 K3 g1 b6 L: L//Put your basic server info here
4 A7 [4 c6 i0 N% H/ W: {. U$server = "localhost"; //normally localhost, c* u6 J0 V2 {/ C
$db_user = "root"; //your MySQL database username
, g3 w9 O" c- P4 l, S' P$db_pass = "password"; //your MySQL database password
, y+ M7 p. P1 e! Z2 a4 ]$database = "users";- i+ W8 q$ Y* S
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
8 ?: S* Z% i) a1 d// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last0 n, M3 j- X' s0 x( U6 i
// $timeoutseconds seconds)
0 a  H' P" ^0 L+ q//this is where PHP gets the time6 I5 i0 @5 c/ t7 j2 y
$timestamp = time();# p. O# \3 @# s
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
  c( O. l1 V$ u, u0 C( X* C$timeout = $timestamp-$timeoutseconds;% Y5 ~# g/ R8 P0 J
//connect to database/ C1 b6 ^& p! y5 k
mysql_connect($server, $db_user);- L7 F* k* l, [* g
//add the timestamp from the user to the online list
) Z# k8 L3 v2 V& ]- k9 K$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" e2 {% ~) R* e( f+ P: z0 z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$ F9 u# d* g) Sif(!($insert)) {
, o7 G4 t; z( T1 I, E3 U! O- \print "Useronline Insert Failed > ";1 G1 A1 ?0 K% h* N( R4 w8 M
}
- E+ F# q* a  q) o' p$ K* S$ `//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
! }0 i* {7 B( ~, Z$ U: {! p. O# Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# d8 [* k% D! g! {1 e! H% e( s  ^
if(!($delete)) {
: y; o1 t6 ]5 z0 ]( l/ ]print "Useronline Delete Failed > ";
& F5 n7 u' Y7 S+ D. |9 m}
3 C- r* y1 I. N# }//select the amount of people online, all uniques, which are online on THIS page7 x+ I3 u9 m: }. Z" {  E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");, l' H3 \: R6 J7 O1 \
if(!($result)) {. w; Q1 E0 p1 U
print "Useronline Select Error > ";
# B) L  k  M4 C+ ~! q}
! w7 v6 a$ D0 H; `//Count the number of rows = the number of people online+ }% K$ r! q, O/ R6 j
$user = mysql_num_rows($result);: l6 Q* e7 O5 }, g5 O+ W+ a3 e
//spit out the results
7 M) k' `0 f. I( @mysql_close();
2 e! p& c/ C! O0 R8 Oif($user == 1) {. G' y9 Y- k, }! j+ z, H$ |
print("1 user online\n");0 o! l* D$ P# e5 L) d+ S
} else {
% b2 c8 L9 u* M- ~( R+ d% oprint("$user users online\n");. u0 i5 g" K: Q4 ~1 ^/ u
}
5 t) W8 m) ~  o* M- W. H% F?>3 b6 }0 _5 l$ m: [$ f& q" K
/ S' H6 }1 t4 B/ ?5 W; s
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* Y, Q2 F- D' ]/ |时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。2 d! l4 M. k. i
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
2 i1 F" _3 k7 K! g4 |5 U当然啦,这两款主机也是相当不错的。
/ i: f3 R4 a6 Z) P; g智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 E& y8 c! U8 K: ~8 l9 X+ {
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: T) m7 n' w5 Q+ g
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 {  I2 K% \  |9 W. C
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
2 z, v; b+ J  o自己加QQ去问吧。

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