返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!) ?" v( ^! @, p) e  K
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 }% c( u  F; S: A/ X: i首先我创建MYSQL数据库表。
1 _8 A# J0 k/ ?CREATE TABLE tablename (
9 T1 B. S, d  F8 xfield type(max_length) DEFAULT 'default_value' (NOT) NULL/ |, p( o& d5 v: u9 ?% \$ }
}可以使用的SQL语句。
. Z- \; f( F  G+ o: i# A$ v5 C6 `CREATE TABLE useronline (
" s1 w/ R5 K! Q% o  @$ t& x9 ltimestamp int(15) DEFAULT '0' NOT NULL,9 v6 E5 I: ^$ ], b4 a/ B- Z/ z
ip varchar(40) NOT NULL,
0 |$ L! |. U  B% e; s7 Ffile varchar(100) NOT NULL,$ l7 t& z: ^+ i" B, d
PRIMARY KEY (timestamp),. A* ^- C% p. Q4 @* o* Y
KEY ip (ip),, `% Y) \: f9 ]0 P5 Q# r
KEY file (file)- l' j9 ~8 m& k( G1 h9 k+ w2 Y
);下面我们是PHP脚本,首先我定义MYSQL的信息。/ O. `$ k; Q& p  M* ]  ~! T$ {
$server = "localhost"; //你的服务器
5 t  r0 R  h& [$db_user = "root"; //你的mysql的用户名' a/ r0 N, p8 h8 S! ?- b
$db_pass = "password"; //你的mysql的密码
; ~+ V; R6 s: b6 U! s$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
# {4 w1 N9 ^3 t- H$ q8 S$timeoutseconds = 300;取当前时间。4 `4 r9 i# |/ g1 l+ b; @2 r& o1 }
$timestamp = time();上面的完整代码:
9 s) }' N5 t$ J4 {: F4 H; C<?php
; _( l+ o5 f3 ^" u( s6 R$server = "localhost"; //your server
, q0 w  S' e" B+ b- b" W; r8 }8 B, G$db_user = "root"; //your mysql database username
* v8 v; ~; w; D& e$db_pass = "password"; //your mysql database password if any! Q8 o& I# Z# Y( i8 m- l4 J& d
$database = "users"; //the db name& h3 R& \1 Q/ Q( [% f# B( T
$timeoutseconds = 300;//timeoutseconds limit2 y5 R* ~7 v) ?9 Z. \+ `
//get the current time
5 a3 h) A" Q6 V, l$timestamp = time();
7 P1 A: {5 E4 c" j2 w; ^//calculate the lowest timestamp allowed" s- D/ |1 F& V" n0 a4 g9 s
$timeout = $timestamp-$timeoutseconds;( a- o) f% ~7 o+ s
?>连接mysql
9 ]& b7 {3 X( d% N( T/ fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 h8 `9 E8 \9 Zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接, P3 ?! X* ?2 e8 q% B" Y
mysql_connect($server, $db_user);查询数据库的代码:
  C/ I4 a6 y0 d1 q( m8 D1 Rmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 j8 M8 R' O3 P  B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# }9 u7 T) B4 b5 P" V0 H('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ g( H. e/ M% m, S! A0 U3 x如果用户用错误信息的话,这样处理。$ U. O" l- x/ Y# n$ f
if(!($insert)) {
* P6 Z5 a8 d! F- |, d- ~print "Useronline Insert Failed > ";
  p# z6 ]5 L) \5 T& a/ Y; {9 o/ [2 O}然后实现当超过设置的时间就删除该用户记录。# n" s8 v: y6 c. w: H, I+ U
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ ^- B$ M; g% u) Z  p  @
if(!($delete)) {
% v: x" T. R/ R! Z+ n, p8 jprint "Useronline Delete Failed > ";
2 p$ u2 M  ~: @, }  G}下面我们解决数据库中不同IP的问题# @! S; L& J" \2 ^& y/ V3 M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" `, }7 x7 O/ M/ {
mysql_num_rows(query);来统计用户,代码如下。
8 c, n" R1 ^( `  M$ ]) f9 f$user = mysql_num_rows($result);最后关闭数据库。) I4 V, j' s  x; x  k( E
mysql_close();显示在线的人数。2 e9 C9 v! s0 i7 f& E( {$ V
if($user == 1) {
# m$ J9 V( Q/ P1 ]4 g1 ?4 |! N7 Xprint("1 user online\n");
/ Z" M# r4 ]8 @} else {4 |8 t9 `5 F/ o/ T( u$ O
print("$user users online\n");. q" \$ N: Q! z" c8 ]
}最终把上面代码写成一个PHP文件如下。
) _) z. H% q" z) z6 O/ V* A<?php
" G4 r6 o% ]/ U& \; w& c//Put your basic server info here3 R$ q. B' j) W1 Y4 [8 c; ?
$server = "localhost"; //normally localhost; N% @& J7 N$ W
$db_user = "root"; //your MySQL database username( t! O# R% p+ L2 r
$db_pass = "password"; //your MySQL database password# A) P* K. L# l1 |- V/ {
$database = "users";
' \, G9 p( X% p8 K% u' e$ K$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
' s! O, M% v$ g; L// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ b4 g' S0 S4 C1 n8 _6 @: c
// $timeoutseconds seconds)
6 U" h$ x. j6 m5 M# e' q. d//this is where PHP gets the time- }+ _% E; u2 F% X9 s
$timestamp = time();5 u2 Z6 ]' x9 I! m& v
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! r, P. m( c5 p8 G9 F+ P/ P0 {$timeout = $timestamp-$timeoutseconds;
, ^: _- Q+ X. l3 L//connect to database9 d+ P& V. ?1 U) ~1 O' ?( Q2 E& i
mysql_connect($server, $db_user);8 F2 ]& X+ F/ A: O1 G
//add the timestamp from the user to the online list
7 }0 C5 y; e2 g6 s5 j$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% \) l. z# I7 D1 x
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 R; ^2 F! L* s5 a+ l  Qif(!($insert)) {& r, g4 ]- R5 c& z) G1 G* d( A
print "Useronline Insert Failed > ";+ n9 K8 u' p6 j2 V3 N
}
& [. z8 D0 J9 H//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.- V4 h2 v0 G" _4 b
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
' g1 [7 r) g5 ^" b9 M1 H5 ]9 wif(!($delete)) {
0 u4 u- \" h" v1 N1 bprint "Useronline Delete Failed > ";6 P' C1 m9 A5 j; e1 g& A$ ?
}" W) ~2 W8 ?. i3 a
//select the amount of people online, all uniques, which are online on THIS page* z$ R, w3 x1 y1 F2 E* v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 N5 d3 g6 i* v1 d: w
if(!($result)) {3 i2 `1 t' D3 g1 Q; @
print "Useronline Select Error > ";7 M& ^' ]. |, n) z2 T% }& V$ K
}$ g5 v) H% L# e
//Count the number of rows = the number of people online- ]* g3 p/ Q' |3 t1 i2 |0 U
$user = mysql_num_rows($result);
! J6 P2 ]; I) H0 S//spit out the results
( p, L: O- e, ?$ g4 _/ hmysql_close();
; K5 y& ?9 f- E) I& pif($user == 1) {# F2 E- S' `8 y( w0 ?
print("1 user online\n");4 y9 }* Q+ p" n, _
} else {" B1 j3 ]& u* c- K8 I( F% Z" }
print("$user users online\n");
3 X# v; n) v. v1 W( `: d$ F, L}  Y+ g9 O) `# [0 p: z$ v8 G+ E# D
?>
' `4 C1 Q' L( m* ^  O% H; R: D& N3 v# n9 Y7 B9 P7 i& ?& `
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ r0 t- ~; w+ e# d! m( C0 ^时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 M8 R5 s  p( h7 u我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
. f0 @2 ?1 G8 ?8 I" r当然啦,这两款主机也是相当不错的。1 I. S$ n- G: N) w( d! t& ^
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年2 H3 K  y7 d2 H1 g) y1 z5 d* {* U
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 T, K3 {; w# L: V+ z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * C5 n4 _9 P' s* D
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=553 f! V! f( f% V# h
自己加QQ去问吧。

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