|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; F# W3 X$ x" a" Z
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 s; ~8 d0 [2 G a4 j& D首先我创建MYSQL数据库表。
1 n- z/ h% @9 {CREATE TABLE tablename (3 k- F& _) t1 E" ]3 ] x
field type(max_length) DEFAULT 'default_value' (NOT) NULL" K0 n* B6 h' H! ~6 e6 l5 e
}可以使用的SQL语句。
. e# m& E* o/ u0 KCREATE TABLE useronline (
( z4 r6 u4 M+ ?' t) N/ X' ]7 mtimestamp int(15) DEFAULT '0' NOT NULL,* K: R9 l% v0 l8 l; g5 o
ip varchar(40) NOT NULL,
' L/ D: G/ ]+ B# m% Dfile varchar(100) NOT NULL,1 n1 s6 `$ a. F% L4 o4 Z( }2 t
PRIMARY KEY (timestamp),* y1 f6 D d" A" ^0 {
KEY ip (ip), H9 E' u$ h8 |' F! h4 S. m
KEY file (file)
/ F( g; ^1 l$ u& _, M);下面我们是PHP脚本,首先我定义MYSQL的信息。
u$ k7 F6 g9 j% p* ?2 j$server = "localhost"; //你的服务器
! `+ z6 h# T$ X3 o; \$ ~: r4 H$db_user = "root"; //你的mysql的用户名& b+ t9 ? K* K7 c: W
$db_pass = "password"; //你的mysql的密码
7 y& t8 Y" |8 k q9 s7 n9 y$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
# ]" \3 R, {- y9 E4 X/ _7 u: v$timeoutseconds = 300;取当前时间。
a+ P9 J3 ~0 A9 U' e% P$timestamp = time();上面的完整代码:; X+ r- N) k$ n' ^
<?php) ^! \2 N( Z' u# h% \
$server = "localhost"; //your server1 k3 d1 \8 K, ?4 N: n8 M: s
$db_user = "root"; //your mysql database username
F; H* f$ S3 ?% I9 G! C$db_pass = "password"; //your mysql database password if any
O C# r& W& Q( U$database = "users"; //the db name
( {7 S3 g$ y; E$timeoutseconds = 300;//timeoutseconds limit7 y, b& D) S1 S) ?# G, k" {2 Y, n
//get the current time( D8 R9 P0 W/ o! C, w: U P+ t
$timestamp = time();6 T ~ t, H) j# O8 J
//calculate the lowest timestamp allowed
& c* P/ R' W2 R* O$timeout = $timestamp-$timeoutseconds;. k: \) H. M% t1 B/ j# n- `
?>连接mysql
! M, ?: t' u) H3 f& U- L! n4 P3 ^mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 R7 u! h. t" p( V" V, lmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接: J) |3 U* R; H4 `/ p
mysql_connect($server, $db_user);查询数据库的代码:% L5 P# ]& L& J2 `
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
7 ?& E. u4 w, q6 ]3 H' V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ `- }1 F" }% P5 z! ?* s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; y# {3 z7 \" c5 J% O( f
如果用户用错误信息的话,这样处理。
; S. o: w% h6 z5 X/ [3 i, {if(!($insert)) {4 j; ~/ a5 O5 z( u6 P+ d
print "Useronline Insert Failed > ";
4 E9 [( J, z- d; s}然后实现当超过设置的时间就删除该用户记录。2 b$ k6 B% z5 K7 N+ f3 b6 ~
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
$ P5 g2 m1 c* B# R$ M7 Y8 }; Lif(!($delete)) {
$ f2 r6 S+ j3 L3 ~# r/ bprint "Useronline Delete Failed > ";% g! T3 X; R% M) \: a
}下面我们解决数据库中不同IP的问题 B* U/ I; `1 z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 c. ~* c3 r7 }: p `3 Umysql_num_rows(query);来统计用户,代码如下。6 i( V! T- J5 N
$user = mysql_num_rows($result);最后关闭数据库。
! z5 Z% E) z: J1 Q0 ]7 V4 dmysql_close();显示在线的人数。
2 e. E$ t- F" hif($user == 1) {
1 d7 M' f- E8 N: h Uprint("1 user online\n");! P- X0 ?% s) @- Y9 v. U4 B5 y
} else {5 b! }+ m ?! A
print("$user users online\n");! q/ O5 B2 C/ }& E# C9 ^/ L3 b3 ?2 D
}最终把上面代码写成一个PHP文件如下。& g" u/ b7 @6 ]
<?php
' I- e: C, l2 n8 S. X//Put your basic server info here
/ V- H( \' z$ h/ D. A$server = "localhost"; //normally localhost8 P h( G6 t" ^0 D" C. |& m; E
$db_user = "root"; //your MySQL database username
3 ^/ Y4 \5 z% }. Z+ j$ M2 {$db_pass = "password"; //your MySQL database password
6 a' K5 k3 q' s9 z; O: g$database = "users";% @4 I* r7 [4 ^( {$ |' ?4 B& H
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are5 h/ e C" R! c6 a: g! \( s8 h" Y* J
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) B6 l0 A$ W: Z3 m7 ~// $timeoutseconds seconds)4 b7 y/ \+ Q7 S2 }6 ]9 |' k+ }
//this is where PHP gets the time
( ?/ A+ I+ ]6 l. } _6 b$timestamp = time();4 {6 V% o6 j1 R8 c4 G, l* P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ _: `8 v* \* h( _2 f- _$timeout = $timestamp-$timeoutseconds;) R& s2 _; [! i+ T W" G0 n
//connect to database
# ^5 w K, k) M. h( smysql_connect($server, $db_user);
, t: d' |, X* u& z. H- y) F" O//add the timestamp from the user to the online list: k+ F. J& M5 |9 |- l/ I( x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 y9 c0 x* d3 o/ Z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( R6 R, o& O- M# b
if(!($insert)) {
8 F- n4 r6 ?% y, A+ Eprint "Useronline Insert Failed > ";
0 n9 q/ K. d% c0 E. Z}
5 G3 |7 R( X% C7 P5 x! h% [1 y//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.- u4 K9 u- D9 Y/ A# X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& C N* W9 W) n6 n
if(!($delete)) {3 m6 F5 [. f& c4 P. D: u
print "Useronline Delete Failed > ";
: g C, \. p& M# V. P}$ D5 T* V7 z( M" p" @
//select the amount of people online, all uniques, which are online on THIS page
/ k! p4 ~0 T5 n( f3 \ ~& @: ^$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ q. U& i% {6 I l1 t( G
if(!($result)) {
7 A" g5 s3 n: g x: q% n& sprint "Useronline Select Error > ";
, L( [- r' M4 x$ l% i# W}* D7 X. j$ I- Z1 S& S4 i
//Count the number of rows = the number of people online
% q' _. Y* u& G8 Y+ r$user = mysql_num_rows($result);, M; b1 _5 H7 t6 c
//spit out the results" V3 P- w: y. X3 P, t' j
mysql_close();/ l2 @9 p+ F+ Q$ L* d8 _5 F# }
if($user == 1) {
% y4 c3 M9 r, ~8 ]print("1 user online\n");
; V2 O; d' J1 O: e/ f" E} else {% J T: a9 h( c, d" H' G3 {
print("$user users online\n");
3 H/ V( C( ?4 B& w}9 C+ s2 E" J/ ^: B: S! _
?>% {/ I8 O# x3 f; S) v! A" k* g

/ a: F. F1 j0 W( Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。# Z% |0 C0 v, Q, P; X* j2 a# u* B
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。9 w/ Z$ ~$ Z6 r& C8 x. ?
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. y3 P8 s$ n' \( V9 E" E
当然啦,这两款主机也是相当不错的。
' J% \) B2 k2 J5 m* }& t& ?$ h0 U智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年; @* z8 M/ v+ r9 Z3 a
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! b+ @, H' A* N提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ - ]: Z& u6 ~0 Q- u2 H5 G
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
4 B: O( e1 N' Y" H自己加QQ去问吧。 |
|