|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 c# ^* e) y( G' E- I2 {
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
6 O3 |: t7 V9 ]/ c3 |首先我创建MYSQL数据库表。2 Y( l/ X4 E i, W( N3 I
CREATE TABLE tablename (2 b- a6 n. S7 o
field type(max_length) DEFAULT 'default_value' (NOT) NULL& Q( ?1 Z- h4 u
}可以使用的SQL语句。
. v# i3 L5 ] ^1 `% X( U. O+ y5 yCREATE TABLE useronline (6 v) e3 G% a0 J% s% {5 |2 P0 ?
timestamp int(15) DEFAULT '0' NOT NULL,% J8 x( \: V) c
ip varchar(40) NOT NULL,
, q0 M y% [( Efile varchar(100) NOT NULL,
. I0 @. C/ g. y+ z5 M# L/ ZPRIMARY KEY (timestamp),+ w4 c0 N% v- u$ Q; X7 K
KEY ip (ip),
5 M! @- ^+ o4 d+ r: D# @KEY file (file) G M4 V3 z. Z3 r, h# y1 Y
);下面我们是PHP脚本,首先我定义MYSQL的信息。
: Y- g- B+ {+ _/ m" D$server = "localhost"; //你的服务器
; d# |; j2 r" A9 E$db_user = "root"; //你的mysql的用户名
" G2 y' m6 R4 S6 h2 d$db_pass = "password"; //你的mysql的密码
B8 z' Z. `8 m( L6 T# u+ L* j$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)7 L2 W" I. V8 d, Z$ z
$timeoutseconds = 300;取当前时间。. w5 H( y' ?. S7 s
$timestamp = time();上面的完整代码:
6 y B! \& C8 j& E3 j3 ~<?php- U' W1 c% ^, p( @) K' i" Q: `
$server = "localhost"; //your server
1 W) s7 `$ E8 P Y5 x4 ^* l$db_user = "root"; //your mysql database username
, d c2 f8 H2 Z2 I$db_pass = "password"; //your mysql database password if any
$ @0 N8 Y9 t3 F2 S5 ~$database = "users"; //the db name2 |/ t- D; a, o6 e: s" `) j
$timeoutseconds = 300;//timeoutseconds limit8 H9 k$ g* q4 ^% S
//get the current time
2 a7 e/ h' D' i3 E! A$timestamp = time();/ r9 p" W. G) T7 r5 d
//calculate the lowest timestamp allowed- R8 k% f+ z {, U3 w* U2 e* h! A
$timeout = $timestamp-$timeoutseconds;9 W3 l8 Y+ t. T7 v
?>连接mysql
1 K4 p2 v1 \5 ?# h9 g" |, I' Cmysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 X- Y6 G) H! ], q1 s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接( J" p: T* c! ^6 c* ^
mysql_connect($server, $db_user);查询数据库的代码:# w# K! e) m3 V5 G! o5 K
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; K2 x, M/ m# T
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 \* Y5 ^- o* I/ u
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 e0 l- j9 C0 ?. y- u# q% f: C
如果用户用错误信息的话,这样处理。7 E8 A/ p3 ^6 K" N; i
if(!($insert)) {! k8 v; ?% P0 y/ y+ J f3 B
print "Useronline Insert Failed > ";$ q. t9 E, O2 E
}然后实现当超过设置的时间就删除该用户记录。7 O. M I1 O- s( l( r$ h2 E, R
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; Z! J3 j0 P- x3 e' L Nif(!($delete)) {
4 J& Y- z$ z; m) v8 S8 Cprint "Useronline Delete Failed > ";
7 _( `: b* g0 ^, `}下面我们解决数据库中不同IP的问题4 a# J! _6 V1 u& ~8 U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用 E9 m$ |$ }6 P. H" O* z6 Q
mysql_num_rows(query);来统计用户,代码如下。+ J$ V: V r h7 s
$user = mysql_num_rows($result);最后关闭数据库。2 U9 K1 s* b6 ]# f! g
mysql_close();显示在线的人数。
! k% x) h! b" E$ N5 Cif($user == 1) {
& M9 I# ?0 d) f7 k3 x8 r7 uprint("1 user online\n");
3 |: K" F9 G4 F} else {
) D6 `$ R9 e4 Uprint("$user users online\n");
* [+ B" P, @/ s0 \8 \+ q}最终把上面代码写成一个PHP文件如下。
3 [+ r9 X- a: ~! C+ l: F0 l* Y<?php6 D) B; A. [" V1 a5 b4 _9 \
//Put your basic server info here
; W* X# J6 R& R/ ?6 K& @$server = "localhost"; //normally localhost
$ P# v0 F B# o6 s+ E; d% \3 J$db_user = "root"; //your MySQL database username8 [; @( E3 B4 D8 E; E- z: Z& w
$db_pass = "password"; //your MySQL database password
; j( u: O7 J+ t* A/ H$database = "users";. {1 v# ~4 A- l1 ~9 z! R
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are2 w$ k' ?. a# D$ v- r# h
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last1 p+ f) F. k% e5 ?
// $timeoutseconds seconds)
9 K; l, I4 m3 q5 d: H3 f//this is where PHP gets the time
# X, J% s3 ~! B( Y$timestamp = time();# a; S6 \; E- l& n9 o; q& \9 O8 h% d
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- I; o2 r* c) A5 ^1 i! O
$timeout = $timestamp-$timeoutseconds;
; ^8 W0 U) R# V( Z//connect to database
( L/ S7 M5 ?- N" Smysql_connect($server, $db_user);" V8 h; u/ a# J$ _
//add the timestamp from the user to the online list/ p: \* S1 ?0 n% j# F5 ^. b) J' |3 M
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 S/ F7 z/ C, `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* S+ v/ N/ ?7 v: R6 q' V a% Y
if(!($insert)) {
T7 l0 L1 i, H. g0 s: ~/ ^print "Useronline Insert Failed > ";
6 R( d6 W$ E2 F- w% d" i" o}
$ d& ~1 n: A) b) r6 b: r: m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; ^3 m: M6 f5 j3 T, x$ p" g- s
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");, u+ e$ [ f9 i
if(!($delete)) {
' H( r7 ~5 Q$ Q. [% L2 Dprint "Useronline Delete Failed > ";
8 w! H* B6 v4 O& l: Q N! g4 a}
" M# Z1 |+ j# E+ e; i% G//select the amount of people online, all uniques, which are online on THIS page6 x- R7 z7 V q# V& [
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
5 @ R% h3 ]0 ~7 L: E A$ Kif(!($result)) {
/ h) F: E3 r; fprint "Useronline Select Error > ";
( m/ {4 g2 y8 [, S6 T}
/ Z, D7 ^6 M# N7 x* Y1 Z1 [//Count the number of rows = the number of people online# N3 |/ O) x, V. w* I
$user = mysql_num_rows($result);$ W. N; m$ Z8 d, I8 ?% o6 o& E5 t
//spit out the results
8 m6 U8 O2 E1 a+ p' _% C Bmysql_close();: c2 j2 e- L. v4 y
if($user == 1) {
2 l4 z' q8 p3 P8 u/ [" c y4 `print("1 user online\n");
. K# n" C% O2 ]* ^ ?& m} else {
7 V& Q4 }) i. ?! Pprint("$user users online\n");
( d8 p* J0 O1 e+ s}4 J& i( {8 P1 {. ?( i- f
?>, H+ l- l S% u9 _% | b

2 n1 C' U# ^! ~4 d' Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ N% w N n* C9 Y, B& _, p时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
* {7 ^ b$ m* k. h: O* z& H, y我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。: }) E: B" h5 ^" N3 k
当然啦,这两款主机也是相当不错的。4 o! L8 p) j @7 @) S. G( F, u7 O
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年# A) {$ N3 |( ?7 @& }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
$ A9 C$ q& E. r2 l% b) a9 _提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
( R( Z/ E, |1 r' E空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55: j2 h8 |! s9 j7 a, {4 D7 _! [
自己加QQ去问吧。 |
|