|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!7 l- ?7 |$ f9 o7 j# N1 h$ d* L
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。# K% |3 B5 i8 k$ \# W% q7 p3 B$ f
首先我创建MYSQL数据库表。
1 B$ Q. D9 K+ Q1 p" BCREATE TABLE tablename (" N Y" A/ F; u. c4 K0 W, D
field type(max_length) DEFAULT 'default_value' (NOT) NULL2 v9 N1 M' ]. |3 D0 d5 Z
}可以使用的SQL语句。
4 y) y$ z7 m5 sCREATE TABLE useronline (! |. d8 d5 P- ]
timestamp int(15) DEFAULT '0' NOT NULL,- K; k3 U3 n, j( b
ip varchar(40) NOT NULL,
5 s- {0 ], j& L& L" n4 Kfile varchar(100) NOT NULL,
/ J1 y/ s2 S! _* a3 d5 O- wPRIMARY KEY (timestamp),
, m% J( G, l& r' \( c: z8 V* `KEY ip (ip),- g# v( H% H' z! l& L1 i+ j. k
KEY file (file)/ g4 G3 W# g5 ?5 x3 E
);下面我们是PHP脚本,首先我定义MYSQL的信息。
! o% V9 j7 x$ P, n: E. R$server = "localhost"; //你的服务器; \/ G# v2 s: x, x! S2 p
$db_user = "root"; //你的mysql的用户名
& Y8 A. r# P7 }% D1 W# @$db_pass = "password"; //你的mysql的密码$ m6 ]3 {+ u& S3 N4 [' ` w7 f' V5 T
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
. c* j2 o1 b0 x" J6 w$timeoutseconds = 300;取当前时间。: j3 w/ I; p0 G: e8 `
$timestamp = time();上面的完整代码:
4 `7 Q. W. B9 o( H<?php8 c2 Q$ E* o/ y' D |
$server = "localhost"; //your server
5 l2 u0 L! m* [$ W# t$db_user = "root"; //your mysql database username" G' K, H2 _% _4 |% u, ]6 U" v& v
$db_pass = "password"; //your mysql database password if any
& O& c F) m m& [* W$database = "users"; //the db name
- O8 Q4 G( M4 M, a5 r$timeoutseconds = 300;//timeoutseconds limit
9 c( w( ?- u$ [7 [2 P2 c//get the current time
$ B& `6 _3 H$ [( ?8 [4 S$timestamp = time();2 R5 `4 S8 d7 g
//calculate the lowest timestamp allowed
' y2 W/ B) S* M0 s# _& E" ]" X. q$timeout = $timestamp-$timeoutseconds;+ a2 R4 G: p& y
?>连接mysql
/ `$ z( Y2 R3 w$ f; C p& S. i' a }7 Z( Imysql_connect('localhost', 'username', 'password');也允许使用变量形式。
( d$ l9 b) F" V) x% H0 tmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 S/ w% t) C J# w$ [. M
mysql_connect($server, $db_user);查询数据库的代码:6 E4 g. C+ G9 Y6 \- s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 u |1 O5 K7 J8 f- O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% Z% {1 d0 |1 t7 T6 ~! b- O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 ^0 e( f/ E8 \. g
如果用户用错误信息的话,这样处理。
' Z; y# A7 Y2 d" F* r9 rif(!($insert)) {
6 N* n) Y' z- _( o' c* U* fprint "Useronline Insert Failed > ";# Y+ C9 t0 u5 V# z/ F; s8 z( h
}然后实现当超过设置的时间就删除该用户记录。
" N0 S8 `6 W3 v, E! z5 O$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。! i) N$ e. @1 v% t" }3 e! T
if(!($delete)) {
# \" D# D$ m$ r$ \: y1 P7 V; ^print "Useronline Delete Failed > ";
; D$ }6 D. x# a, \3 J1 T}下面我们解决数据库中不同IP的问题/ u# j8 ?& f. N3 `2 V* V# S
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用, ^5 h9 N" `. H; c
mysql_num_rows(query);来统计用户,代码如下。
" \8 _/ x! k7 j$user = mysql_num_rows($result);最后关闭数据库。
: r- i# T p' s7 j* wmysql_close();显示在线的人数。& ?4 Q H; Y9 N
if($user == 1) {
0 i" K4 n( i* [0 Cprint("1 user online\n");
. |: S. _. ^( z% p( D8 J$ F# O} else {! t4 o6 y, o8 o9 y% Y
print("$user users online\n");
* U( B* {& y2 Y}最终把上面代码写成一个PHP文件如下。
& R4 R+ u" z3 g- }* \2 T" m' W! g<?php
& Y5 Q% T' ?4 D# O' @& C& m//Put your basic server info here4 E3 F4 u9 T2 G
$server = "localhost"; //normally localhost
! Z9 B/ A$ z* u! e. H! |. J$db_user = "root"; //your MySQL database username3 {6 t% O+ Z v9 t& g
$db_pass = "password"; //your MySQL database password
0 o) S2 Q+ l7 D/ d8 k! Y$database = "users";7 O6 S/ Q. }7 T- v: V4 v' j
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
& I3 |* c9 k% |7 d* ~* m" w// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( s [; b8 {4 P0 B% W) _1 l& |
// $timeoutseconds seconds)
/ @9 h D0 R' Z//this is where PHP gets the time
% x. B7 h: O4 I( a, x$timestamp = time();
* S9 p* M: t& j9 f! N& f//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
3 s0 t8 E/ t! U5 L: D. S$timeout = $timestamp-$timeoutseconds;
& M2 U$ E+ b0 F1 a9 ~//connect to database Y4 M; c- L8 |& i+ J/ C- |
mysql_connect($server, $db_user);
/ @+ v, l$ H/ X0 n//add the timestamp from the user to the online list
( A8 x/ {, {, E8 k2 g" m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ n& D/ U6 i) P* F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! w* H) [" X) F7 A& }& Y" d- {2 ]$ @+ Sif(!($insert)) {' ?0 b5 F8 ~- J+ _, O2 Z* G7 |$ D3 `
print "Useronline Insert Failed > ";
( b0 k6 \% F1 Q1 s, i}
$ O8 q: T4 {' o//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
, \% v% Q! ^$ f* _; A6 Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. W$ P0 ?! N% y. V# fif(!($delete)) { L4 L8 V5 e2 R3 U
print "Useronline Delete Failed > ";" W6 s( i: P0 Y; g
}
; c0 j, T7 V5 a. P. x( ]//select the amount of people online, all uniques, which are online on THIS page3 y$ ~ X3 U. @! o5 j4 b
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 B7 j) @8 E6 v+ @$ N% b0 T. a- Uif(!($result)) {! b [/ |3 X: j. @2 d
print "Useronline Select Error > ";/ N% y2 g9 ^5 n7 e- @' Y+ J
}; P( ]5 J2 }: g' G2 c
//Count the number of rows = the number of people online
" m4 {3 k; s h0 i* }+ O$user = mysql_num_rows($result);! T9 M3 Z5 s; Q7 w+ d
//spit out the results+ [8 C! u7 u* w) r
mysql_close();
( U& z% N! J- Q* Z9 l- f, | E+ rif($user == 1) {
/ L" `+ z' d }' f: gprint("1 user online\n");# ^1 w' g1 G& ^3 Y
} else {
( b5 P# d+ }" v7 |! h9 _, j8 y8 d# Z/ lprint("$user users online\n");
2 ^' p7 S* V: ]5 x& p}# k( P% p9 m; p, Z$ F$ _9 }
?>
5 e# k: T" A, ?5 {; a* Y' D % x: m) w0 Y2 F- }
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
/ F+ I) g4 Y6 X A时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。! f( i1 m, A/ J" @4 U; b
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。/ Y7 F. i. j# q; ]! d$ a
当然啦,这两款主机也是相当不错的。
$ y9 O9 H, I5 Q: `0 k智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年5 ]* T$ b4 ]! q1 m3 W; o1 U
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 x/ `# w* E9 \% u' C" q提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
/ Y' A$ c0 d8 G5 R# d空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55' O- j4 C% f0 g/ e
自己加QQ去问吧。 |
|