获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) ?. i. ]6 x2 T  y4 }+ b) L( R7 f我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 b! P, R; H% c% k6 c9 ^
首先我创建MYSQL数据库表。( t1 Z  m  N9 l% }( I( \# i
CREATE TABLE tablename (
" _7 {: y$ p- C9 A$ V4 vfield type(max_length) DEFAULT 'default_value' (NOT) NULL5 Q- ~% p& {- n3 S$ e& p6 b! ]
}可以使用的SQL语句。
; P4 R; x" I$ l$ BCREATE TABLE useronline (
0 W5 m, k: m* a, vtimestamp int(15) DEFAULT '0' NOT NULL,+ v6 E( r% @8 C) ]2 K& k7 c
ip varchar(40) NOT NULL,
6 L, a- h! W2 p$ P- gfile varchar(100) NOT NULL,
2 |2 _5 J) g: E5 ?0 m* gPRIMARY KEY (timestamp),. v9 Z' G0 N: H8 C; k% t
KEY ip (ip),
" c% H% d: J3 i$ \KEY file (file)! R* e6 m' L6 w6 Z8 q
);下面我们是PHP脚本,首先我定义MYSQL的信息。
1 }* [* Z, u" ]+ h; L9 P( h7 Q$server = "localhost"; //你的服务器
9 b! g' F+ @4 G  I* A$db_user = "root"; //你的mysql的用户名
: y* e4 l7 P% ]% I$db_pass = "password"; //你的mysql的密码1 p1 F3 |) }" M" T/ G" ?
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 B- R" G' T! [2 e; @$timeoutseconds = 300;取当前时间。% ]0 i" D3 w# g5 I: v/ {# A; @
$timestamp = time();上面的完整代码:/ E) z# b7 b! u8 e
<?php6 {5 H  P/ C. \0 L0 t
$server = "localhost"; //your server% A! }1 w; f( {& ^$ m
$db_user = "root"; //your mysql database username4 V+ z7 F& d4 Q5 N
$db_pass = "password"; //your mysql database password if any
7 P" W4 l" q! z7 K6 L$ K1 F$database = "users"; //the db name! [# |/ @8 |0 F1 W- v/ G# z- b* I9 [
$timeoutseconds = 300;//timeoutseconds limit7 Q9 t0 |& _& N( o% u4 p5 o3 M, p
//get the current time; q* Y$ M1 d) k: M) o
$timestamp = time();2 R# e3 W3 I8 X" t: b6 D& t" Q
//calculate the lowest timestamp allowed
6 B: d8 ]! x- A$ |+ Z/ V6 @2 t1 L, C$timeout = $timestamp-$timeoutseconds;1 D% F8 k* o6 q3 u" U
?>连接mysql
5 W# p, E. ]8 ?5 a' w, l; |mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' @& x& l  \5 c, `  Dmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 O: M$ J  J8 i$ ^mysql_connect($server, $db_user);查询数据库的代码:
$ o2 U6 L3 @5 t1 imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 [) m& k7 m' L; ?7 {6 P
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" M% J% N: i7 ^% F+ F& \('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 [' q8 \' g+ b
如果用户用错误信息的话,这样处理。0 F& ?+ n. H8 s& h* ?
if(!($insert)) {9 r0 H8 g+ X* o$ V- {. c
print "Useronline Insert Failed > ";
' B1 t2 Z# h2 A% Q  S! _; V! o6 p}然后实现当超过设置的时间就删除该用户记录。
7 J' M5 A+ m8 _9 O2 R% U1 U$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。7 G- g  k0 K: ^2 L4 ?
if(!($delete)) {& c' ~6 I! |; x
print "Useronline Delete Failed > ";
6 P' M- h+ S- i2 z}下面我们解决数据库中不同IP的问题
+ F% G% }& ~% c; a% n. m$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用7 \0 E' @0 E  Q5 ?8 I, L4 H
mysql_num_rows(query);来统计用户,代码如下。
2 O: n& ]0 Y$ z1 G$user = mysql_num_rows($result);最后关闭数据库。% R7 ]7 V" q/ I4 m( r
mysql_close();显示在线的人数。: i6 `0 E  X7 J# d. S
if($user == 1) {
4 `* O" ^* p8 ~8 D- Gprint("1 user online\n");
; h6 D9 T" d$ K0 K- K. Z} else {# ]8 K+ A" S  r9 i% z. x
print("$user users online\n");
) d3 f2 S6 E; k# s+ b6 z}最终把上面代码写成一个PHP文件如下。
0 z9 {; K8 e% ^* d- l<?php
. [) O( N/ V, {* C; I0 C' @//Put your basic server info here) ~( t$ S& O' G, C+ l; I( m
$server = "localhost"; //normally localhost$ ^$ u# i. i1 A
$db_user = "root"; //your MySQL database username
4 }6 T7 |( v7 f4 \8 U7 f& q" w. O$db_pass = "password"; //your MySQL database password
1 X/ r4 r: I& ^$database = "users";' {* w% y0 M, z5 ~
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 T( n+ d' }- p
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ `9 ?4 u$ S- D# m+ E// $timeoutseconds seconds)- C7 b" _/ U, d6 k, H& c7 e
//this is where PHP gets the time
- T) S( K8 k8 `! @9 ~: Q$timestamp = time();( C9 I: e; Z! d# R" L
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed$ r' l7 E' l6 ^; N  k1 k
$timeout = $timestamp-$timeoutseconds;
8 P8 J9 n8 ]$ O+ \+ K. q% ~//connect to database' _2 V# U9 P) O+ o+ a* t$ }
mysql_connect($server, $db_user);+ C) n: P9 d4 o$ B8 p6 S
//add the timestamp from the user to the online list" b* V; E& z5 U
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 B) E7 u" {" G+ v7 v( D. n8 I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; Q6 j! t  S3 w& z2 M3 d( k9 Sif(!($insert)) {/ r  }: r- S$ x2 v- |$ S: U
print "Useronline Insert Failed > ";6 X: D# @6 C. w5 C2 _! K
}4 @& a( R1 |8 Y, a8 b0 \
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# F/ [: \% t' q7 p' o8 u& r% j$ o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");8 R! u. A' y" [/ h( ?* Z' h
if(!($delete)) {
1 S2 k; B6 ~6 l# c2 }print "Useronline Delete Failed > ";
& c! {: y. M1 S- [}
- Z8 p' H6 C6 \$ G! X//select the amount of people online, all uniques, which are online on THIS page( l0 Q" y$ p" a1 n" v7 [
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 s/ R. e% M+ g9 ^4 a
if(!($result)) {  l3 B# W5 b0 u' ?/ ?" T- K
print "Useronline Select Error > ";! t9 o& J% [7 z! u2 @$ F
}$ m0 e+ D4 m; L1 A6 N# P' W
//Count the number of rows = the number of people online
3 m1 G# A$ l& Q4 i" v6 j! Z3 X$user = mysql_num_rows($result);
) K: v7 i4 b: V+ I& w//spit out the results5 r2 k. X! D; |' v" @
mysql_close();
" w' z4 v) V. B5 a5 [6 iif($user == 1) {
5 e2 C0 u) [5 [! D/ l8 ?, Gprint("1 user online\n");4 H( ?% L8 ]6 l  @
} else {
( e" T' Q9 O/ f' i4 b4 sprint("$user users online\n");
: @- W& w5 N. K, M}) |9 ]; R2 ~' u1 W# K
?>
% S  E% H- h0 j2 J! b/ b) _( t' Z
7 z$ }, n. c, E5 z* I* M. F以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ ]4 d  _4 q& V0 i- |时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。3 v( v. `9 z' j! ]3 W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
1 s% X. L/ _8 g3 ~" c& |9 s当然啦,这两款主机也是相当不错的。
0 a1 r- a2 s) F1 K9 l8 @, N智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年0 V# R- d. y, z/ N, k; {; r
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 i- p4 Q: T: ^2 c: v1 m
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
5 P# n) g- ?5 O# A4 t$ `空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
8 t; s. i, e  \自己加QQ去问吧。

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