返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 j% c3 r: _% a- y9 L8 o$ m
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" r7 o& P; v' d首先我创建MYSQL数据库表。
  ?5 x) y3 G" J+ ?CREATE TABLE tablename (
' \3 ~  Z. u* ~: ffield type(max_length) DEFAULT 'default_value' (NOT) NULL
# A. a" _+ O. D/ R  G  u}可以使用的SQL语句。
% E. E1 |( `& r* X5 A* ECREATE TABLE useronline (6 g9 G5 }" ]% k/ e% s2 y) e( G
timestamp int(15) DEFAULT '0' NOT NULL,
) w- x+ M$ D1 y; m1 r3 A$ o8 Sip varchar(40) NOT NULL,
  e+ \; N; b2 q# E+ v8 wfile varchar(100) NOT NULL,% f* H* G, X3 W
PRIMARY KEY (timestamp),
' U8 ^6 C$ h( z, L. s1 [KEY ip (ip),
3 j+ T: f! q3 \0 p2 r! cKEY file (file)9 E1 Q/ s$ k, a: C
);下面我们是PHP脚本,首先我定义MYSQL的信息。# A4 D/ ]# g$ w: W& w0 u9 H8 ?
$server = "localhost"; //你的服务器
* V6 N1 N2 e2 W* |6 B8 A3 j7 o$db_user = "root"; //你的mysql的用户名5 T( u  d6 G, Z5 e( W" Z: W
$db_pass = "password"; //你的mysql的密码
2 j) {8 B' N+ c+ @+ }$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( @) a) g. W; N0 q, D$timeoutseconds = 300;取当前时间。: x0 A2 t; q6 h/ F7 p
$timestamp = time();上面的完整代码:. m4 X) ], _; w( R  M: w5 F
<?php% x- d4 g* ^- D; A- x
$server = "localhost"; //your server7 F; c( v, P" R+ q. A
$db_user = "root"; //your mysql database username
4 f3 T9 J0 f9 u% z1 _8 p/ S$db_pass = "password"; //your mysql database password if any. _2 T7 V+ n$ d4 T) D: a5 C
$database = "users"; //the db name
, j' F3 l& w% @$ i, B6 R. w7 K$timeoutseconds = 300;//timeoutseconds limit5 C! \! O4 V9 ^0 i9 F9 h+ `# V
//get the current time9 _3 a" u% c5 S& @
$timestamp = time();
9 E. x4 `8 n0 Z//calculate the lowest timestamp allowed. d/ N5 R2 _8 i/ S) e
$timeout = $timestamp-$timeoutseconds;
! y& k( J  V* @' m1 @?>连接mysql
7 T2 G: \, c) A0 i  I2 Omysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 Y2 `7 x4 l! {$ f' f
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ J# L8 Z; i4 U: _) C' L
mysql_connect($server, $db_user);查询数据库的代码:  y& _0 O$ v6 u# S0 ^
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 t$ S( s4 ?+ z6 h' _2 }+ ]8 [2 g$ F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 J- ?4 Y7 _! U' O' b+ T('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# \' E" B0 Q6 X& a如果用户用错误信息的话,这样处理。* R  U: e; `1 q- Q( p7 k
if(!($insert)) {
2 k, h$ ^4 ?; k7 @  r) l9 N  Dprint "Useronline Insert Failed > ";
- G( Q" k" G+ D}然后实现当超过设置的时间就删除该用户记录。
: |/ Y, {7 z; _4 [( k9 F7 _- l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
" X- @/ x0 u( u4 P7 Vif(!($delete)) {/ M* e6 n3 }0 T1 N6 Q. s0 c
print "Useronline Delete Failed > ";
. [7 u/ c3 D4 R/ @, |}下面我们解决数据库中不同IP的问题
9 d( t4 J. ?3 e1 k0 k2 y/ i  b$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
, ]$ J" w2 U4 w6 R$ kmysql_num_rows(query);来统计用户,代码如下。3 A. M- f( p1 y
$user = mysql_num_rows($result);最后关闭数据库。
) J9 V# w3 K$ ?' wmysql_close();显示在线的人数。
8 M5 c8 E$ y# M3 p2 p7 Mif($user == 1) {
. Q2 J7 Y" f, @8 n. a! a* q1 ]1 [& U: [print("1 user online\n");
4 p% ~! i; [9 v7 }5 u} else {5 r& A3 w- a6 R$ {) ?3 j
print("$user users online\n");
1 S( [0 I: n% m5 S. @' j}最终把上面代码写成一个PHP文件如下。$ T( i1 g, I# n2 n/ {- J! G
<?php
" T) H( f4 x% a! _* r+ R//Put your basic server info here
% c( N# T9 i. j( [& [- |& o$server = "localhost"; //normally localhost
1 U/ Q9 H0 \6 x0 [3 x" W$db_user = "root"; //your MySQL database username
& _( J1 F5 r- K$db_pass = "password"; //your MySQL database password
, K! q/ h0 s- [" O7 K" L$database = "users";! v: V$ S' S: v0 M# ^
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
$ L5 a+ ?7 x4 _' f% w// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 {* x& Y! H2 Q: N! S5 ~% P4 Z! t// $timeoutseconds seconds)
: t  f  A" C; Q. G6 Z, m) j//this is where PHP gets the time0 \* k8 @8 Y$ {& [
$timestamp = time();7 i" }6 G9 c0 L! b" \: ]- |
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, B; z3 ~, h9 `8 I$timeout = $timestamp-$timeoutseconds;+ O& f0 c6 g1 d/ X& s, x; Z
//connect to database
2 D& `# {( H- q) C2 Gmysql_connect($server, $db_user);" F# N2 ~$ t  ^3 P
//add the timestamp from the user to the online list5 Y0 f6 P) V7 z) F4 b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 x- W$ s$ m+ V9 E
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 Z( H7 R2 f1 }1 Q
if(!($insert)) {
& a8 B. W- x2 x; W& a6 Gprint "Useronline Insert Failed > ";
) d2 R8 Y+ A7 I# l8 P6 i7 ?}) v( s8 h8 L  ?5 G  O$ H
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ s+ t4 H% l7 }$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
% d- ]+ d3 u! t. jif(!($delete)) {4 F" _3 x* {1 c9 s, W5 H2 E
print "Useronline Delete Failed > ";4 y0 r+ C' n: g3 L
}
, d4 j9 k3 ]" h9 s0 W% t  p& H//select the amount of people online, all uniques, which are online on THIS page# B' l- C6 ^9 o+ A) c( P- _
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");8 i9 r0 m# V0 B2 ^
if(!($result)) {
/ o# t# |$ F$ E. Lprint "Useronline Select Error > ";  h5 ]9 e9 [: n7 Q
}
- C9 l$ F/ U: Y2 V  \4 y8 x/ J) K//Count the number of rows = the number of people online9 m- [0 z8 j! l8 N! M5 r$ q
$user = mysql_num_rows($result);
; {% S2 Y  x! ~2 _//spit out the results6 l; F( G4 f% H
mysql_close();0 n7 `8 }- [  P8 K. m1 u% l; l
if($user == 1) {1 p$ T* {7 I' X. L
print("1 user online\n");; T0 f) F. z3 R/ \" [
} else {& E  ~2 z0 j+ N! B1 J
print("$user users online\n");) n+ M* a- H3 A5 {; G
}. V; I) ^* ~6 S4 S, g# h
?>
4 L( k! M* z3 g# Y
  t% ^1 Y  S# v$ x以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
2 C1 `1 t# e: w' H9 h9 z: e时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。3 N2 {6 [! c* ~* @& f
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。4 X( b7 l! H( v/ {
当然啦,这两款主机也是相当不错的。
' r+ P9 L  z2 Y" p7 v* S智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 F0 q+ @9 D1 T7 W6 U标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
) F- O8 Q8 j/ M4 f8 ]3 s提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
1 U/ l! ~+ |" d: c8 M, Y$ l) C空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
1 ~. o& O7 X: n9 [( @! [5 _自己加QQ去问吧。

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