返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!" O3 V& r8 X! h
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
. U+ _. e3 T, U首先我创建MYSQL数据库表。4 B& Y* N4 E* A! x3 I1 Z' y; Z. g: \
CREATE TABLE tablename (/ z* S+ N8 A: G$ h
field type(max_length) DEFAULT 'default_value' (NOT) NULL
  ?" i/ q! o' c! ~& o}可以使用的SQL语句。
9 x  R3 x7 t- ?$ I/ lCREATE TABLE useronline (
5 l; _) [! p# u0 X+ J7 @* M# utimestamp int(15) DEFAULT '0' NOT NULL,
4 _0 t: t+ ~! q% P9 yip varchar(40) NOT NULL,2 m3 l6 y  M. A% U  B2 h1 \1 \5 w
file varchar(100) NOT NULL,& K8 B, _  @  B0 K' L, X
PRIMARY KEY (timestamp),
+ g: E# {0 ]1 WKEY ip (ip),
9 b. {5 `9 y1 \KEY file (file)9 W" W. M2 t* t6 v, m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
/ A5 b# {  Y/ m- t( v$server = "localhost"; //你的服务器
+ w  Q1 S; |9 A0 R, G$db_user = "root"; //你的mysql的用户名( ?/ \1 G9 i' u: l; `* c5 t9 r
$db_pass = "password"; //你的mysql的密码$ `, {* D+ ?/ O2 S8 P1 O1 J$ Z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; E, ]/ g. \$ ]: u$timeoutseconds = 300;取当前时间。$ ?, ]; U7 x% \! P
$timestamp = time();上面的完整代码:' n- Q5 W0 ^! m. @) ]1 s
<?php
8 F6 s% G' G4 ^/ D( {  o$server = "localhost"; //your server
6 D/ [- P4 O( H; E  }$db_user = "root"; //your mysql database username! ^& y( v3 m8 e5 \
$db_pass = "password"; //your mysql database password if any
' R8 B: \- g( Z* e$database = "users"; //the db name  f/ ?7 H, a6 }' M1 h; |
$timeoutseconds = 300;//timeoutseconds limit$ a; Z. w+ v' d5 ~( K# k+ U, v9 J; J
//get the current time; h& N9 o( a$ b4 q) v9 r3 ~$ ~
$timestamp = time();! _1 v, f! Q* X; W8 T$ a
//calculate the lowest timestamp allowed, u: m7 x9 U' Q0 T
$timeout = $timestamp-$timeoutseconds;
  n- \6 o. D; T0 \, L# l?>连接mysql! H, `: E  k4 u6 V7 U, N
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。# Q* }3 W+ }3 H/ ~: U
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接$ K3 A- Y% v  @- t3 D2 c: b
mysql_connect($server, $db_user);查询数据库的代码:1 x, M4 L( ^* `/ I- [3 o7 \  a- a
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。* d' r7 {5 H( W: M" R1 u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* D6 Q5 O' [1 Z+ @' L/ _( `/ _. v('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( i' z/ e+ K* `8 j# ~  E/ G: p如果用户用错误信息的话,这样处理。% H3 [7 X( d, k$ c
if(!($insert)) {
' k( ^' x- {: y, |+ Fprint "Useronline Insert Failed > ";
9 w0 `' U/ S; }7 @1 c" [}然后实现当超过设置的时间就删除该用户记录。
! }& @0 {7 N0 i8 \0 {- d" G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。. p+ S  X( @' |0 o& M9 ?9 q8 S
if(!($delete)) {
7 ]) p0 B, R7 Qprint "Useronline Delete Failed > ";
8 B+ ?8 c8 K1 n: u" O}下面我们解决数据库中不同IP的问题$ {8 ?2 {! q, h
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 o( s% b  ?2 b* h0 jmysql_num_rows(query);来统计用户,代码如下。+ J  ^) _+ r, c7 Y6 ]' Z% G
$user = mysql_num_rows($result);最后关闭数据库。4 ]9 V3 N/ b# M8 N
mysql_close();显示在线的人数。
3 j: I' ]+ y/ m; d5 A, @if($user == 1) {! a; L" m" s" _
print("1 user online\n");
* H& f. ]5 B; p5 j- s3 L, g  U1 A} else {# |9 i1 u$ b% n/ _
print("$user users online\n");
5 P9 C: K% U, Y}最终把上面代码写成一个PHP文件如下。
' H9 n  ^  u, i) [. G* ]<?php
9 ^/ L+ T3 ^  d" I9 }//Put your basic server info here6 D$ S7 C, h" o/ J9 [
$server = "localhost"; //normally localhost1 ?0 A8 f4 G- v' a  r
$db_user = "root"; //your MySQL database username
% M  K1 V8 ^2 ]$db_pass = "password"; //your MySQL database password: a# s# s; I" U( J, x
$database = "users";
4 U" k* k! Z- c$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 E6 ]5 |4 I) b2 A+ Q3 w2 q* }// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
" R+ N! E: O7 C# [0 ~* A4 F0 o// $timeoutseconds seconds)
+ |2 V! d( D5 F! A8 L5 g//this is where PHP gets the time$ ~0 a/ k8 U+ q0 y  Z$ }
$timestamp = time();
. u9 l! U( b) S& V//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* ?$ o; m) o$ u( N9 {$ J6 t% {
$timeout = $timestamp-$timeoutseconds;
& }% X- L- b5 U" p: k//connect to database# \, Q2 J0 {  f' h: y8 V  ?& B
mysql_connect($server, $db_user);
& O( V/ R6 N) Y/ A8 A//add the timestamp from the user to the online list8 z: n' _2 J$ [+ }& |! h/ {! T
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 E/ v4 P$ {& t# e% o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 ^7 E3 Y. N$ X% @* O
if(!($insert)) {
- U8 H/ v" l  \print "Useronline Insert Failed > ";5 I4 I3 k' F3 [5 E
}$ l0 n8 C+ ]7 V4 K
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.  F0 K, E: i0 @4 N9 K* I" X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
9 `. x. i$ X2 v% X" K$ @# A$ Rif(!($delete)) {4 H8 c% j# l3 @6 S. E: F
print "Useronline Delete Failed > ";
' e7 F% q6 J" _( W! ?! B) r}
/ n- ^1 J2 f( n2 K) \//select the amount of people online, all uniques, which are online on THIS page
" l( _% N* b+ y- h1 g( ~  ]$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 w6 S1 p% ?* l9 K: @9 n& D& h
if(!($result)) {
+ r8 y. T0 y: {print "Useronline Select Error > ";. p6 V  Q6 j! Z1 X5 N
}
6 u6 G* z/ ?2 X6 ~. W2 X//Count the number of rows = the number of people online# U$ P, G4 U& F- }( I7 ]
$user = mysql_num_rows($result);, g0 T5 g& x, C4 {
//spit out the results- }1 J* L3 T- S
mysql_close();" T' \/ M; O/ ^# j2 R% V
if($user == 1) {" \% S" w; U# U% s  h- A
print("1 user online\n");3 n4 Z: X  O, S1 v9 T9 n" N7 ~
} else {
9 O" E: p) a! l6 D+ ]print("$user users online\n");, Z+ P* O3 r/ j2 j" w3 \% l- ^: m
}* }1 E5 J  c" H# p4 D) c
?>
) G1 p/ I8 G* X& `% }+ V6 W% a& g# @5 ^7 a/ }
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。( D$ K. r5 W) N  b
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
) o3 X) W. c. P* u8 c我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" J0 o! I7 W% e/ V* j! U当然啦,这两款主机也是相当不错的。
# i) s+ j6 u4 e( A/ g8 m$ H# o智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年3 T  o7 }- \4 i0 {" [
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ ~% [/ e" \  @" e+ O& g& j
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
! B  C3 H2 u; s) ^空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55! N0 i: N8 n0 S: b9 O% j
自己加QQ去问吧。

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