
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
' ^9 @ j5 L a8 F3 Y" f我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 K6 @$ K j" k首先我创建MYSQL数据库表。
q; @; U' W- q6 H3 C0 ^CREATE TABLE tablename (
3 G8 c7 Z( y1 i9 N: j" n* Mfield type(max_length) DEFAULT 'default_value' (NOT) NULL
7 a! s. P0 b7 p}可以使用的SQL语句。
1 o+ a; I/ T3 ~7 ]' l3 F1 t" Z yCREATE TABLE useronline (
J' C( b% F0 f7 k% t4 b3 p+ ntimestamp int(15) DEFAULT '0' NOT NULL,
3 G Z' r4 A0 r2 a! mip varchar(40) NOT NULL,0 L, f/ ] Y1 e4 W
file varchar(100) NOT NULL,
2 }8 f- j9 t# T" [9 R. S* tPRIMARY KEY (timestamp),& @4 G3 i4 N; f4 y1 A% d
KEY ip (ip),' P' l/ @( ]! R9 S, g2 G
KEY file (file)8 X$ J# N/ E9 c! j2 U
);下面我们是PHP脚本,首先我定义MYSQL的信息。/ _1 q$ j6 R/ T0 q
$server = "localhost"; //你的服务器; ~+ @' C2 a* {; H
$db_user = "root"; //你的mysql的用户名
" {$ F/ X+ v8 e$db_pass = "password"; //你的mysql的密码 w Z% Z) a4 i
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数), `: Q" g7 J' I, K b
$timeoutseconds = 300;取当前时间。, u4 u1 Q; Z( X! s4 T ]8 t6 r
$timestamp = time();上面的完整代码:
: T G& F6 w7 g# K( L- u<?php+ [& z, P/ n( T) ^0 P
$server = "localhost"; //your server
7 ~, V& _* O# H3 x& _$db_user = "root"; //your mysql database username' Q8 q! U# L& y' B- ~- W' P
$db_pass = "password"; //your mysql database password if any
# ^( O/ r- } n9 C$database = "users"; //the db name
* |) Y3 _- Z) }5 v! U; J1 k# d$timeoutseconds = 300;//timeoutseconds limit
0 P7 ? f3 |/ N//get the current time
+ H* a( a& p' L; N: R7 @8 A% E" h$ F1 Y$timestamp = time();
& I7 \: \( G0 K# R. Z; h8 |* Q- E//calculate the lowest timestamp allowed/ {) c6 ?8 T0 }
$timeout = $timestamp-$timeoutseconds;( N9 R$ a3 b9 s4 c
?>连接mysql
2 C' [& Q4 J6 T: A ?mysql_connect('localhost', 'username', 'password');也允许使用变量形式。, H( l" b+ N& ]
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接# ]9 ^% w6 p) c0 B4 f9 U; f+ }
mysql_connect($server, $db_user);查询数据库的代码:+ n! ~: o+ c) s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。6 x3 Q; y( K: I, e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% N0 j/ Q$ T3 d S) F('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) ]/ R+ @9 y6 f% C9 u如果用户用错误信息的话,这样处理。/ {0 y) F5 {8 i" e
if(!($insert)) {* S" r2 y( [5 D5 s, Y+ Q
print "Useronline Insert Failed > ";
6 B% B& X4 t5 Q2 s}然后实现当超过设置的时间就删除该用户记录。
( c* n0 ?# ?) z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% o& \) y1 h2 [; {) o1 ]; _9 Y
if(!($delete)) {& s: p* |( {3 _+ J, C
print "Useronline Delete Failed > ";
3 t1 E. c2 M8 v( T0 h}下面我们解决数据库中不同IP的问题& y7 ]. @/ H: F
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
( F. A/ n* Y8 |7 C5 |( ?' Bmysql_num_rows(query);来统计用户,代码如下。
1 Q3 e) o7 S5 H: l! t8 z' E$user = mysql_num_rows($result);最后关闭数据库。
: q3 R$ N( E( J4 amysql_close();显示在线的人数。
4 ]3 M- v v$ e. V5 ?if($user == 1) {7 a, s- t f, c4 H; T
print("1 user online\n");: t5 U, _) x8 Q3 N+ p9 M* v+ }
} else {* n4 ^/ r5 P& F. X8 J% N5 p, {) v B
print("$user users online\n");- m' r' B- E. _' {/ I" }/ J2 h7 J
}最终把上面代码写成一个PHP文件如下。( G' X+ E) }5 W4 |' `0 x6 [
<?php
& I" z0 K% x& S& W a1 n: i% I//Put your basic server info here
6 \5 ?: p5 Q" Q0 x) a* [$server = "localhost"; //normally localhost
1 K9 Y8 g: L/ I( x: g$db_user = "root"; //your MySQL database username
( y# Q8 r+ T+ ~, n$db_pass = "password"; //your MySQL database password
- w' _: O1 A; O$database = "users";7 T9 c& w+ ?: K# w& h% e3 g
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are2 o' p6 z6 e4 g
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
% V* [9 V. J* G: N// $timeoutseconds seconds)
. r( Y* j- m% L//this is where PHP gets the time+ H) [, x- a8 b* Y# l/ s+ ^
$timestamp = time();
/ l4 M* q4 f2 I/ U//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed& v3 M6 V: N: \+ \( v
$timeout = $timestamp-$timeoutseconds;# G( V: w5 H* Q
//connect to database) |# e2 G7 @" D% o& u- X4 [; [
mysql_connect($server, $db_user);
4 V% D, r7 @0 w) h' i; I) L//add the timestamp from the user to the online list( l" n. C/ b: q( C% x' H
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' L; q& |2 g- n) q$ Y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; ~7 s- F) ?' x4 jif(!($insert)) {
7 P% t7 D- x3 r; J( w" O, rprint "Useronline Insert Failed > ";
9 m/ M% g& j3 y5 R5 T6 [3 c}9 k* ]8 T: n b! x. S
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& Q8 W) K: t6 X7 Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");3 Q& x( v5 |' S+ T! l
if(!($delete)) {8 t1 E5 v# _' V( B1 E4 A7 c& n
print "Useronline Delete Failed > ";! l0 | H9 n8 ^4 E5 Y
}
; O" j: ?6 j& l, S1 [$ X, l//select the amount of people online, all uniques, which are online on THIS page
0 s0 S: G2 K% n4 F+ y, h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- Y, i# Q' S/ } r% p& h, I( fif(!($result)) {, f+ \% O4 u$ W) {+ }6 G- Q3 [$ v
print "Useronline Select Error > ";
7 G: \' n. n* K, `; k. H}
4 o2 i4 n* \2 q8 J* s) T0 T//Count the number of rows = the number of people online
( y: g1 f6 w4 p2 Q- A8 H* b/ \$ u9 D9 `$user = mysql_num_rows($result);
, H8 w* L# E9 I//spit out the results
_* M, Q/ X5 Cmysql_close();
/ C8 I$ f* V6 ^7 c- qif($user == 1) {( D( z/ x; I [
print("1 user online\n");1 q2 e. l( M6 R+ O( s& L
} else {. G3 T- { u- q& n r1 ]
print("$user users online\n");: z2 W5 H/ j6 F
}
1 D9 q0 r" q" P?>4 N5 ~6 k' ^) ]% @7 m |$ H
; m- J `+ {$ Z' }$ r
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 S9 y. Q0 F0 H时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! R- W5 r& W; h" f3 o我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。! B, _% b& q/ Y+ s9 r* b( k7 [' y
当然啦,这两款主机也是相当不错的。. F! e" E" O* `9 s
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
! \) F3 D8 d7 Z2 j% O( i标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
5 _/ `$ y% B( O8 s' r, `0 H. O; b8 I提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
1 L0 p4 m1 G- _空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
( \9 M, V$ ?: U/ P8 y2 V自己加QQ去问吧。 |
|