获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; x$ w8 A- h* i, U
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 V8 B7 h% v, b$ |& A首先我创建MYSQL数据库表。  M8 Q- a5 i: b/ b' N
CREATE TABLE tablename (
3 R+ s# l4 ?  {, F, Bfield type(max_length) DEFAULT 'default_value' (NOT) NULL
0 {$ Z$ {, D) N# x! k1 r& B}可以使用的SQL语句。
" ?& j1 D! b5 A+ K' [, l5 eCREATE TABLE useronline (
9 m. Q& j, I' F/ X& utimestamp int(15) DEFAULT '0' NOT NULL,' G) ~/ Q% E/ B) A
ip varchar(40) NOT NULL,, {) Q( {" L8 p$ I  K8 n. \# A9 O
file varchar(100) NOT NULL,/ I5 g# `0 o) W
PRIMARY KEY (timestamp),
# k" V8 W) p; r! zKEY ip (ip),, `: i/ C2 x3 F9 n
KEY file (file)1 K& k- Z' r  Z! c- |8 s; g
);下面我们是PHP脚本,首先我定义MYSQL的信息。
; R' i6 I4 m  F6 e" z2 y$server = "localhost"; //你的服务器- q1 q4 l: h; Y. y
$db_user = "root"; //你的mysql的用户名
7 |, @, U" ?! t+ O+ m" O7 H# N$db_pass = "password"; //你的mysql的密码8 d. s9 {. V2 l$ V2 n) Y3 s8 I( l6 N3 }
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)+ d* [+ F# `8 N; H
$timeoutseconds = 300;取当前时间。$ W& N' R1 q/ _: u! R
$timestamp = time();上面的完整代码:9 i' I# H# w9 b# R; A' U& b
<?php
  q/ E5 v" t' I% j4 _* `$server = "localhost"; //your server
; @; w8 I- q2 }7 L& J- {2 I$db_user = "root"; //your mysql database username
& \0 l- B; W5 b9 L9 Q) p$db_pass = "password"; //your mysql database password if any
/ P* l/ |) {. y! d( R! e' N$database = "users"; //the db name+ v$ X$ [9 ~6 P: V
$timeoutseconds = 300;//timeoutseconds limit
; q: z. y5 y1 ^9 h1 {! \5 c. P7 ^//get the current time1 |1 `( F) H5 j
$timestamp = time();
" q2 Y4 w8 K2 w7 E0 J5 b7 D//calculate the lowest timestamp allowed
; {. i' U6 W5 g' [9 b4 o$timeout = $timestamp-$timeoutseconds;
& l" {/ }& D) C& M( A8 R?>连接mysql2 M7 y' C6 _! e7 _! K$ t: j3 a
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。  a/ U) C# w. h" K4 a7 s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接( N1 T, n4 u1 W! y  c
mysql_connect($server, $db_user);查询数据库的代码:* K+ C9 H8 t: K2 o* J8 ?# O
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: c8 r  q% b: C1 {6 K6 l  J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 R& l7 h9 z8 a3 S  q' s" T
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
  B# x( |$ e4 t- C如果用户用错误信息的话,这样处理。3 a$ i( E1 w8 J: c' U* |8 S) F
if(!($insert)) {
' b$ I# l' x) c- n8 T8 y( gprint "Useronline Insert Failed > ";
* F0 O# z( ?* U% M- X- T+ V}然后实现当超过设置的时间就删除该用户记录。
9 C9 s9 C8 P( ]# b4 b4 E) x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
) s# o) I5 l/ a$ q. A6 V3 gif(!($delete)) {, P4 E" }$ I- N) q
print "Useronline Delete Failed > ";
% l1 J# u" w' [- l}下面我们解决数据库中不同IP的问题7 C6 k6 s( [" `. V! t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
* `( V& M( E3 s+ ?4 Bmysql_num_rows(query);来统计用户,代码如下。
6 l: D1 o& z2 C/ B/ M$user = mysql_num_rows($result);最后关闭数据库。7 P) }4 f/ m3 S( k1 }
mysql_close();显示在线的人数。
7 D: e, t6 c0 Q! P' C( m, ^6 eif($user == 1) {
2 g. w6 c# {  R& {print("1 user online\n");1 D5 r& [9 d5 w) u# v4 j
} else {
1 ~# C! F- u/ [5 e+ |print("$user users online\n");
! C: y$ ~. n' i7 S2 g4 H& d8 h}最终把上面代码写成一个PHP文件如下。
9 ^0 E3 R3 _  H! B/ s8 U# r2 j) d<?php
- {( g0 }9 \' G) T9 o% B0 Q//Put your basic server info here
" v0 H4 {# G$ ^$server = "localhost"; //normally localhost/ |) [+ k: M5 L6 P( q4 H+ p
$db_user = "root"; //your MySQL database username' O% P4 W4 n# `! j. {
$db_pass = "password"; //your MySQL database password
$ _$ q% W" j& K$database = "users";2 T& z& Z( I9 p! g# M
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 M' w. E4 d( N' t// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* |# p8 i, i6 a' }( \7 v
// $timeoutseconds seconds)" L8 J8 W/ ]& l
//this is where PHP gets the time7 P1 P9 G6 N$ K$ G
$timestamp = time();) J, m3 u: g/ d
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ a5 ]0 V0 `9 x8 o' I* r- s$timeout = $timestamp-$timeoutseconds;- y4 @+ k4 K8 ]8 d0 S" R# S
//connect to database8 f  L' z! |! P  `& w
mysql_connect($server, $db_user);4 c8 G0 Y" W/ @. p
//add the timestamp from the user to the online list/ o  ?. t# s( O8 [  M7 s+ A2 Z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ L2 u1 C9 Y7 t: C" t8 E' q8 Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 z* K% b3 ^$ V2 E" v' o9 }if(!($insert)) {
' F6 m+ B# x4 cprint "Useronline Insert Failed > ";
8 @( \+ }; Q: C- E}$ H: U. K) j+ ]/ s/ d
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
% `5 u+ Q3 m1 O$ ~7 P0 `/ Q& S$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& {/ |# ^6 m4 a
if(!($delete)) {
  {  E/ {; d+ m4 \% h( Fprint "Useronline Delete Failed > ";
* `: \" I( `& h; c( `  u}
% Q$ K; |: q' k7 [8 J//select the amount of people online, all uniques, which are online on THIS page$ O& \$ ~, F) O* I0 _
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 B3 H+ x4 P8 ^3 {" |if(!($result)) {
: s6 \/ W$ J4 z4 f2 _( x" }print "Useronline Select Error > ";
6 o' ~8 I/ R+ M, s+ C" I) l/ n}# T; n" e. ^& j) E. j% v
//Count the number of rows = the number of people online
  k! |# R$ P" A6 k, @8 U, l$user = mysql_num_rows($result);. H1 q3 e. F3 ^
//spit out the results6 {# D4 J8 F# h) \& H# `0 ~
mysql_close();0 ^; [; E, y; V( }( U# f- _/ L
if($user == 1) {# c& _7 {( r; G$ v
print("1 user online\n");, |, o0 |9 Z& R& X0 C
} else {
: M8 u8 r" \5 {( B8 |, L3 [& e. ~print("$user users online\n");
2 Y/ u+ r/ r) K5 r7 @) ?; m2 A}
+ t6 x2 q+ c; W?>
4 a! f' i" ?$ ~3 a" F7 Y* o/ k# O- e% A* \4 X  R
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
# }# f+ Q$ \& q时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。  g4 l: ?/ M. W# [# i7 j% ^
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。$ Q, p% X' T4 b9 v) G. Y
当然啦,这两款主机也是相当不错的。
5 o3 x# L: Y# J智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. T' @3 L7 Z( B2 l标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( J  ?& o, G  t# b: V
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/   K" ^9 P' C1 ?4 a% }
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) P7 \5 Y* k5 G( K2 s
自己加QQ去问吧。

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