|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!' G2 y; Z6 _# y6 r
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. S8 H; f+ j. L! N0 x( b
首先我创建MYSQL数据库表。+ B4 \( r- R$ Z+ S! y( e o6 V5 i) n
CREATE TABLE tablename (; Y/ [, {6 M5 [7 `
field type(max_length) DEFAULT 'default_value' (NOT) NULL
. _0 y: W- W9 y4 g' q8 w}可以使用的SQL语句。
a$ }% _/ ]8 i& T" Y0 E" ?CREATE TABLE useronline (2 b9 \1 @8 a' E1 L# N4 ?& d
timestamp int(15) DEFAULT '0' NOT NULL,% Q P: r$ l* m% Z; m, J4 F
ip varchar(40) NOT NULL,
' q2 }7 H/ \8 Bfile varchar(100) NOT NULL,1 o& A" m- Q- r
PRIMARY KEY (timestamp),
$ O7 j' p4 ~, bKEY ip (ip),
* R, q' B% ?& A6 \/ W3 F' `KEY file (file)# g" B1 q9 t/ x, A$ N r& R; B; w9 j
);下面我们是PHP脚本,首先我定义MYSQL的信息。
# U: g: E( ]+ r' P$server = "localhost"; //你的服务器1 o, W* M6 T9 R* E( G2 F e( T
$db_user = "root"; //你的mysql的用户名
' i3 Y% P; E7 e4 [% [& D- y$db_pass = "password"; //你的mysql的密码0 j% o% M: C+ Z9 c- M9 @3 \3 C
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
/ X* g, H! Q I0 i5 j: Y$timeoutseconds = 300;取当前时间。
% C5 h$ a/ K' \2 H$timestamp = time();上面的完整代码:) j/ X2 W [# D
<?php7 x" K4 O3 ?; z; \
$server = "localhost"; //your server" ]" Z' H) ]* _0 _- M4 Q
$db_user = "root"; //your mysql database username+ m3 ~8 J4 Z t* s
$db_pass = "password"; //your mysql database password if any
3 T3 s" n9 V* R$database = "users"; //the db name
5 i& l" x( a! L1 T1 l4 ?$timeoutseconds = 300;//timeoutseconds limit8 w/ c/ H% ^ n
//get the current time
- {$ y* m( e* g/ j2 H- b$timestamp = time();
) n5 y; k+ ?% l( _2 g! h8 V//calculate the lowest timestamp allowed
8 A3 L6 N' P) Z% b' Q4 a$timeout = $timestamp-$timeoutseconds;, B* W+ ]+ \: t7 n; \) _
?>连接mysql
5 k$ f7 D. m8 f6 R9 c2 Gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' {8 a1 U, E, J( K% d nmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. X; a8 ]5 G) Kmysql_connect($server, $db_user);查询数据库的代码:
5 K, z+ I* ?) ~- s7 O5 A8 {8 Q& pmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 N2 @0 n7 u5 ]
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, \4 N7 D; \3 D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, } L' E# w& I; F! X k
如果用户用错误信息的话,这样处理。
: k- S5 M+ T+ A/ y* s( d" ]" Sif(!($insert)) {
, |% m3 v2 e0 [print "Useronline Insert Failed > ";
* v a. T9 D8 w- i/ s8 ~7 A( ]2 |6 _}然后实现当超过设置的时间就删除该用户记录。, }5 R# R8 b! A- d% G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, c' z# f. q! H# r- Jif(!($delete)) {
) E0 ?: x& y( r, `) O5 k' P2 Mprint "Useronline Delete Failed > ";
' V, T$ S9 B2 u}下面我们解决数据库中不同IP的问题4 ?2 G! Q+ s: ~( Q: ^2 ~/ Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用 U+ W% }& A* h8 y* o/ Q2 T! z
mysql_num_rows(query);来统计用户,代码如下。
5 e! K: w, K Y9 y# V) x$user = mysql_num_rows($result);最后关闭数据库。
9 D# z& v3 r; i. p7 `' t" v- Z1 }$ Dmysql_close();显示在线的人数。
; I3 V0 P! `8 X2 S; cif($user == 1) {5 k; Q; ]7 h6 f1 x
print("1 user online\n");
$ D5 C H) ^! ^9 C) i; D7 O- a} else {' ]9 ~2 w. C& t/ j- Y* [+ C
print("$user users online\n");
7 w- k, G. O' L9 p2 z4 w}最终把上面代码写成一个PHP文件如下。
% v) g' Q& ]9 D1 [<?php
9 ^& T X' \- T6 C) h//Put your basic server info here7 R7 @$ J7 w, Z! L( {
$server = "localhost"; //normally localhost* m) p6 h( ?* A7 @) N3 v
$db_user = "root"; //your MySQL database username+ a' h/ ?7 ~% D3 k* M: t7 o1 \
$db_pass = "password"; //your MySQL database password
5 R$ k% C5 ~# Y. T$ b3 x$database = "users";8 I! U- R" e) \, M5 C
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
; e- @ R, G; b, B: Q// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
R3 u$ S+ J0 q4 h3 F// $timeoutseconds seconds)" q' a: [5 O; t% y% ?/ b0 I6 F
//this is where PHP gets the time
% C$ v( f" i- M1 \% ^- J$timestamp = time();
& r# o5 e* s* D: n* }9 g" @" C/ u//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ p; N$ P% z4 v9 y9 K+ K- T$timeout = $timestamp-$timeoutseconds;
0 V) d/ d. p* I# H0 l//connect to database9 @. q! L" @. H( e9 Y
mysql_connect($server, $db_user);
* m9 v% m X @//add the timestamp from the user to the online list! R: ^5 O) b7 a+ R8 u! |9 ~
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ i; d+ n6 `+ i- q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ s, e/ t$ S3 ]$ Z/ s
if(!($insert)) {
5 t, W- S4 h8 @- M# ^print "Useronline Insert Failed > ";
! _9 m$ c4 \* W+ _* o6 e e}: [" q1 s/ _) h: |: o. x% c/ _
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.0 U2 I( W A- g+ L
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
4 _, |, P2 Y+ w4 Y6 yif(!($delete)) {1 P2 ?+ t( v H( u" v* n9 Q
print "Useronline Delete Failed > ";) s @- M+ m/ W" l
}
8 Z3 a6 }, c, \8 x8 O) S//select the amount of people online, all uniques, which are online on THIS page. E+ o. k! h' D& C5 F) j
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& C# M1 [' g& L- Cif(!($result)) {
( o8 S% L4 B/ dprint "Useronline Select Error > ";
% w: O! X/ y! g2 b}6 P; @5 e- d t7 U: L2 M. L$ z7 S
//Count the number of rows = the number of people online3 T% F" K, o( n5 j4 V
$user = mysql_num_rows($result);4 v6 F. Z/ ~! L H& o: V$ T
//spit out the results
4 y! N# C, f r$ d8 kmysql_close(); `) v+ N& E2 o9 Y
if($user == 1) {: j8 l3 k+ n( N4 Q" O1 {9 P' |
print("1 user online\n");4 P& m1 E$ C' v5 O" q% `. f* i/ f# r0 z
} else {# z1 P4 T4 o' m5 f. c
print("$user users online\n");
) p, O6 j; O- Y3 D4 X, M" ^% F}
( p, _- j$ F' I9 \3 U) I- V: U?>
9 V1 ]+ \! |5 W5 Z8 Z& J1 i: { % c" K3 w7 o' S% r
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) I( f8 n; ?$ F. ?0 J8 ?时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
6 V7 \# r, w- m& [# q9 B我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
, U8 g7 e$ x+ u3 O, I当然啦,这两款主机也是相当不错的。
' ?7 s2 u0 z! l/ B1 d6 Z, v: C智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年8 M3 @) _+ _2 f+ B9 G$ M
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 r* Z3 ~& L4 h( X* x1 l$ E
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ + n# K7 z ^( u6 }# _ p
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
. z4 X8 G8 C0 T5 Z自己加QQ去问吧。 |
|