返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 X3 ]1 {' c$ E
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
- D* G( c& J6 V0 l2 ~+ Z首先我创建MYSQL数据库表。# N7 c( M7 g. D: X+ O# x6 i
CREATE TABLE tablename (
1 R3 i( X# ?4 vfield type(max_length) DEFAULT 'default_value' (NOT) NULL9 H9 d$ {- g' H  v- g/ c* ~
}可以使用的SQL语句。
" C$ s8 k9 x$ B& PCREATE TABLE useronline (
1 K$ k5 g" |3 @timestamp int(15) DEFAULT '0' NOT NULL,  z8 e4 ]+ c3 Z# Z
ip varchar(40) NOT NULL,
, I+ H: n/ `* s% K. Qfile varchar(100) NOT NULL,
' x: W7 O: A, z( U/ v7 l3 S" X$ QPRIMARY KEY (timestamp),/ ?" ~1 [. j4 p# o7 g7 |
KEY ip (ip),+ [6 Q5 D9 |9 o; X* i  O
KEY file (file)
; d: A  A" p) |8 q% M( a9 O2 H);下面我们是PHP脚本,首先我定义MYSQL的信息。0 d/ s; c5 Q3 A
$server = "localhost"; //你的服务器
6 t4 G; ~) ?- D$db_user = "root"; //你的mysql的用户名
; u$ G5 _, L+ B6 y$db_pass = "password"; //你的mysql的密码
9 w6 |+ E0 [3 [$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& K+ O; Q! Q. k+ w* P3 @% z0 S. i
$timeoutseconds = 300;取当前时间。3 X$ P! G/ ]$ ~) V$ C9 B
$timestamp = time();上面的完整代码:# Y0 [& G, c% F( V" @. e
<?php
8 P6 T- p0 {; w3 h+ J+ u$server = "localhost"; //your server" }  \$ A- ~( ~& q/ l! u4 f) |
$db_user = "root"; //your mysql database username
% e4 |" O% W  c5 P/ ^) ^$db_pass = "password"; //your mysql database password if any3 X! _& {; J) Q
$database = "users"; //the db name- u( ^5 B/ w  [! p
$timeoutseconds = 300;//timeoutseconds limit$ |( M6 _# {* n; Q  p, @
//get the current time
% F8 g" f! {! y4 v$timestamp = time();
; d# G( }+ k& G//calculate the lowest timestamp allowed& l. [6 G; o4 }% C
$timeout = $timestamp-$timeoutseconds;& ^& n( E: h. w6 s$ v4 b2 o
?>连接mysql
( d0 d& I, G0 n: N* Y, Omysql_connect('localhost', 'username', 'password');也允许使用变量形式。
- [9 l+ R0 U& L8 Y. K$ @mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
+ a! R4 z4 Y( U7 ~! e0 Bmysql_connect($server, $db_user);查询数据库的代码:
. T; {0 V0 ]4 ~mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。) L# A: K; j' o% I- _/ f: N4 T+ e, B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( {  l; I7 `& m' h& W
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% r+ C" V9 q" H如果用户用错误信息的话,这样处理。
: }$ B1 j$ e; n. h3 L( z) ~+ Zif(!($insert)) {4 A; A- @! U. }
print "Useronline Insert Failed > ";
4 l) t: u. w$ T" s$ H}然后实现当超过设置的时间就删除该用户记录。
5 e( L% I4 ?* S, J* v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; U/ R5 h2 \3 {# u1 [" {4 Qif(!($delete)) {
- S+ P: N- r- Z/ P$ Z9 hprint "Useronline Delete Failed > ";5 q" g% i& Z( V% ?' D
}下面我们解决数据库中不同IP的问题" _# R+ i7 f  J/ |1 |- E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 a- P; }2 D: D& fmysql_num_rows(query);来统计用户,代码如下。
# Q/ ~/ A8 c. E: m. [- v; o$ [$user = mysql_num_rows($result);最后关闭数据库。
2 I8 O" J+ e8 Q1 _1 a( B) @mysql_close();显示在线的人数。) A! c( O- b- q5 j! \7 d
if($user == 1) {4 U5 B$ F+ z2 K: ?, s
print("1 user online\n");
1 ^5 X3 s% j" P5 P+ V5 x} else {
4 d/ x8 S( \9 L( kprint("$user users online\n");! L" M! J6 |8 ]7 }; d6 e1 ]! |
}最终把上面代码写成一个PHP文件如下。
3 _6 g( b8 f: S<?php; a: S& |+ C. g
//Put your basic server info here
- O1 \! t6 C/ J7 r$server = "localhost"; //normally localhost
+ L7 k4 q7 v: k, J% ~; F$db_user = "root"; //your MySQL database username
/ h! Y# a* \& s% s$db_pass = "password"; //your MySQL database password( ~" P! S" f( f, ^3 j, P4 t" h
$database = "users";+ d7 ]; E2 ^7 f. \
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are1 k/ R& t- J. O9 A5 w3 p
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 F0 Y  Z1 P6 q8 h/ }// $timeoutseconds seconds)* @7 L, [* V# {5 Y" Z0 o
//this is where PHP gets the time
3 Y% k9 p5 L0 m% [+ E0 ^9 a4 @$timestamp = time();
- N- x. `2 w+ r% @  u& g( u//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ B, v6 ~& `# t4 Q$timeout = $timestamp-$timeoutseconds;) F) g$ U& I: ^  B/ R, s
//connect to database. D; u% U6 B- O2 B' Y
mysql_connect($server, $db_user);# _% e, N. s, t7 p. C
//add the timestamp from the user to the online list* O; |' g5 T& S3 u: v6 N* N
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& d1 Y2 m. g. k# l, P
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% b2 N  z# S& C- U, A/ ?if(!($insert)) {+ ^" `- w& F$ q4 ?
print "Useronline Insert Failed > ";
5 Y- m* S" d' d: c7 |2 ~}! t- W5 Z8 H! H$ ?2 z$ g
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.7 j# W. W5 y+ d
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: D; @' w/ H! B9 k; {if(!($delete)) {7 H" E& j+ {& O- p3 U
print "Useronline Delete Failed > ";& O! \  V: E6 }
}
( c! K# T" S0 c1 N( w/ ?//select the amount of people online, all uniques, which are online on THIS page
% B, z- [9 ]" V. }- W, ^1 z) w3 z0 R( b$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");, m5 U: D$ K: z8 c% n: Z, r" ^0 P
if(!($result)) {
+ \, N' @+ d" eprint "Useronline Select Error > ";
% H8 d) W% \8 R: o' F! T9 ~& W}8 t% y, F9 t% z
//Count the number of rows = the number of people online
1 k/ Q& X: b% ~, A7 G! J$user = mysql_num_rows($result);6 T; M9 _6 n% y  W/ q
//spit out the results$ W, N) ^' K- r6 ^
mysql_close();' B, r. T, |5 @4 Y$ y% E4 q" P* G
if($user == 1) {
9 J% W- P8 M  q( B* vprint("1 user online\n");
! _# l) J! C7 x4 y6 A5 Y} else {
: r$ p- i; l( B+ {) Dprint("$user users online\n");  [/ {8 u1 D5 f, S* v0 \
}
: x8 a$ h' h! f- ~' a  D$ A?>
: M9 X6 Y( y' W9 @' k3 p4 f+ B
- W) f4 L5 }$ ?4 k以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。  O& ?& w6 f, e( P
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。$ E, ^( x- A' k) {( \5 v. H
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( g. f, n$ M1 [9 }* B8 O当然啦,这两款主机也是相当不错的。
: O0 Y/ D: X7 U  ?智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 i% _0 [( ^# l2 s0 }4 E标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ _6 U6 g6 j5 W7 V- J. F- N6 B
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! S# n  _  o# N4 B0 J6 p+ d
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55: s) Z2 h- ?/ c; c' L
自己加QQ去问吧。

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