|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
n9 Y5 F1 ?& l, u# A7 y- D我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。1 S t' X0 d+ }1 d+ U$ t3 O
首先我创建MYSQL数据库表。3 H1 J3 e( o1 j4 H' {: r! n9 A& x
CREATE TABLE tablename (
: N+ }) J4 {# q2 O. y) v" ~' G- [+ f4 ~field type(max_length) DEFAULT 'default_value' (NOT) NULL# `; h3 Y/ d/ W8 e0 D3 d5 ~2 f
}可以使用的SQL语句。
7 D, l& E1 e. U% N; O* wCREATE TABLE useronline (6 [8 |. b2 \; X* w- s
timestamp int(15) DEFAULT '0' NOT NULL,3 t) Y0 o% p8 e$ w
ip varchar(40) NOT NULL,6 m& f4 p" R% n @2 O1 \
file varchar(100) NOT NULL,
2 A+ A$ N5 ^+ n9 e4 VPRIMARY KEY (timestamp),
4 f: f8 t8 W& EKEY ip (ip),
: C+ t1 @7 @+ G7 ~% N) h: O iKEY file (file)
. f2 o+ X: W4 i0 @8 j! `8 {" w* s! Z);下面我们是PHP脚本,首先我定义MYSQL的信息。
! C3 X$ z2 k% |! \& ~- D$server = "localhost"; //你的服务器( P# o6 g' O# o
$db_user = "root"; //你的mysql的用户名# Y/ m, Z, v; E* {3 Q+ B
$db_pass = "password"; //你的mysql的密码9 d( G# ^' l) I8 f7 Q
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 \9 J% E8 q$ Y0 }' ` Z$timeoutseconds = 300;取当前时间。
# L( v7 H6 c* L5 m; ~' w$ U) \$timestamp = time();上面的完整代码:) |9 |9 |" G0 l3 f6 M
<?php, F$ D; J( Q" M% R! G; L
$server = "localhost"; //your server7 X* V* y4 W/ J7 y) s* }5 B
$db_user = "root"; //your mysql database username, {& ^8 k: i2 s- d2 d+ k
$db_pass = "password"; //your mysql database password if any
( V, k6 t# y0 u) }0 r d# L+ x, F$ o$database = "users"; //the db name* f" b. x9 Z R2 {5 Z7 J# y
$timeoutseconds = 300;//timeoutseconds limit" Q& ^: ^; P+ d1 x/ j& |
//get the current time% K: r. a8 l7 J
$timestamp = time();
7 @: D) l9 L+ E3 F# V' q//calculate the lowest timestamp allowed. M& T! P0 R1 J6 c# F
$timeout = $timestamp-$timeoutseconds;
. Y( J9 K. R& s7 H# Y?>连接mysql
; m' g& a- y* P v0 umysql_connect('localhost', 'username', 'password');也允许使用变量形式。! ~0 g Z; h3 T" Y+ A9 |" D# C7 `
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
$ D! W k# o1 e% Z+ L& gmysql_connect($server, $db_user);查询数据库的代码:
* k& i0 Y5 u" U c, ^: |mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 j5 n) T" d; I( j/ P1 h
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 D% P/ d; Q% [7 N+ N('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, t5 `- i0 ^% G6 z
如果用户用错误信息的话,这样处理。
) ` N0 c8 T" f* E$ g" M4 qif(!($insert)) {# Q5 v. R& }3 }& G
print "Useronline Insert Failed > ";! q5 }4 @+ j8 S
}然后实现当超过设置的时间就删除该用户记录。
1 }: G& e5 ^3 I$ x' Z+ M3 d! `$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ u* M( X* o# V& @$ }8 [0 o
if(!($delete)) {% j/ d( Z' K* B4 _
print "Useronline Delete Failed > ";4 ]7 J+ f6 W8 n, y
}下面我们解决数据库中不同IP的问题/ D. ]$ h" K7 D6 M/ ]# M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 z! y2 @6 `2 s2 ?# Smysql_num_rows(query);来统计用户,代码如下。
9 Z: j. Y8 N9 f& f& E$user = mysql_num_rows($result);最后关闭数据库。
1 y/ {% z# D( p* a% ?% u4 qmysql_close();显示在线的人数。
9 q; O" ?( B. b4 ]if($user == 1) {
* g; @, }0 J6 V7 r" y8 H( S1 Xprint("1 user online\n");
" x1 i; J0 u1 c+ S* ~} else {8 R$ ?) B1 a+ r& {
print("$user users online\n");
5 F" O/ n x3 I C}最终把上面代码写成一个PHP文件如下。
6 s+ ?6 d3 o9 d) G7 `<?php d. N$ c" A" f, c- U+ P0 X+ {
//Put your basic server info here- |4 B7 `% [/ G3 G; ]% V$ `7 K. c
$server = "localhost"; //normally localhost
9 ^9 C( F; H- `6 p* k$db_user = "root"; //your MySQL database username
) Z; ?# s$ F, O9 N$db_pass = "password"; //your MySQL database password& R% J3 r1 s6 j9 R. }
$database = "users";
6 R2 @5 Z4 w L' v$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 p4 |- } i5 Z& d// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
* X2 i0 N% A8 \/ w/ G// $timeoutseconds seconds)4 N, P% r5 C7 j" w. m
//this is where PHP gets the time% ~1 m+ f t" o j
$timestamp = time();
9 m S0 q$ v+ r( o+ y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed. ?' R0 i" r/ ~; |/ X8 Y6 y
$timeout = $timestamp-$timeoutseconds;4 h+ q" b8 d6 H+ t8 ]
//connect to database
6 y3 d- H/ r, c+ c" rmysql_connect($server, $db_user);/ `7 F. s P- k1 p
//add the timestamp from the user to the online list6 ]( T! e8 _# ^7 m: X
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, n6 ~0 p+ z. r3 R" q. g7 v* [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ o4 e- _9 J. K. l$ r: o# P9 dif(!($insert)) {
+ l1 r2 h9 ~8 X" H* ~$ R9 |print "Useronline Insert Failed > ";
. g) u6 V0 W6 `* D- Z}+ m: m* l7 T; W% D
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& }, m- f3 B1 e& f8 C2 G. S4 R T, F
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: g0 R. h7 B+ K' u# @( ]* sif(!($delete)) {8 `9 r/ b. L: b! V: n1 M
print "Useronline Delete Failed > ";1 s n; n/ S& p5 C
}6 a! O2 c' r- r+ Q" m* m N& I
//select the amount of people online, all uniques, which are online on THIS page. S/ _3 D9 J1 {7 h& s3 m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 x7 m" I$ k4 ~1 A/ }0 r$ Z
if(!($result)) {# c- B0 g* m# l3 \
print "Useronline Select Error > ";
( G0 }( Q2 ^! _2 @}
7 R1 Q; q) H+ F5 e/ n//Count the number of rows = the number of people online
" I- l; q/ b& `* r' U/ E. W# x- l$user = mysql_num_rows($result);
- U' G- F; ~% b$ }- A6 Y/ W//spit out the results
3 a. L: b7 n' ymysql_close();! b+ l; z, e) S; ~
if($user == 1) {! |* u; v7 A& D+ m+ _
print("1 user online\n");
1 R) g- M( V: t5 d h1 p. D4 h} else {
! W9 H; O1 H& ?4 t9 b) Eprint("$user users online\n");
- Z6 L# Z5 u: i. z}
( t& j& a0 `$ q- Q. E9 Z?>
* }; {3 s1 C: n, Q/ C. {3 M
8 ~1 ^8 f$ {8 z9 N以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 z) W; U+ m% I6 E9 D时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
6 W, ~; z6 \: F/ c我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。) I; P8 U- A, Q2 S
当然啦,这两款主机也是相当不错的。
$ Y6 d1 m7 y& q' Y, C智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
1 }4 s7 o. E' O标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
1 Q/ q+ ^8 O7 s2 \- d提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 l; R4 H) g4 h4 {# T/ A空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
& {' Y8 x$ R( r4 L L自己加QQ去问吧。 |
|