返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 A0 a' I1 t$ w; m4 y' p0 V& Z
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 l' u4 {; g# L; _$ n4 q# E
首先我创建MYSQL数据库表。& K1 a- H( Z  C' |$ x5 k" C0 z) s
CREATE TABLE tablename (. }- C. K8 b# r; y3 U4 q0 c
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 _+ T5 Y: G1 b7 x9 w
}可以使用的SQL语句。5 S# {+ L! ~9 n& ^# ^1 V- x) k
CREATE TABLE useronline (8 U# `: D3 ^, B, j1 [5 b2 K. l8 a
timestamp int(15) DEFAULT '0' NOT NULL,
3 Y- v2 d+ S9 o4 _1 ~" I2 ?6 Yip varchar(40) NOT NULL,) u3 J6 @1 W5 q, m) B7 j
file varchar(100) NOT NULL,# y; s3 [3 L7 ]
PRIMARY KEY (timestamp),
: _" \; `; _4 UKEY ip (ip),5 ]9 h6 Z% B- x4 {: D+ V
KEY file (file), D& f6 T1 g2 A  d3 `9 H& _# C( G
);下面我们是PHP脚本,首先我定义MYSQL的信息。% a5 ~# Y' e( Z* F
$server = "localhost"; //你的服务器. q0 F3 A6 {9 `2 h
$db_user = "root"; //你的mysql的用户名( ?* h& P, q; u; O; n$ I& n4 \
$db_pass = "password"; //你的mysql的密码
# @- u# ]# f3 _$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
  {: I; Y5 G4 ]$timeoutseconds = 300;取当前时间。
$ F/ _4 J* X1 R4 B+ F$timestamp = time();上面的完整代码:  j# K1 R; H2 J3 @- ^0 I
<?php4 f. Y  G+ r, v# H, C) }. [
$server = "localhost"; //your server
: e, [  L, L5 J% P* P! L/ ^( g9 D$db_user = "root"; //your mysql database username1 ~! _+ l) x- o4 `0 z
$db_pass = "password"; //your mysql database password if any6 m8 F8 C' W9 U% I8 P4 d
$database = "users"; //the db name
  \! X9 R/ s$ Z; n# j- }1 E4 D$timeoutseconds = 300;//timeoutseconds limit
9 J( k) V. b) U//get the current time
4 ^" z8 {9 S8 J% E6 S0 S$timestamp = time();( H; r+ K, O3 q8 g+ A3 W
//calculate the lowest timestamp allowed
5 b( k* ]. q1 C' W  D$timeout = $timestamp-$timeoutseconds;5 f8 S: N8 M( u/ Q3 A" n4 \) X
?>连接mysql' U2 d6 s& {( x! d1 f4 h6 s) X
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 |  |) z( a( z7 ^mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 D) y* h9 Z" J: P9 m7 k8 p; C9 U" }mysql_connect($server, $db_user);查询数据库的代码:
) D6 P2 i; t- I4 Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ [$ E0 y5 f' c" T$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( ^& U- ^  Z; T( B  H! _3 L- Q  f('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ ]% S( T( a3 @  l9 ?9 G
如果用户用错误信息的话,这样处理。0 s3 d4 t' z! [& l! Q5 {
if(!($insert)) {
& M$ b- A8 }, Uprint "Useronline Insert Failed > ";
3 D  E. t$ a9 C# M, @4 ~% s}然后实现当超过设置的时间就删除该用户记录。& {4 p, m4 W3 p& p# f
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
4 Y' W% K8 H$ C" ~if(!($delete)) {
# V$ x8 _7 q! e, I* [print "Useronline Delete Failed > ";
  j& B9 G  x/ _- i; ^% o}下面我们解决数据库中不同IP的问题+ O, U" H! z: m+ g% _  E. ~
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  e" X* S9 E9 R8 F8 b3 Ymysql_num_rows(query);来统计用户,代码如下。
) v+ t4 e: o- I4 Q& J5 n$user = mysql_num_rows($result);最后关闭数据库。0 ^4 |$ M2 X' _0 Q# U2 i0 M
mysql_close();显示在线的人数。
( {3 [' E. u8 |2 J* xif($user == 1) {
$ M+ L( V3 ~( c: hprint("1 user online\n");
) |, h! i. O/ F  j( Q# ~$ A} else {# ?! r9 ?8 a  X( |! m- D
print("$user users online\n");3 g& r2 v" q- ]
}最终把上面代码写成一个PHP文件如下。
  `$ M) s: |6 q6 ^' _9 r<?php
+ u3 j' y0 h' j$ ?4 X$ G* w//Put your basic server info here6 ]  _; b+ Y0 C
$server = "localhost"; //normally localhost
( K0 z2 Z- Q* ^3 q5 m- `9 z$db_user = "root"; //your MySQL database username8 [8 _4 p7 b. f9 M4 F
$db_pass = "password"; //your MySQL database password
; p- z- s' B, }) l  b$database = "users";
7 U+ R3 U9 R4 n: W3 S! o8 G1 W. M$ [$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" p6 N4 m. k: ]
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last- T( t) s% g, x: Q0 X0 \
// $timeoutseconds seconds)
# L; e9 A3 z( y% E+ ~2 k( [0 [//this is where PHP gets the time
! ^- h# h, J" n+ U# C2 I$timestamp = time();) \, s1 l: d& N( J& R4 w
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 ?5 b; [9 C3 P9 c5 T6 _- s, a
$timeout = $timestamp-$timeoutseconds;' Y! P3 Z4 ]. Y- j% w4 H  ^4 u: J- \
//connect to database  h1 w0 E/ X9 b/ Z# t$ G# O
mysql_connect($server, $db_user);
0 R: j( G8 K; S# g//add the timestamp from the user to the online list
# v6 ?; k( G/ T: w  z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' }" [6 s5 G' \7 [+ {('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" Q5 \; z6 }! ^9 y' _1 ?" p( wif(!($insert)) {7 S/ Z- j* w: f7 o2 t
print "Useronline Insert Failed > ";. _+ t7 c, _) r. ?
}" M5 `4 E1 t; O' e9 c
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. |( M- v! Y) o+ ^0 J5 D; ?
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! ?  i/ ~7 e2 h0 {' o( mif(!($delete)) {- b  P! p/ W; j5 t
print "Useronline Delete Failed > ";/ f% M. Q! L# V) Y- d; M; |
}) p# S* ^8 X6 r
//select the amount of people online, all uniques, which are online on THIS page
+ u( F8 K2 p8 h; S, t9 O$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" D2 B6 W8 z7 E* n, X2 uif(!($result)) {
$ v- m, D% g2 Zprint "Useronline Select Error > ";
1 `5 h8 H1 F/ s1 E3 H}
: Q+ R2 m, u$ {) C& `% A//Count the number of rows = the number of people online' v! v3 m$ Y7 R3 P, k# e
$user = mysql_num_rows($result);3 J6 x* ?& V0 |) S
//spit out the results
! P/ |+ b1 l7 r8 O- W! I7 N9 t& Nmysql_close();
& v0 V/ V" A  sif($user == 1) {. r0 m1 `0 E% `* |  ?
print("1 user online\n");" K1 g: G" \+ O6 [- r" N6 B
} else {
' b; m0 \  ~' n9 ~8 l& Y9 b! P2 K( Rprint("$user users online\n");0 K6 A5 ~- Z) k  X
}4 J2 G( I2 Q" c7 o* J2 p$ d' T4 Z
?>8 h% ^: A- J0 U6 R) W) L+ o/ c
. T/ y- y4 R# M0 q% O
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。. w$ }5 Q( L8 w( n, K' U8 P
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。9 I; Y$ s) Z1 M/ G9 \
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
* c$ \2 v8 s* i( \当然啦,这两款主机也是相当不错的。( v1 N) F7 h9 g7 F4 T
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年1 y% }1 k; }; w( A/ D
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
" ^% h# O. x2 O! B3 ~2 [9 I& ~提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
4 z: K7 L7 C1 s空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) F0 V1 X1 O" s  a
自己加QQ去问吧。

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