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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!# E5 d1 X9 i- |$ f
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
- o) q  V& G1 ?首先我创建MYSQL数据库表。
% q' p4 ]) j: f% K& lCREATE TABLE tablename (! j7 p9 d- }( X
field type(max_length) DEFAULT 'default_value' (NOT) NULL
4 M: }  I2 Z. o4 q) |}可以使用的SQL语句。
$ [# |1 i4 {6 TCREATE TABLE useronline (( u* i! }3 ]4 w' w7 Z. O/ M% |
timestamp int(15) DEFAULT '0' NOT NULL,
/ \. X6 C: [' Xip varchar(40) NOT NULL,
" z  w, C+ n+ a% Rfile varchar(100) NOT NULL,- s& z; _7 R( a; z! c
PRIMARY KEY (timestamp),7 e( z6 p: t. e$ X. F
KEY ip (ip),
# A5 d2 i4 S" Z" q' P. e9 qKEY file (file)6 @, P1 o. b6 _, D
);下面我们是PHP脚本,首先我定义MYSQL的信息。- }  Q0 K1 j; p! S
$server = "localhost"; //你的服务器1 S, x) u( w) n2 S
$db_user = "root"; //你的mysql的用户名
4 p. |+ V1 P. R6 R$db_pass = "password"; //你的mysql的密码
. f  u# b: Y1 |; M1 h& M/ [9 D$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
- t. L$ |4 w, v6 `8 U' [; g$timeoutseconds = 300;取当前时间。
% T. ^8 {. w6 a4 m" b' m# L$timestamp = time();上面的完整代码:
( ~! R- t3 {6 k+ G<?php
, f5 E! {) V% G. b0 B- r3 l: n/ u# {$server = "localhost"; //your server
' Z- J$ y" N+ y2 @$db_user = "root"; //your mysql database username
# M6 {2 v/ d4 G0 M  i6 ]$db_pass = "password"; //your mysql database password if any  V$ K! m, S" \& J, ^, x( h
$database = "users"; //the db name" p( ~( ]: h9 Y1 [' M, H1 o, [
$timeoutseconds = 300;//timeoutseconds limit
0 A  ], U, E; x' x' r//get the current time
+ d+ m9 I# Y( e7 W$timestamp = time();
6 L+ E2 z9 g5 N5 x% ]//calculate the lowest timestamp allowed+ e/ D7 e# B4 L1 A! W6 R
$timeout = $timestamp-$timeoutseconds;9 a9 F2 m' p) v7 d7 b1 U; _
?>连接mysql$ E# }$ y# b4 j% {$ N0 y, F
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。* q, P. b, h0 M' l
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, W" y6 `8 N5 R+ x& w# }* \+ Imysql_connect($server, $db_user);查询数据库的代码:
, [8 x" a4 a" _8 @; X* [# {' m& Tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ _4 f& _8 \: G0 `0 R$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) r" b8 c9 u. _* a, U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 e/ k+ _2 t* f( C如果用户用错误信息的话,这样处理。; v. N; o& [/ x4 l
if(!($insert)) {
' I: W9 F7 N0 |print "Useronline Insert Failed > ";3 v. C; R3 }/ |
}然后实现当超过设置的时间就删除该用户记录。
$ P# O$ v& O* F* n& _- v7 t$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
  @8 d3 Z# d2 D2 ^5 D9 Fif(!($delete)) {
% c7 k6 u' M; A* B( oprint "Useronline Delete Failed > ";1 M2 L& {# Y4 J& b  Y! V( I3 ?( ]
}下面我们解决数据库中不同IP的问题
6 y7 l3 f/ A) Z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* w$ B+ V( W2 _
mysql_num_rows(query);来统计用户,代码如下。
+ s+ i! j3 `: m6 c$user = mysql_num_rows($result);最后关闭数据库。+ `, t! a- s. y- o
mysql_close();显示在线的人数。4 R5 a+ o: Z" W. B& a/ n
if($user == 1) {0 F+ E! l' F9 j/ U
print("1 user online\n");) Q5 H' k4 o1 m1 f2 O
} else {
" G& v% y8 w! M# f% A7 tprint("$user users online\n");
. r3 m0 I% X1 z9 e3 _}最终把上面代码写成一个PHP文件如下。
, x& s$ Q- ~5 G, ?: m* Q7 g8 W; _<?php
- ^. {" H' S2 z$ i% a( @- q//Put your basic server info here
6 [0 ~9 g6 k! v# ]1 e$server = "localhost"; //normally localhost
$ G; L, ^8 ~* C  D- k* c" d$db_user = "root"; //your MySQL database username1 l6 [+ T& s; s
$db_pass = "password"; //your MySQL database password( H, r3 O9 N$ |' \( R
$database = "users";
& w$ X! q( g2 E# B- N) ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* q1 N" h- O- x5 G* `; l: E9 d+ x
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last: p9 S9 ~1 l' O1 {7 i" k% l
// $timeoutseconds seconds)
7 z/ [0 T9 w9 \: {//this is where PHP gets the time
7 ^$ G+ h& O# o$timestamp = time();6 }* k/ D  T' ]/ V! U3 ?" n
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed$ k# L1 @- ^2 f- I- [( R8 |
$timeout = $timestamp-$timeoutseconds;
$ ~* Q7 V$ ^6 h( p8 j6 O8 ]; k//connect to database
8 N1 |) w, H/ ]( {mysql_connect($server, $db_user);
/ O, b4 Q/ h. V5 c, U# V2 \//add the timestamp from the user to the online list5 A+ @6 g' D6 ], k1 [# ]
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! l$ E: _- A$ {8 Y% R6 l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 X6 z. r4 z" O7 d  W* O3 n5 ?. \if(!($insert)) {* X  j1 @7 o2 Y. f9 I5 ~+ x# g$ G
print "Useronline Insert Failed > ";
* X/ N0 n1 Y  m0 p9 U; C3 @  R}
* E, Z) N! z; c. y//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.2 `( z, f. Q3 K& ?8 i& l
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ F! }, P  s; B, Bif(!($delete)) {6 Y6 i  i. f( E+ A  v/ Y1 c) ~
print "Useronline Delete Failed > ";* P6 C1 G6 M8 g0 b
}
9 z0 l) N' n, r" k//select the amount of people online, all uniques, which are online on THIS page8 S2 n9 |2 B: D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" p6 ?4 A/ F& A( x% e
if(!($result)) {3 F3 N. U9 I% O" Z2 s
print "Useronline Select Error > ";
. t- Y. S8 c' L, w' }}
. I9 W1 ]" |  J) B( k//Count the number of rows = the number of people online- U/ ?% @! e4 z: n6 K' D3 K# g+ Z
$user = mysql_num_rows($result);
( c0 V5 g% h, Q3 G% U- s5 U% z//spit out the results
0 s8 l' x& R6 X/ `0 hmysql_close();, h0 O, N  ^" x2 @
if($user == 1) {  w% ~- b- }# k# c4 I, q. K
print("1 user online\n");
1 G/ U- }+ q, z0 S} else {
5 h1 _- C( e0 h, E# Q5 pprint("$user users online\n");
# B0 h3 }% A. p}
" l* j9 H( j0 C?>
* d* ]) R8 Z: w# o
5 i' p+ u& H/ X: |' G- @以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 ^! }1 _7 C) {, O6 f4 q$ k
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
1 W1 l. r" [  w$ [/ N! |  A) f9 E我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
. a6 `& K/ M5 q. A; z当然啦,这两款主机也是相当不错的。. x; e+ K; i3 O% z+ N0 b0 `
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年* X  o4 {. O* S! }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
. l$ [6 j5 w- N4 G3 w提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 1 ^) |( U. a( u* [+ o! e
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
9 k# g8 ]  M2 n/ Y7 X自己加QQ去问吧。

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