返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 Z& u& }- C+ R3 k- @8 J; ?我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" ?* o4 S0 y5 \" }' C5 p1 v首先我创建MYSQL数据库表。# u, W9 i. U; |; {7 q
CREATE TABLE tablename (
+ c- R; ?5 P0 ffield type(max_length) DEFAULT 'default_value' (NOT) NULL
7 o2 Q' t  p& t4 X8 z; u, j8 o9 ~}可以使用的SQL语句。
; O7 H" f2 G, O% ^. b2 t# s: SCREATE TABLE useronline (4 m: j. @8 D/ y) W
timestamp int(15) DEFAULT '0' NOT NULL,: }. d9 e4 O/ @/ y# N
ip varchar(40) NOT NULL,
7 O# e( e$ H' Z/ ~- Lfile varchar(100) NOT NULL,
0 T; P* Z9 _( H1 ?PRIMARY KEY (timestamp),5 d6 O2 v. W" U. W  X
KEY ip (ip),
' y: X# S+ q7 ]6 k# x! cKEY file (file)5 @# T8 P# ^' X, O# [
);下面我们是PHP脚本,首先我定义MYSQL的信息。, i0 A" f0 r4 z6 {4 D9 v3 F1 M
$server = "localhost"; //你的服务器
! w3 _( z" r7 ^/ g# H; q$db_user = "root"; //你的mysql的用户名/ m5 N* _' M/ E; i9 E
$db_pass = "password"; //你的mysql的密码  K, U5 K- x. P8 b3 c! H/ U
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
' a3 t9 Y# R6 o" t4 y. O7 `, K$timeoutseconds = 300;取当前时间。. F& l3 |0 {& C! C$ `7 l0 v
$timestamp = time();上面的完整代码:1 k0 z: G1 X" f1 A
<?php
" }* O+ a# J" W, \6 N1 R9 p9 u$server = "localhost"; //your server
8 p% z  o& \3 h6 G2 Q. Q$db_user = "root"; //your mysql database username
1 F2 }/ w% y& S. @5 H$db_pass = "password"; //your mysql database password if any7 ]* Z8 J' q% A
$database = "users"; //the db name2 k7 M* X4 V# `& Y8 w! n$ u. A2 F3 h
$timeoutseconds = 300;//timeoutseconds limit
7 h; p4 q9 E# C//get the current time
, ~' T- X& t+ H$timestamp = time();
* R7 }, X9 l4 b6 _$ N//calculate the lowest timestamp allowed
9 P$ W7 w( T  x$timeout = $timestamp-$timeoutseconds;9 k$ p* R# Z: {6 {5 N3 q* n
?>连接mysql
3 s  t  }' r8 @' k7 _( _mysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 Y$ B: U$ J& l# o# u
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& ~, t# y2 d2 y2 j
mysql_connect($server, $db_user);查询数据库的代码:) y; y2 h' I% ~7 @, Q. y
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* F; y8 `1 u: k7 L  L' h$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) h( U  [' g- E  o9 h+ [('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");  ]' h. j4 T$ x+ x! W) M/ ^" N6 a
如果用户用错误信息的话,这样处理。8 U  [/ \' X7 m' s2 @: x
if(!($insert)) {9 k% G1 A& m! W8 g- ]$ \
print "Useronline Insert Failed > ";
( P9 T( g2 g: h9 i& C}然后实现当超过设置的时间就删除该用户记录。2 e- ]3 {$ I, p: d; [
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
8 w' W$ a6 h2 T8 Z* qif(!($delete)) {
# d( S1 Y) o8 [: H# Kprint "Useronline Delete Failed > ";
* s* {' Q" Y1 V' j/ ^, D9 ~; M}下面我们解决数据库中不同IP的问题
$ _4 D' [: C. x- N2 E$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 K8 k; u/ K# c# y/ k! N) p8 ?8 K
mysql_num_rows(query);来统计用户,代码如下。( \7 G6 G- p, T* q) J# u
$user = mysql_num_rows($result);最后关闭数据库。5 [9 o1 o( a( o" b" M; q0 |
mysql_close();显示在线的人数。# O% g8 e* E+ \
if($user == 1) {
5 q8 n+ S. X/ Z5 Pprint("1 user online\n");
2 k1 v2 O1 t, _} else {) N/ ?% o- C- M- C& H/ E0 q
print("$user users online\n");
6 L$ e- ]3 u: {9 p+ G- Q1 K}最终把上面代码写成一个PHP文件如下。/ ]  H. h, H8 |6 E3 J) o
<?php' a  H& f- f' H# k
//Put your basic server info here
( q. D' ]3 O3 h# k% q( i$server = "localhost"; //normally localhost
% i1 K; u) I6 A' {$db_user = "root"; //your MySQL database username
; E" j5 c7 j5 ^4 s0 {$db_pass = "password"; //your MySQL database password
* i& @/ j4 ~' |0 |' t0 s4 e$database = "users";& M" H" z. e2 a" P0 }8 A6 ?
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: v# E. m" |; _9 Q' J4 J/ Y9 Q$ c! w/ D// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( R- w: S, T5 }! Y
// $timeoutseconds seconds)
" h5 s( L9 ?% g% C( V//this is where PHP gets the time
2 o# o; @7 ]8 x; c$timestamp = time();
  U: ]; H% Y' B//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, ]" X5 B& i$ c2 s: F5 ]$timeout = $timestamp-$timeoutseconds;/ I3 L- K! S/ N( I/ c: ]
//connect to database
* }" r! b. y7 ?% T+ \) a+ H1 Hmysql_connect($server, $db_user);) S3 T% _% I& I; D. t$ @
//add the timestamp from the user to the online list
$ e" E8 o, }" V, K2 W/ ?$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" x: z2 q: z+ M8 b3 Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 W1 R" s2 J' E( S* r, R) J/ C/ R/ `if(!($insert)) {
4 o' p( \, W/ x0 C! T  f! w5 rprint "Useronline Insert Failed > ";; N7 U+ U9 m  U5 e- K& P7 @- ?
}
; f/ e: Q3 V" }- l//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: s( W4 y0 [! U$ I$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. m! @; |- j3 Z3 _9 ]if(!($delete)) {  X, h: H  n9 v: @& i7 x& L4 h
print "Useronline Delete Failed > ";, j  Q& T& ?, W" Z5 z4 P
}+ ]# g: m4 i& @. T% g9 Q
//select the amount of people online, all uniques, which are online on THIS page% p) c( V9 \6 k: Y5 d
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ p, t* Z" l' M3 b: Yif(!($result)) {
. G: t- J1 Y& Y% E+ A3 f" |print "Useronline Select Error > ";
- x% w9 t9 C% q$ A}3 ?" q  }" W* u! ?8 m
//Count the number of rows = the number of people online' U* O, u; p4 `$ K" t. b# {
$user = mysql_num_rows($result);
2 u: v' P" h! Q* F; t& L//spit out the results
1 _: R- G  z6 M& f% [4 e+ Vmysql_close();
" l9 f3 M$ B' M; f* [1 Vif($user == 1) {5 d3 C, B) h$ j7 B& Y$ S
print("1 user online\n");
4 J6 U: u7 G/ D/ k} else {- T$ v% X2 p( v
print("$user users online\n");# v# v; E2 g3 E
}4 S/ U% G# K3 S; u. t
?>" H8 P1 N4 a. ^6 y
* O% u  @9 ]$ d" T
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。% C' Q9 c& X# n
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
* a3 z" z; H* c1 ~8 p9 a我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 ^5 O9 q5 p" x, M! W4 J; \当然啦,这两款主机也是相当不错的。4 p' d2 Q- s) _( g
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
) @' n1 C" a; g  C8 T0 G/ x9 {标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 h# V  N3 }- i) z) F
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
! }9 r" I4 W6 Z+ \2 i% m, s* ?空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) k4 ?  o% G1 e5 w7 a1 n- y
自己加QQ去问吧。

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