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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!( P1 L$ q- [1 a
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
: }% {& Y7 l' ~/ w# p! D! L# A首先我创建MYSQL数据库表。  K9 h  w+ O, r* {  _9 A2 K7 e
CREATE TABLE tablename (
! s% u: A6 R, B! @8 Gfield type(max_length) DEFAULT 'default_value' (NOT) NULL
; T6 {4 `, }4 f. C5 w1 l: [; V}可以使用的SQL语句。1 h% ?+ a8 X5 A/ t
CREATE TABLE useronline (; V0 \& D+ P2 p4 s7 ~5 h
timestamp int(15) DEFAULT '0' NOT NULL,
( u) S$ @2 x: v6 D( b! gip varchar(40) NOT NULL,
( p+ _2 X# q$ s4 `( h% |* xfile varchar(100) NOT NULL,
! O/ e+ U5 [( D! J+ F# h4 O% Y4 qPRIMARY KEY (timestamp),
+ r) j' E) U  h6 r3 Z8 YKEY ip (ip),+ h+ D* I# E( @
KEY file (file)& [! Z/ I" S" y1 U6 m
);下面我们是PHP脚本,首先我定义MYSQL的信息。
, M  M% O. u6 i2 I9 N, M+ h$server = "localhost"; //你的服务器
2 @# W. H( B3 a, e/ p# k) ?: N& c$db_user = "root"; //你的mysql的用户名
' j" _# Y2 Y& N+ v, F1 I; u, C) R4 G" X9 @$db_pass = "password"; //你的mysql的密码
# B/ d+ O5 @7 U5 o$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 f9 N5 @, z/ J) `/ a8 z; R
$timeoutseconds = 300;取当前时间。
  |1 G1 P, k6 i) N4 I! V$timestamp = time();上面的完整代码:2 L: E, c# U( |+ ?
<?php3 y1 J1 w8 D: f7 z+ _
$server = "localhost"; //your server3 L) P: S+ V. N/ H1 _( [
$db_user = "root"; //your mysql database username
6 \2 ~1 a, x% T0 C3 k" w6 D4 I! Z5 D$db_pass = "password"; //your mysql database password if any
! }0 _& `/ q' V, q6 ?$database = "users"; //the db name
+ c3 J: U; v( x; d$timeoutseconds = 300;//timeoutseconds limit
8 w$ Q5 M  h! \, f) y+ C" ?" y//get the current time' C5 S7 N/ M/ p/ l+ n
$timestamp = time();
% V) W( W) j4 }0 M8 }//calculate the lowest timestamp allowed
0 V# Z1 U9 `. m$timeout = $timestamp-$timeoutseconds;
& ?; K# O' r" y* _$ ^?>连接mysql
4 j! w1 G4 D$ j9 z9 {' A# fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
( M7 H: G( s0 h$ S* H4 cmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 K: y  P; I; l% n# x) o$ d( _" Tmysql_connect($server, $db_user);查询数据库的代码:6 r% I( R8 Y: S8 y" s+ ]$ J8 U
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
$ D7 F, q! C6 \2 k4 i+ y" Y) t$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 U' e7 }) ]; o  w' ]- H% `
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 I% u0 m* E! P+ T- `如果用户用错误信息的话,这样处理。
3 V  B2 D6 u1 ?- ^+ j! Cif(!($insert)) {
3 f8 I# |7 Q" v+ ?2 \9 ]print "Useronline Insert Failed > ";
5 ]+ n8 D! A6 I  U% A}然后实现当超过设置的时间就删除该用户记录。
4 u+ z  P% d) X# d$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 r6 U1 V; S7 t$ T/ cif(!($delete)) {+ d9 n* I% U9 v" p) u' [
print "Useronline Delete Failed > ";
: X% |7 T' d7 s6 X6 Z( H}下面我们解决数据库中不同IP的问题0 N. u# d: j* B$ G6 \6 o0 e
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用) p, j3 A5 j! O
mysql_num_rows(query);来统计用户,代码如下。
1 e6 M4 C) \3 p. ^0 a$user = mysql_num_rows($result);最后关闭数据库。
8 k- m9 x, |: [( S$ j* zmysql_close();显示在线的人数。
! N7 G- ?" C- q' b8 ]2 v, e7 T" kif($user == 1) {
6 P8 N3 O, l0 ~; `! hprint("1 user online\n");  y* P. Y6 M# n; R* O, d4 v$ ]9 K
} else {' t, |# K+ L3 V0 E" ?
print("$user users online\n");
9 N7 P4 j, g2 L# \}最终把上面代码写成一个PHP文件如下。
1 }+ k& L, |$ x. o<?php
  R9 [& m+ {+ ~( z2 n1 P//Put your basic server info here, z5 Q( }8 ?0 G9 ]% ~% j% u
$server = "localhost"; //normally localhost& @9 f" h9 q: \4 Z
$db_user = "root"; //your MySQL database username
% [1 H2 P/ @* r3 ?# q' U$db_pass = "password"; //your MySQL database password
8 I$ y' ?6 ^' i  L9 c) R$database = "users";6 M; e, s0 m' j5 H
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
7 S, ^$ L: a6 a9 T9 t: D// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ M6 E3 t( }# j
// $timeoutseconds seconds)
4 L0 y1 `; D+ @! V! A//this is where PHP gets the time8 q& t# G. J3 {
$timestamp = time();
! k6 u& L& S+ S3 {//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed& K% y. c* T$ S: j' N0 b2 e. B
$timeout = $timestamp-$timeoutseconds;
! J' d1 O) M: N+ m3 [5 B$ W//connect to database# u# C9 e  d& E, N: Q+ S! S8 \
mysql_connect($server, $db_user);" _0 F8 P$ P' Z/ a/ Q( J* B* d8 X! @! u
//add the timestamp from the user to the online list
6 e* n, V- |! f0 n' Z' b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 n1 [9 y) M8 h/ y0 o0 _('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 `  X9 n0 r2 t
if(!($insert)) {
& H3 B: @$ V! O8 I: ~, j% s+ k1 c* Bprint "Useronline Insert Failed > ";
. T& |& X( K  k}
( W0 P9 C7 b" o0 n7 n//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.) h+ o, Q  s$ s3 a" ~  p' T
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! c0 C6 h+ ^  e7 Dif(!($delete)) {# b. j9 X) F4 ]: X) o. _' |
print "Useronline Delete Failed > ";
- N+ s  [, v3 C  y, ]7 h6 _5 O}
+ C$ d( \. p9 ]1 o3 a) E, \! B5 Z5 \//select the amount of people online, all uniques, which are online on THIS page1 i8 d, L. g& D! C" U; G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");* c7 X* E/ ^( w; K3 V9 L/ Y& V
if(!($result)) {
. R+ `+ T/ j4 G6 rprint "Useronline Select Error > ";, M+ Q- E" U) B
}
0 ?8 v4 z+ T( R8 @//Count the number of rows = the number of people online
& j2 p: b9 l- L( k$user = mysql_num_rows($result);! o( f: ?+ o; |" p
//spit out the results& k0 T$ q$ F6 v2 O
mysql_close();# V- B: a* u# @& i2 L# z- A8 h3 [
if($user == 1) {- T! @; G# e1 c2 U. K$ m
print("1 user online\n");
2 _- d# w& p! Q& C! x* ~$ L} else {
: n4 p0 X7 T  y+ rprint("$user users online\n");
; B5 r# C+ n- ~: V1 h$ v, y}0 z# V  a# n) a. f; \: `2 W
?>  H1 v! E* g2 y' L3 n8 n( F5 \
' v* o9 e$ e+ d9 l* R8 X6 W, l3 w
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。  ^2 E- v2 Y, C) m; d. F; i6 H
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。, Y* W8 C) O7 p1 O$ X: {
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
; \7 _7 c& V3 S* i& l; a' Y% g当然啦,这两款主机也是相当不错的。
# @5 U, s, V; x8 h3 F# c智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年% h7 `! ~  a# n
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年8 A, m. I* z- d& G1 X, M
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
! K2 y: x8 \) S2 e: S& A空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=558 v1 Q% q. Q5 G1 @- ^( d
自己加QQ去问吧。

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