|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!( Z/ w. x; l7 \
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
8 p1 a4 i) g/ H( ^5 P首先我创建MYSQL数据库表。/ E3 h7 L( O2 _, i. M
CREATE TABLE tablename (' X9 y: T% b g7 C, ]
field type(max_length) DEFAULT 'default_value' (NOT) NULL% ^' Q6 \, B' z
}可以使用的SQL语句。
: x5 q3 _" s, }! f& i: qCREATE TABLE useronline (
4 \) }) ?; y+ [0 M& W8 atimestamp int(15) DEFAULT '0' NOT NULL,
8 j. c: x# C! u4 z. J0 s4 Wip varchar(40) NOT NULL,* d' D1 `7 H$ ^9 c( ~$ S
file varchar(100) NOT NULL,
4 T' y* B) r% d5 {. A( KPRIMARY KEY (timestamp)," u6 V- s# j0 \7 @
KEY ip (ip),: e7 R/ {" h( j0 g$ B
KEY file (file)
% `/ J. y) Y" U; N3 P);下面我们是PHP脚本,首先我定义MYSQL的信息。+ W: j7 U5 q2 ~3 r4 {( d" x
$server = "localhost"; //你的服务器
* n6 U0 h7 A* ]: H$db_user = "root"; //你的mysql的用户名$ B0 B% [! W" a5 i' ~( b
$db_pass = "password"; //你的mysql的密码( t& v9 J" x/ b$ B; Z8 u4 V
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" m! J( n2 l) n( n, t$timeoutseconds = 300;取当前时间。7 y2 G; z4 O- v
$timestamp = time();上面的完整代码:
; a( Q6 n3 m" j; N/ }<?php) v% O+ Q2 l4 p. o) L6 H6 ~) U
$server = "localhost"; //your server
. I7 c2 N% W3 g+ y p$db_user = "root"; //your mysql database username
4 c' X1 _; J8 S4 \# G$db_pass = "password"; //your mysql database password if any
3 Z/ k# b. y3 K6 f4 J Y$database = "users"; //the db name
% y2 d7 I, _* H7 f0 ^7 Z9 h2 J$timeoutseconds = 300;//timeoutseconds limit; F3 z* }* X9 C) T3 I! B
//get the current time
M$ k- h$ X4 J% G3 m$ F# D$timestamp = time();
0 G, ?! `' q. t T/ L* U//calculate the lowest timestamp allowed* b7 a$ O$ j6 z
$timeout = $timestamp-$timeoutseconds;; R" |1 x" T, h# g1 Z6 u
?>连接mysql
, q4 U1 E- [6 N3 k+ g) mmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
8 \6 T" ]' B# N! o4 K0 e+ P# N" ~/ i# smysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接* ?8 S: L4 C+ j; H
mysql_connect($server, $db_user);查询数据库的代码:
: e& e9 o" K7 [mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。/ ]# S; O" w! r
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) m' T, u) g+ ^& r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; m E/ T8 z: P9 W* a如果用户用错误信息的话,这样处理。1 {, K$ \" x# K- V
if(!($insert)) {
! _' e1 H0 z) jprint "Useronline Insert Failed > ";
+ i4 W2 E: o3 b$ J& O. p- s2 U}然后实现当超过设置的时间就删除该用户记录。
, u, O6 ^5 N9 x7 d' c3 G9 m$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 c+ E. n) p8 m; O# ?; jif(!($delete)) {
9 D" d5 r& ]1 M; I$ E, Q; @9 Jprint "Useronline Delete Failed > ";
! j8 i4 P& q* j3 X4 V e}下面我们解决数据库中不同IP的问题; d$ _7 U6 L3 _8 n
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
( g" J" g f. Mmysql_num_rows(query);来统计用户,代码如下。
# m6 b8 A2 t% y/ Q9 c3 D$user = mysql_num_rows($result);最后关闭数据库。
; A) A1 b: o; `1 lmysql_close();显示在线的人数。
; E2 o! Y6 [' g5 d! e9 S9 hif($user == 1) {
# I8 ~. }) z- @0 ?' kprint("1 user online\n");
8 p% t' M0 B' ~/ _ x9 ^} else {
: S% r' Y% f' i6 Qprint("$user users online\n");0 b4 T- q0 A1 X+ M
}最终把上面代码写成一个PHP文件如下。
0 ]! T' }8 K/ r$ j3 \# k<?php# }3 f7 F- ]+ o3 t
//Put your basic server info here( l7 ^) U* o: {+ x7 ], K
$server = "localhost"; //normally localhost$ k. m1 K; X' z# A
$db_user = "root"; //your MySQL database username
- T) b! b8 q1 L! A$db_pass = "password"; //your MySQL database password; c$ \0 J$ y- H! ^! Y% @
$database = "users";
: ~+ m9 W+ p6 e4 @1 o$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
k& a6 Z, r3 T# e7 O// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last) a4 v) L, Q# }; S1 c
// $timeoutseconds seconds). Y: u5 P' a* J6 a0 ^" X
//this is where PHP gets the time
0 z/ e: p9 \' G5 q1 a$timestamp = time();
& g" q2 i& H H% f) b+ O//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed/ R1 i( x. j, h
$timeout = $timestamp-$timeoutseconds;
2 u$ d% P: C* }//connect to database, `, G6 }* l7 A, ]% @/ S' V
mysql_connect($server, $db_user);9 `! K/ Y( d# ^* g2 v1 `
//add the timestamp from the user to the online list9 A7 ^ r. {2 u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; y8 H" N4 B" L( s: ]& c: o. X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 L+ L& W& j' `% j6 B' y2 v
if(!($insert)) {; V+ v. A$ w, R
print "Useronline Insert Failed > ";
4 Z0 R! G7 e% n9 x2 P' \; e( U4 B}
3 E' B8 J& f7 v4 f( v//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.* S) A% \* S" m% u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
% a1 c% V8 ?+ Z0 S1 x5 uif(!($delete)) {
; m5 d6 [9 k- }1 w/ o9 _6 Y! l) }! L4 ?print "Useronline Delete Failed > ";
* \' E5 u* K0 @. `. K, g' b) |- ^}; m# I, M" S" o, h
//select the amount of people online, all uniques, which are online on THIS page
! v7 K& P: N) x- M; I2 s8 b$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 E, |5 ?" a+ T6 W- G0 j! eif(!($result)) {
' t9 ]& B3 ^+ ]& uprint "Useronline Select Error > ";8 r+ P7 I& L' ~# V7 B; z
}' U4 f1 j/ b: M" m
//Count the number of rows = the number of people online( Y7 n& u, i' M" K$ R
$user = mysql_num_rows($result);3 K: e: ~* p- p
//spit out the results
; t1 ~! c8 w- m1 `- M% X: tmysql_close();3 B7 a: ?7 h1 v& K+ S9 o# U8 s
if($user == 1) {' V! R: t4 e- d4 L
print("1 user online\n");
T; V+ U. E1 X+ j; x2 E3 a5 o} else { |$ F% F# Q L" s: C
print("$user users online\n");
1 z8 ~- e" M1 e# p0 ^, A}, I: I: C, ?" r+ F
?>
$ {/ L3 u* @7 a* f" X" k
2 d8 G4 q9 T/ H1 `以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。! H8 d3 A u/ M, ^3 Q& B; R
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 d" R. v1 h: B$ f$ q0 Z我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。" I+ u5 F: l# [& ^
当然啦,这两款主机也是相当不错的。 E- G/ p7 r. V$ z
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
- l! N3 Z+ L. }- t* N标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
% l6 D' I& x/ k0 S提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 5 ^' T8 I' I7 O1 a0 F
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55* D; c( `4 E$ @! J& {7 h
自己加QQ去问吧。 |
|