|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!, t+ L: X+ K$ G9 d, t; @; M% I
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
8 D' x2 B; e$ w首先我创建MYSQL数据库表。$ _* w, }: B6 i2 Y
CREATE TABLE tablename (. ~0 G3 f: {3 A0 d. e+ c! A3 C: ]
field type(max_length) DEFAULT 'default_value' (NOT) NULL
+ ?+ k$ I: {* Z8 U7 G! H0 l}可以使用的SQL语句。
- r! R/ _1 U& i* ^# ZCREATE TABLE useronline (
) h$ U5 {: g% f9 {! Qtimestamp int(15) DEFAULT '0' NOT NULL,
/ _- h' t; F3 G( R' ]ip varchar(40) NOT NULL,
# @$ R- r: h+ ?7 l0 d, Jfile varchar(100) NOT NULL,4 N+ L, n5 g1 |2 v4 t' M8 x
PRIMARY KEY (timestamp),
) y6 M' m. p8 @, U, zKEY ip (ip),( l5 _% Z! S% R5 J8 o' v1 F
KEY file (file)
, S: P* r. t7 D8 D- O. Z);下面我们是PHP脚本,首先我定义MYSQL的信息。, q4 ?/ E% C# e$ e4 O6 {
$server = "localhost"; //你的服务器1 ?# @1 A z1 j% v) R
$db_user = "root"; //你的mysql的用户名6 T# ^! X, ?9 s; I7 x+ z) F
$db_pass = "password"; //你的mysql的密码 t# U, e# t6 ^" p
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 A' q( Z7 M$ {6 h$timeoutseconds = 300;取当前时间。 {3 O, H; k- d( n6 N9 H; x' s' _6 }
$timestamp = time();上面的完整代码:4 X& `1 d. B2 w# ^3 P8 v3 h- n. q
<?php% C& x6 o. B% ^. X& U6 ?3 S3 G
$server = "localhost"; //your server2 h/ ~* h x% B$ q# E
$db_user = "root"; //your mysql database username
1 k) w1 f+ w; |# U$db_pass = "password"; //your mysql database password if any
$ H; E' w' H$ L$database = "users"; //the db name
! t. k2 r# t6 S& G$ |0 l1 d$timeoutseconds = 300;//timeoutseconds limit
+ y$ E- S: P) V! A( ?//get the current time7 v0 I T& V* j) D4 D
$timestamp = time();3 f/ \9 r7 P1 R. f, i7 N% a
//calculate the lowest timestamp allowed" a) @) n. I+ [ ?
$timeout = $timestamp-$timeoutseconds;& V2 R, a9 S! L& i( b
?>连接mysql
2 a O% \- W# E. B+ I! Bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 f; O3 g1 g$ R Q! b6 I7 jmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* O/ u i2 K# r( J" g; x- imysql_connect($server, $db_user);查询数据库的代码:. H" {9 f& R/ h! N/ X* A) |/ K
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
7 K5 d4 d1 K* j5 w% ]# N$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 _: f0 `7 T' x* E) i1 _ O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ T* c: M, P& F, Q& J" o$ p2 V如果用户用错误信息的话,这样处理。
5 h8 ~) j) n# g: X# C: s/ b' tif(!($insert)) {
4 W) ]" F) F$ B( Jprint "Useronline Insert Failed > ";
' `, L$ @" O' u5 @ n}然后实现当超过设置的时间就删除该用户记录。) q: D7 z1 k! L) X5 i5 E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
- K) }2 E! c& q" l9 K/ w& F3 @! S: kif(!($delete)) {! h7 r, w, b7 G7 p8 B/ ~8 w7 o
print "Useronline Delete Failed > ";
& O S, e% l0 Z& O0 g}下面我们解决数据库中不同IP的问题) Y" w* k, K/ @ H5 @
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) ~1 |1 I/ d& w5 omysql_num_rows(query);来统计用户,代码如下。% i% A8 E8 a5 N) V5 ]
$user = mysql_num_rows($result);最后关闭数据库。, E. F" H. u5 z0 t
mysql_close();显示在线的人数。
4 p: {9 q/ f3 J Sif($user == 1) {
1 Y; c) q0 t" ?) `% g9 Wprint("1 user online\n"); D6 L" s. j5 C6 u2 o8 }
} else {
( r2 e1 g E- Aprint("$user users online\n");- S/ ~ h) | ^& f5 M3 R+ `
}最终把上面代码写成一个PHP文件如下。
O+ z* ?0 F0 E4 ^- w4 o# e! n: v<?php
: V; b- h+ i8 E b( |. Z$ ]" x) C//Put your basic server info here
$ ^9 `& e, j* d1 G7 {7 t# P+ m$server = "localhost"; //normally localhost! B& d, C- K9 t& R ^" L
$db_user = "root"; //your MySQL database username
% W' B( Y0 D; {+ B3 G9 s/ h% R$db_pass = "password"; //your MySQL database password
5 f$ i1 S. g6 F5 V C$database = "users";
6 G) X1 o0 K; n$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
+ y: D- f( e0 ]0 G! V2 H2 g/ e* k1 i// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 X& A% f9 f2 z# k' o
// $timeoutseconds seconds)
1 A3 l& O7 p# f0 r/ Y//this is where PHP gets the time
! \6 g& t& \! @7 ?9 z" T4 |: x4 Z% H$timestamp = time();
/ L) b& T% ` C+ ^2 T& b9 n8 E//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
. X- Q6 U" E) N$timeout = $timestamp-$timeoutseconds;6 a0 m! V! |2 @# ^' c Y% s5 l
//connect to database7 h( F3 |" f3 \6 W j U
mysql_connect($server, $db_user);) Y* {+ b) k# a2 [
//add the timestamp from the user to the online list
+ U# H! h" x" u/ R; P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 x! c3 |* V$ d4 G: S/ W
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! Y& h# ?( r1 j& j) r. Tif(!($insert)) {
& c& [9 w Z7 K0 L+ v6 Q9 H& J5 f" |print "Useronline Insert Failed > ";
& f2 o& F* ]1 [0 U& A}+ G% K( e. S. T. J7 M
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.8 g. x- J; p! W, M$ \* b! [6 M% Z
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");7 w3 J$ m0 z! R" C$ B; A+ Y
if(!($delete)) {( K$ C5 z: D. u; t* E* T* J! W
print "Useronline Delete Failed > ";6 ^$ b/ E& n+ A8 e+ P ?* r
}, C. I& o4 `+ ^" d$ B7 b
//select the amount of people online, all uniques, which are online on THIS page7 V8 K; Y0 U: }8 m0 K5 r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
: E2 q- h0 W# m9 y/ lif(!($result)) {) N2 a& G+ \9 u9 m- ~
print "Useronline Select Error > ";- K! F0 q( M* J0 O5 `7 \7 E
}* l$ N1 c% |! r- k0 `( z
//Count the number of rows = the number of people online/ h' }6 q; n% W+ N, l& W
$user = mysql_num_rows($result);
- M! M% r: F+ D9 y5 F. M8 p//spit out the results
* r" B8 U/ D- E3 H* L. Z+ [- ^3 `mysql_close();0 M; @- {) E+ f, }- ^
if($user == 1) {
3 O9 g" ^: W: ~4 ]# ?7 gprint("1 user online\n");
; V& J5 k, O5 S! z7 T} else {
& `- x( d. p9 I* Dprint("$user users online\n");2 O& P/ F9 h& H* {; v4 J
}- z& m7 N3 s/ y# Z6 d
?>
% _2 P1 c- K' ]& |
8 \9 R% e7 Y! o以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
, \* Y d; K1 V- L2 H, f" w时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
" R/ w2 k" T4 ]8 O% A( t; U我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。/ n* k% F) K' Q O; ]5 T& V
当然啦,这两款主机也是相当不错的。
2 r5 \5 R2 a' m7 F, v3 ?/ Q+ u0 q智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& y+ f- i$ H+ m9 s q' n
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! L1 g4 r. K3 q2 u7 |8 r提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
3 B: ]+ \/ j0 t# D! X* N空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
| ^) P7 U4 z0 r自己加QQ去问吧。 |
|