返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!1 \5 z7 k- A3 i! b4 L6 M# B
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。+ f& A( |" w: f% M
首先我创建MYSQL数据库表。
5 t8 E' o: L' Q2 Z, ~' dCREATE TABLE tablename (6 l# O# }2 N5 i/ o
field type(max_length) DEFAULT 'default_value' (NOT) NULL
* A3 \: j5 ^2 Z! [2 w# t+ c. R}可以使用的SQL语句。7 f% M$ d, w+ J. D1 I9 A- v  m
CREATE TABLE useronline (! C8 A2 l7 U% ?. s
timestamp int(15) DEFAULT '0' NOT NULL,
+ R% @8 l1 m8 c" f! c! c4 zip varchar(40) NOT NULL,/ m  b( Y3 r- K6 W
file varchar(100) NOT NULL,2 ^( B1 D# `! J% z- o
PRIMARY KEY (timestamp),
; s7 l4 V7 @) n( |0 K( n4 tKEY ip (ip),% Z5 P# B: l) s" l+ v9 A2 B
KEY file (file)* g- F) U' R: b- R9 C) L
);下面我们是PHP脚本,首先我定义MYSQL的信息。/ c2 l" N, c( r3 e( T0 L! ]  k9 I
$server = "localhost"; //你的服务器; u: s+ f" \) |" x- v) J
$db_user = "root"; //你的mysql的用户名
  O( r. Y; I$ ?  P/ ]( Y$db_pass = "password"; //你的mysql的密码* m$ r/ z3 D6 x% w- V: x# i
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
# K7 D) }  x! C( m$timeoutseconds = 300;取当前时间。
$ i" X. Q6 i$ Q8 k$timestamp = time();上面的完整代码:/ t  F1 e5 f7 ]" N- ~! A
<?php/ A4 [8 a2 u; }/ a( u# Y
$server = "localhost"; //your server. I: A* ?5 I/ {1 j0 s
$db_user = "root"; //your mysql database username1 @9 T& O1 p0 U$ H
$db_pass = "password"; //your mysql database password if any) E4 v1 h/ K% A2 _3 N
$database = "users"; //the db name
2 l7 y" S* @+ D. G4 J5 O$timeoutseconds = 300;//timeoutseconds limit
) |+ w" Y6 L$ j; j//get the current time5 X: [# `2 R1 e' w2 y) q8 l
$timestamp = time();
# m2 N; p% F8 f( T. W//calculate the lowest timestamp allowed5 N! r+ w) ]8 A; F# l1 m, T
$timeout = $timestamp-$timeoutseconds;
5 R- d  S* W2 z; H?>连接mysql2 I' U1 t- [' q* @  q3 u
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 ~6 g. e: x& C! u2 _) bmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ c/ _( O/ v, b0 x% v
mysql_connect($server, $db_user);查询数据库的代码:
" `4 ^* N- b2 Kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。) q! V$ m2 Q* Q% {# g; ~
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 W. Z# \1 ]( T2 Y' m- e('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% a7 Q: |8 ]  t如果用户用错误信息的话,这样处理。: j$ A0 l! v( L+ {$ E# n
if(!($insert)) {/ R4 O, ~5 \3 V. Y
print "Useronline Insert Failed > ";. I* o0 q1 @# H2 I& y" s6 I
}然后实现当超过设置的时间就删除该用户记录。
% Q4 E# }, \, N4 r# Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
. O5 l  F. q2 Hif(!($delete)) {9 g/ o, }. ~5 V3 [: R
print "Useronline Delete Failed > ";
! t( t9 V, G  A2 F5 I" w& y}下面我们解决数据库中不同IP的问题0 u" I' T& ^9 b) p3 i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
% j: g8 D1 ]. x& wmysql_num_rows(query);来统计用户,代码如下。9 z) y! {3 T' ^; g
$user = mysql_num_rows($result);最后关闭数据库。
* S# r7 _* O+ Tmysql_close();显示在线的人数。( S  n/ p, `. H% i; r
if($user == 1) {
4 s9 m# `- Y$ h; K2 nprint("1 user online\n");
8 H2 N' Q4 M2 m! R} else {
4 _- i+ I7 c- h& U* F4 J* i% Xprint("$user users online\n");
6 ?$ [' C" F. b( ], F4 B+ B; _}最终把上面代码写成一个PHP文件如下。
! @! A% P7 t, e<?php
. S2 M6 K6 `8 g//Put your basic server info here
( u0 L& v* i( ^  L. k, F$server = "localhost"; //normally localhost
* O% {# v1 s) J" T2 ^9 ?/ m$db_user = "root"; //your MySQL database username
; Z% K2 ?4 W$ B" p- t7 d6 l% U# k' u$ [. t$db_pass = "password"; //your MySQL database password
0 }6 c# N7 }3 Q4 T, e% E$ \) m1 S$database = "users";
2 {; L* X/ o) t% c/ l$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 `2 d9 K2 A, @  T& ]4 b// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 Q. Z+ L# v+ ?
// $timeoutseconds seconds)
, Y  F6 U: q$ t5 g# }6 U0 o* f//this is where PHP gets the time
$ Q3 S8 K3 x4 \# k% F$timestamp = time();
2 i: y8 l! E- E$ s) u, X//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 c. I+ W% [  @! ]: V" @6 k) Y$timeout = $timestamp-$timeoutseconds;+ u9 L4 K+ z+ X: q
//connect to database
# z0 `& G1 k# k) ?% }mysql_connect($server, $db_user);
# A3 c4 u5 F6 I//add the timestamp from the user to the online list
1 E4 N( z, B9 C* m$ |$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ H# W( M% R" N" G) O. x* m3 @. j('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 x% A  z# _3 o1 p7 e1 j4 \3 Cif(!($insert)) {* w" D; x, v# B8 I" a" J
print "Useronline Insert Failed > ";3 D8 q: V. {8 w/ i
}
$ ^2 ~4 f* S6 r$ \: z8 H# ]. {//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
* B' C, f9 O- W/ }$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 R6 \. g% C! |0 \  A4 y( b" U
if(!($delete)) {  Z& f- g: U$ y
print "Useronline Delete Failed > ";
; B- ?1 W  Y1 t& c' y- T}
+ F2 K$ }; |1 s9 y! p  ~//select the amount of people online, all uniques, which are online on THIS page3 `+ b) N! x1 ~) V
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" Y* V) ~! A7 _  J5 o1 ~& m
if(!($result)) {
& Z  ^7 y  w/ A6 g. aprint "Useronline Select Error > ";
6 e. H2 Y' _' `/ F, o}3 O5 t4 J: \6 Q$ u! \9 R! u, ~
//Count the number of rows = the number of people online
" q# h2 F0 ]9 @$user = mysql_num_rows($result);
8 f- P) Y# |  i- q0 e4 X7 A# q3 ^//spit out the results
3 ^8 m+ W( o2 f4 K. |4 ?, L7 wmysql_close();
: B5 C$ d+ Y9 z; Eif($user == 1) {: `4 z5 Y0 t* J  A( V" E
print("1 user online\n");8 j" @' I) u. ?; |" ~+ ]
} else {
) D5 |2 f. |6 Mprint("$user users online\n");) i8 c7 r5 j1 T7 a7 i
}0 L) p4 [6 T, o1 b1 {
?>0 Y! c- W9 W, ?# Y5 `4 h9 l
- n1 S8 a$ S/ Y% s* V/ v' l/ V% ?
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' ^1 m. ]1 m$ d' l+ j& }时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 C9 I  U# N, C! K4 z2 A我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# K4 z$ B9 M, T5 W0 C当然啦,这两款主机也是相当不错的。
$ n' l$ _% ]9 o0 Z0 z2 l智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" C6 ?* e8 S4 W6 W2 Y" o9 [1 h
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 y% s) V, r+ F提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 L. v. X3 N7 `$ }8 Y6 D) d
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
  D; `9 G3 [  `* G自己加QQ去问吧。

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