返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
% T1 y; n+ e4 C, m5 K我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) t) U- h6 S1 B* G
首先我创建MYSQL数据库表。" M/ f( p& B! q
CREATE TABLE tablename (
" ?  s  N4 M4 bfield type(max_length) DEFAULT 'default_value' (NOT) NULL0 B, j6 U+ o9 M* @/ V, p
}可以使用的SQL语句。1 }6 V/ z6 t* ?5 A. y
CREATE TABLE useronline (
9 |- e9 {7 B0 }0 s. {; R0 `timestamp int(15) DEFAULT '0' NOT NULL,( X3 @( h9 b, n( {* X- j  O
ip varchar(40) NOT NULL,
  a: n+ ]' h2 ?# {( m; Rfile varchar(100) NOT NULL,8 _) h3 r/ |9 p% J$ \: g4 O$ L9 `
PRIMARY KEY (timestamp),1 p/ {/ l8 C" ~" }
KEY ip (ip),$ z" X6 L* U$ l( z
KEY file (file)
0 _0 e& j* g; M( K5 I/ {. H# M);下面我们是PHP脚本,首先我定义MYSQL的信息。1 z/ \9 _9 z) r8 M# O* i
$server = "localhost"; //你的服务器
: `7 Y+ j# [" v% I: [$ N1 Q$db_user = "root"; //你的mysql的用户名
% O4 B% y( ]! @5 ?! V$db_pass = "password"; //你的mysql的密码; `. j. ]! s; `1 d
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 w" F* u2 O- ?# F# V, K4 \
$timeoutseconds = 300;取当前时间。
- M2 g! I2 K" B$timestamp = time();上面的完整代码:$ c1 j" I* [4 Z, R% l0 m
<?php* ]4 w% g$ V( l: }& d2 n2 B
$server = "localhost"; //your server$ G9 d1 S0 j7 i, m8 N3 }: v9 e
$db_user = "root"; //your mysql database username
% u( I6 B+ _7 D* V$db_pass = "password"; //your mysql database password if any: ?4 A' M2 l. t0 Z3 n/ ]& U
$database = "users"; //the db name" I/ |5 _4 w9 M. {0 X# X
$timeoutseconds = 300;//timeoutseconds limit5 f3 c' J- _3 j" @; Q
//get the current time
  e4 ]4 n0 V* |& n! t) A/ m- J3 X$timestamp = time();2 Y# E2 F5 u8 K( G! u
//calculate the lowest timestamp allowed
: n! `9 q5 i+ N% Z' i7 Y2 M4 |$ x# i$timeout = $timestamp-$timeoutseconds;4 l: Q. ?, E0 t( z. v
?>连接mysql
$ f2 ?! B2 U6 ?; Amysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& ~2 m- J# l: {mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
! _# v& l3 |; ]mysql_connect($server, $db_user);查询数据库的代码:
: Z% L  ?$ `! U- I# |+ D& [3 [- rmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; ?. U# Q# M: h! O/ e% E; y# Q( u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; }  ^: m3 z& n" T5 T' k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 w4 b% f0 k0 n5 Q( @4 p如果用户用错误信息的话,这样处理。: x% P. U! ?; o$ M
if(!($insert)) {3 P$ p1 `' e6 `9 u' V  Z
print "Useronline Insert Failed > ";& h  ]4 f: N8 W3 b7 m' V- V# c, X
}然后实现当超过设置的时间就删除该用户记录。5 J/ {7 y& {  g. T& c+ {
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
( i6 t5 d. Q# {if(!($delete)) {/ W, M9 \* s2 M- t+ L7 p2 f
print "Useronline Delete Failed > ";
4 r5 t& k% g9 u7 L# s% o! n}下面我们解决数据库中不同IP的问题
% c" G* l$ h- G# K) m% ?6 s$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" q8 E5 Y9 N8 g7 c+ ?+ x6 l+ M, D
mysql_num_rows(query);来统计用户,代码如下。
% ^5 n3 i: A% N3 [$user = mysql_num_rows($result);最后关闭数据库。
4 u8 @0 H- H0 P9 w8 Wmysql_close();显示在线的人数。
# B" p3 E# R: n9 @' m% V, }if($user == 1) {% O( {2 {/ Z9 V) i: H+ p+ Q; d8 n4 b
print("1 user online\n");
) J. j* A) u' X0 ^5 G} else {
& T" S- T" [, Fprint("$user users online\n");
: d: {  \  S1 S, U9 o, E}最终把上面代码写成一个PHP文件如下。
$ t& V0 N: e8 w, q; U# a8 p<?php
3 S& M6 q8 B4 l9 d//Put your basic server info here
. M0 u4 [9 B# d9 w! K- I$server = "localhost"; //normally localhost
+ c) Z% A1 ]7 G3 |+ s. n$db_user = "root"; //your MySQL database username+ i) Z4 N7 L6 s8 K0 w
$db_pass = "password"; //your MySQL database password6 }0 o* Y: _6 T5 x! I
$database = "users";
; b- M5 ?$ l3 N7 K  p* X& C$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
$ j) j- f0 Q" v' W// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last" P5 z7 e8 O) T2 ]1 J
// $timeoutseconds seconds)
4 K! m5 M* p$ M# \! M& @) H//this is where PHP gets the time3 S( f! ^3 a* h9 \$ f
$timestamp = time();
! [4 T2 t9 V  x3 A% R* J' d5 d# a//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
; w! e  `' V4 l( \# s( y& T$timeout = $timestamp-$timeoutseconds;
7 s6 @+ \! h% t, y//connect to database
! m6 D4 E* x! Lmysql_connect($server, $db_user);
6 F+ x! `1 ?+ V0 {//add the timestamp from the user to the online list; [1 N5 |# C, ~& v! b3 F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 `) @# C- T" W9 V('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. w; l) j0 Z7 L* T, cif(!($insert)) {( d6 w; [0 v. K; q3 l6 x
print "Useronline Insert Failed > ";
  D% W7 q9 a0 e* A$ H4 S2 W}/ a# E6 w' m4 L$ P$ J7 c8 ]4 H8 I( D
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.( s8 o( N6 f- D) |2 ~
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* P1 q. V; d. z
if(!($delete)) {
3 L- J: Q7 y* \/ \print "Useronline Delete Failed > ";/ {! g5 _  f, S1 C
}: k$ O: k  l7 M) o& l! {: g
//select the amount of people online, all uniques, which are online on THIS page* |  s) \) h* _3 F  T$ A
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
! t+ e* _% H/ Y+ c2 J2 X1 tif(!($result)) {
9 B  Z: y5 p$ a0 f/ Pprint "Useronline Select Error > ";
% [% |. x) N6 F) j}+ T4 N) I% i) ]& ~( F5 d
//Count the number of rows = the number of people online2 _* A+ a! h- [- F3 F. h/ \
$user = mysql_num_rows($result);! N5 X% L2 X/ l* A+ y
//spit out the results
% A1 Q! v( l! Emysql_close();& L8 w  U- R9 C9 d+ {- l
if($user == 1) {, Q3 y' L! A; T' [0 D
print("1 user online\n");
. t0 A6 R  y; j/ _, F# U& P} else {
! e& H. K, x0 b- m( b" u: ?print("$user users online\n");2 v* d& r# ^$ v
}
6 |. @4 j% o" v* {?>4 v6 A2 E8 q$ [, W9 l: S

  g6 x! e8 _- @/ c以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ T1 g8 h7 U6 T9 U1 z( u/ W6 S时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# i& Z2 j. q9 [/ l" j" p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
4 @3 C2 B/ y# E, j当然啦,这两款主机也是相当不错的。
/ ~/ Y% p; C1 i' n6 l2 g8 c$ l) P智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
  o+ B5 e0 \, s) c: n4 G; P" a标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年- j* P# i8 Z4 h' i; J+ m
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
. @% h; \. g, O- k0 V8 X3 g; N空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
1 Y! g- X& w1 K0 K自己加QQ去问吧。

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