返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!6 m$ z8 I' s6 n" T/ ]) n
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 w+ x# ~% p9 d% Y( d# Y! v首先我创建MYSQL数据库表。
  S7 a4 e* r/ l/ O! SCREATE TABLE tablename (
' R! t1 m2 o  ~# E! ]7 U  Ofield type(max_length) DEFAULT 'default_value' (NOT) NULL+ T% v! w1 b0 f9 j7 \/ S
}可以使用的SQL语句。
) y+ l7 q; F* eCREATE TABLE useronline (/ o9 a* P4 `( g$ N0 z) f9 k0 C
timestamp int(15) DEFAULT '0' NOT NULL,
" Z( R% X: E( g% Y8 k; aip varchar(40) NOT NULL,
6 O# @! O/ R, ^$ |! @) B- F( Qfile varchar(100) NOT NULL,
! C% F5 m3 g$ W3 lPRIMARY KEY (timestamp),; Y# T( w0 o9 |$ i' J3 p' p2 i
KEY ip (ip),+ R6 N6 f$ ~. w5 y/ d: o- y* |: Y
KEY file (file)" y5 ?+ }' A2 l0 l( L
);下面我们是PHP脚本,首先我定义MYSQL的信息。' s5 R6 `3 ~9 a) Q5 w7 `# |
$server = "localhost"; //你的服务器
8 M1 y" i' T+ ~. W, F& {7 f: i$db_user = "root"; //你的mysql的用户名
* m  |. k7 Z, p- n- Q5 O$db_pass = "password"; //你的mysql的密码- S2 V5 d" d9 ~( f- O' U
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& c8 b3 H; n* f' n- q
$timeoutseconds = 300;取当前时间。
5 ]- n3 |6 d3 ^/ H  r$timestamp = time();上面的完整代码:
9 Y# Y  v9 ~  ]<?php, z) {- G/ v# o0 m# V
$server = "localhost"; //your server
6 N2 [' U- K0 g, F+ Q' U4 s/ y$db_user = "root"; //your mysql database username
' l3 W. i. ]+ Z+ Y7 d: X4 }: b7 k$db_pass = "password"; //your mysql database password if any
8 d) I; W0 v/ ]2 M( G8 G$database = "users"; //the db name
7 l4 @2 |4 y$ [) {$ V9 l& n, v$timeoutseconds = 300;//timeoutseconds limit
. U9 p& M. Y' {0 W2 m* @! r//get the current time$ D( j  H# y# J# u
$timestamp = time();, a: [8 F; U! H3 x" a9 i7 N/ B4 e" Z
//calculate the lowest timestamp allowed( d6 t! ~9 f% V: y
$timeout = $timestamp-$timeoutseconds;
" D: e# h5 ^9 C?>连接mysql( m- `" Y, Q% [, }2 @" T
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。/ C! f* d# x# y4 m# N3 M! S* i
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
' f% W) X2 a1 \mysql_connect($server, $db_user);查询数据库的代码:5 p. ^5 f% I3 d" l( Q. n; \
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
( x) a6 V  U, g5 a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( G3 R' i1 B* u; z8 L('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 F& r( v5 v7 G8 N+ }如果用户用错误信息的话,这样处理。
$ N( ]3 F' f: T/ kif(!($insert)) {0 p1 x* o" P! o" A
print "Useronline Insert Failed > ";  C4 |) C0 f' B9 I. ?2 _
}然后实现当超过设置的时间就删除该用户记录。8 K6 {6 x) _& V% W5 g; d- f; B
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% z( r3 N& B3 ^' w
if(!($delete)) {
( S. k/ _4 D7 `1 |print "Useronline Delete Failed > ";
- D9 l3 M1 U* @8 {, z6 D}下面我们解决数据库中不同IP的问题
& s* `$ J6 P/ R9 [$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用  ^; ]2 [0 ?' a# Z
mysql_num_rows(query);来统计用户,代码如下。
6 G; h; h7 h: E; B6 h$user = mysql_num_rows($result);最后关闭数据库。  O) \! Z' P% H# g, E+ |
mysql_close();显示在线的人数。2 `6 g) W( ?+ L( ~, @  L% m' ]
if($user == 1) {
7 |5 x4 u; X& ^6 x# w$ w  ]print("1 user online\n");
' `7 s4 f; W9 ?% y. `; E# {} else {
( ~$ M' g/ o2 K8 qprint("$user users online\n");0 W! a8 [% F1 p! s# b
}最终把上面代码写成一个PHP文件如下。! J0 U3 b. G+ w' G
<?php
5 q9 t- Q! P; n2 {4 A7 u7 S8 E0 ?//Put your basic server info here
0 j5 @" A# H  z/ k4 ^# y$server = "localhost"; //normally localhost
+ J1 [2 L- i/ A1 d$db_user = "root"; //your MySQL database username
. p6 m$ R  _2 X, t* f9 o3 X$db_pass = "password"; //your MySQL database password
6 J& I- l( r: n& ]$database = "users";
' T4 f4 y$ l, {( A" {2 ^3 B0 W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are( W% r: K* J. X  P6 m, ~
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last, |% E( Q4 p) [5 P2 f7 C& W
// $timeoutseconds seconds)) ]) Y6 G1 V9 W5 \
//this is where PHP gets the time& v5 k. Q: N* `6 }  u/ _: W
$timestamp = time();5 [! |5 ~; v0 d
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, q$ v6 F: A, G$timeout = $timestamp-$timeoutseconds;! G( {- S6 m) k) h
//connect to database0 _( t: s! x: A  j* ~& n; n
mysql_connect($server, $db_user);
, S* D3 X9 S5 ~; \//add the timestamp from the user to the online list2 a$ X' i) D  J' n/ F) r
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( `! B* Z2 n. g% E. u% V
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- G: Z2 Z) B1 x" e2 j
if(!($insert)) {
  A6 a0 O3 C3 E  lprint "Useronline Insert Failed > ";% w' I+ d* P$ |* V4 o. v  ]+ V
}# w1 S6 b$ _% e7 d# k, u( Z
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 V$ p. e; V1 |! T2 F  l1 }8 u& m: @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
, L2 `  t( l1 |if(!($delete)) {
* r9 s3 X8 |, y3 n0 W8 pprint "Useronline Delete Failed > ";
4 c  J. \7 n2 U" e8 A# J& O5 r}# k: ?7 ?" }, i8 T  Y! m9 p4 B
//select the amount of people online, all uniques, which are online on THIS page- v& l! {0 ^, }! o/ d# y  {
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 Z, \% M9 V' A, G! I  F
if(!($result)) {+ w/ y0 I0 B& h* _$ S8 D
print "Useronline Select Error > ";
# Y  y3 L8 u% V* s% {+ F; U4 O6 u6 I}/ v" j* x) e; [( O, E: A
//Count the number of rows = the number of people online8 Y8 r/ F; _9 M  W! U& t
$user = mysql_num_rows($result);8 p2 j. k7 H. ]% @8 N4 {
//spit out the results
3 E9 x& T- l+ ~1 G: c% Vmysql_close();
  e6 m% ~- Y4 t- q% l9 J1 fif($user == 1) {
( e8 v. ]: B# g- aprint("1 user online\n");
6 I( x9 h( W& W" ^& G2 o+ {} else {
6 c# W1 k* N! a3 m$ X* r; ?* m0 yprint("$user users online\n");4 T  l/ Q! _" a. i# T/ B
}( S; ?1 Z  F3 _8 p: L3 \/ H8 d
?>; E0 f# I1 f( X; X8 C( ~" _6 v& Y

) B1 Q. }. B; V; A5 K以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 Y' K& A/ a8 Q8 ^# B, ?% Q! ]6 g
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/ c6 W6 ~% H5 D8 t' j# {我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 \" j( e! K& F; S# {0 T4 s  x5 P- q# o  ?当然啦,这两款主机也是相当不错的。
! v, z4 N7 I5 s8 ~$ X8 U$ g智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年3 x5 N, S" g7 T1 z& D
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: v$ m2 i9 ], b
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; N; ]/ M, A, T+ B* w' @
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% q% }9 M7 _, d' C" U, G
自己加QQ去问吧。

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