返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!/ i5 b1 E4 L6 G1 G% j7 s
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 C9 c* y- l' ^9 M3 d首先我创建MYSQL数据库表。; y& J+ u) A, M
CREATE TABLE tablename (
$ x: v, x& l. N3 j1 afield type(max_length) DEFAULT 'default_value' (NOT) NULL
& o8 I( D0 H7 E/ u* X  o1 H5 c}可以使用的SQL语句。
, G7 L9 G$ c2 o0 c; ]) [CREATE TABLE useronline (
9 f$ A; c" f, t) l5 Xtimestamp int(15) DEFAULT '0' NOT NULL,0 @7 ?, W9 }4 c( |
ip varchar(40) NOT NULL,4 K/ p4 G* p' \) N1 U
file varchar(100) NOT NULL,( D0 r/ C' {, y- y
PRIMARY KEY (timestamp),
1 Y3 M7 X. j9 [2 K2 F  DKEY ip (ip),
/ c( M4 S& V6 `KEY file (file)2 |* N# Q% p& z. O  _
);下面我们是PHP脚本,首先我定义MYSQL的信息。& E6 o8 u" ]: L  _4 S# y2 `! p8 u
$server = "localhost"; //你的服务器
4 r2 l6 Z* g, B5 p; I1 w$db_user = "root"; //你的mysql的用户名
: g/ ^- f, }! ]  @$db_pass = "password"; //你的mysql的密码
7 Q$ M: L* G! B3 u$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
1 W( L  S+ Q+ T1 s- S% R$timeoutseconds = 300;取当前时间。6 E6 P. _; K1 @/ K7 ]# M- V
$timestamp = time();上面的完整代码:3 n2 {9 `2 m; r4 R
<?php) u+ U( }2 s, n
$server = "localhost"; //your server
' |9 D; d- R  `' d7 D$db_user = "root"; //your mysql database username) e* c4 S) a0 t. K- c- C- r
$db_pass = "password"; //your mysql database password if any4 B  j% `4 ^8 \
$database = "users"; //the db name0 o6 `6 s6 u( J# f) L/ C& E
$timeoutseconds = 300;//timeoutseconds limit' q* `5 e- U4 d) }( |# @2 e
//get the current time
& _( ]! m6 |/ f$timestamp = time();* c; K: ?" Y. n3 W
//calculate the lowest timestamp allowed
1 ]" Z: k$ o6 n9 B2 B$timeout = $timestamp-$timeoutseconds;
) U4 a. _1 {6 ^" g: {0 c: d4 j?>连接mysql
/ t  H! S. j4 p& |1 f: Z8 ^mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
6 T' ^- {& d% |* F+ T- I/ A3 `1 Pmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& p0 Q4 R$ A$ U; y# M
mysql_connect($server, $db_user);查询数据库的代码:% `; k! F1 d. |* c+ Z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 d- g* z! t+ e0 @0 d- L
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; m" q0 m' ^- X9 c
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");  E) y' a- Z5 w& J/ O* Z7 p5 }
如果用户用错误信息的话,这样处理。
; s! W5 G. j0 Sif(!($insert)) {( U$ p% l: D& m& h0 j& Z. B- |) N" A
print "Useronline Insert Failed > ";
2 T. u' }) Z/ \5 e  X3 ]2 ?5 \}然后实现当超过设置的时间就删除该用户记录。
; }* Y$ a. D4 S( ?: C. V, r$ X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。) t8 c8 U2 z. P" ^# i
if(!($delete)) {* a' S7 Q* w2 j9 [3 N  {# l
print "Useronline Delete Failed > ";
+ V8 w/ |: v. K$ N0 y/ B2 O}下面我们解决数据库中不同IP的问题2 e; S  o6 W# [" {$ X
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用  b1 c% {/ A  i
mysql_num_rows(query);来统计用户,代码如下。* a$ g$ T, J( W& s2 J
$user = mysql_num_rows($result);最后关闭数据库。
; g7 v3 G$ u4 |2 Q8 Emysql_close();显示在线的人数。
4 h  C8 j# G/ i* E; Iif($user == 1) {
3 |+ ^+ R# g1 k9 X9 oprint("1 user online\n");
% B7 `* ?! \" ?# g# F2 Q! j} else {( D+ N* u3 @& z0 t! \
print("$user users online\n");  D0 a8 u9 V2 H% ]$ ~
}最终把上面代码写成一个PHP文件如下。
3 t9 ]' j4 A* G5 M4 N: r! t: W" O" T<?php
# }' k$ e" M7 o5 Y/ m+ }. ~* x//Put your basic server info here8 J5 h  N& ?1 m
$server = "localhost"; //normally localhost
1 S* u. x* H8 J9 A$db_user = "root"; //your MySQL database username
; s# w9 k% B5 x5 r) {  e$db_pass = "password"; //your MySQL database password6 P. ]1 G3 K0 D) W
$database = "users";
) o- Q3 i* L0 T0 ?" Y$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, N3 [6 H' ~! m% l, N# H* Q// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
4 ~# ?/ E) B$ e* P// $timeoutseconds seconds)
% i9 F+ r. f+ M9 C3 p# {//this is where PHP gets the time
+ F' r/ v/ L  y$timestamp = time();
: k- B4 u2 }% j* e//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! w) m) A0 e* o, D1 k/ N8 h$timeout = $timestamp-$timeoutseconds;6 b' F# N. @$ g
//connect to database! ]$ d9 @" f/ [; W
mysql_connect($server, $db_user);
* W3 \: q2 W, }/ w" {7 Q# `//add the timestamp from the user to the online list  A% `: i. A; X
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, K3 F  B! T( Y8 b* Z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 x# F. ?, C; I* F- pif(!($insert)) {
: R( K, ~$ U$ n8 E4 E* a9 e9 N' J2 gprint "Useronline Insert Failed > ";% O& B1 V( r* ^$ [: s$ h9 K) W
}
7 ]9 j' O  w9 W# j1 Z5 t1 Y8 n//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 y) U, e0 I" ]3 w2 n$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 a6 O5 ~7 j9 }$ z( Zif(!($delete)) {
/ k! L1 M3 L! F% u* d8 Jprint "Useronline Delete Failed > ";! v3 F; W% s! ?
}
5 L2 ?& B. W& S//select the amount of people online, all uniques, which are online on THIS page
' S. G: Y9 R4 b' q; D0 ^$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 V, b5 C; h) }: O* @7 G; i
if(!($result)) {
# h- C- ~/ c. o" l  R6 @. x; Kprint "Useronline Select Error > ";
$ Q* b9 x6 E' i}; H- ?* x( t) b7 Z6 t* _
//Count the number of rows = the number of people online
& }* [2 i' S2 y9 L$user = mysql_num_rows($result);
7 a) V. x) v7 \" c; Q//spit out the results" R. q: L( Q; b! n" n  Q
mysql_close();# J: m+ c/ N1 d& j3 N/ e& _% j! t
if($user == 1) {8 q7 Y- X7 h$ P5 k) g
print("1 user online\n");
7 e& R$ M$ H2 @  G$ [6 X. \4 [, p} else {$ F' N" F4 h5 m9 r0 a) ~
print("$user users online\n");
/ U1 g0 L0 ^; Y, ]+ @}& Q! B( R$ k% l8 W4 _1 D7 {& B
?>
+ c3 o/ p( u+ I3 r' K: i
/ s* Z: x# G/ {! W; }以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。% D1 t& Z% I( m; R
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。: W7 i) S. d( Q( Y
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
. a6 p% z. N! Y" O当然啦,这两款主机也是相当不错的。
% j) k6 L4 p- T; a4 ]7 L0 j智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年  x9 |" I( S; z1 Y- c5 V" v
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年, @7 n) x8 w# H9 \: V
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, n2 d1 x! X" N空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55* j1 W1 l: N& e' x
自己加QQ去问吧。

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