|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
8 `% A `$ c& h" I& E3 h我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。6 y' z& b8 L) @0 w* n
首先我创建MYSQL数据库表。 b7 r" ?" m3 y
CREATE TABLE tablename (
5 t% _9 T# a8 bfield type(max_length) DEFAULT 'default_value' (NOT) NULL9 {' d; t2 ~- C1 E5 }
}可以使用的SQL语句。
( P. ~# d, L- V) R# ~CREATE TABLE useronline (8 j5 Q/ J, L+ ~1 V
timestamp int(15) DEFAULT '0' NOT NULL,
4 f& j: c4 ?4 Lip varchar(40) NOT NULL,4 p6 ?; u4 |6 O; b
file varchar(100) NOT NULL,
% m/ {2 t0 F. Y; s0 e- S* HPRIMARY KEY (timestamp),
% U9 c$ w% t* wKEY ip (ip),1 o/ d) K d Y
KEY file (file)
- h* e" j0 `" X8 g" B);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 X3 d, I3 v; W4 {8 I$server = "localhost"; //你的服务器
9 G7 H% l- f5 F' l$db_user = "root"; //你的mysql的用户名
7 i: r( C+ t' j$db_pass = "password"; //你的mysql的密码! q1 n. k/ m& d! e4 ]
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# I$ S V7 E- A$ K. K7 Z1 q7 N- P
$timeoutseconds = 300;取当前时间。
2 y2 R( Q M, R# \' I- | L$timestamp = time();上面的完整代码: u7 F8 _( T1 r5 W
<?php
1 H8 M( K* x) P8 C' N$server = "localhost"; //your server2 @6 w' W( i1 G7 K
$db_user = "root"; //your mysql database username# E9 x+ _' q6 j2 ]
$db_pass = "password"; //your mysql database password if any) |0 ? S$ b) t; F! E9 D/ a% P% D
$database = "users"; //the db name4 \/ o4 K I8 Q! f% `% c9 q& R- L
$timeoutseconds = 300;//timeoutseconds limit
. {( W5 k6 h' d* D' y//get the current time$ a# w& F! f2 g0 |5 h
$timestamp = time();9 M7 H2 R7 r2 @; L+ S
//calculate the lowest timestamp allowed
3 h6 Q! A8 \! o$ r$timeout = $timestamp-$timeoutseconds;
2 {- d& ?! D$ u& E% S% G0 V?>连接mysql
/ B& q" i% J" F6 k( Y/ Zmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 H* c$ v( v! A b# ?mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ Q+ k3 B- c: s- V6 a- \mysql_connect($server, $db_user);查询数据库的代码:
4 Y4 p' j9 O/ Z: M( omysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
! G( Y( N! P! I0 A7 S. N$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
}4 {( I; W T$ m+ L9 |) o('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 b% C# g% M! S# `: w
如果用户用错误信息的话,这样处理。& S) a* o1 d, N' K. q
if(!($insert)) {
& |# T8 p# s6 w$ S" Hprint "Useronline Insert Failed > ";
% R$ P% R- o2 t2 o0 Y9 ?% x}然后实现当超过设置的时间就删除该用户记录。$ H% m8 U) o) A8 H
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% C; `0 o3 X+ ?( v
if(!($delete)) {
0 m |5 c5 n B6 iprint "Useronline Delete Failed > ";
) M6 Q4 `4 C0 C. u}下面我们解决数据库中不同IP的问题
0 u2 b6 [3 f" X) t8 J1 J8 t2 y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 m( l9 m4 r+ R0 r
mysql_num_rows(query);来统计用户,代码如下。
' {3 O8 P$ C3 R% K7 L8 m- M$user = mysql_num_rows($result);最后关闭数据库。
1 @# d3 J! W6 R3 Umysql_close();显示在线的人数。
2 ]. O6 \/ k% K2 ^- T! ?5 S0 Tif($user == 1) {9 d/ U+ l3 b3 y9 @, x& R3 [& P
print("1 user online\n");
% I6 m4 Q( d2 \. J3 Q# D} else {
H2 z1 q8 i4 d' Cprint("$user users online\n");8 Y% n0 Y( B6 t" \% y) \7 ?/ @
}最终把上面代码写成一个PHP文件如下。2 y" I: ?5 A, [% \1 m8 z
<?php
# D' Z9 R9 t) f; S//Put your basic server info here4 A# s+ g4 P- A) _% @
$server = "localhost"; //normally localhost6 m% l9 E! o6 M8 N3 Z
$db_user = "root"; //your MySQL database username
6 q( r7 ^; p/ s0 j) L1 `$db_pass = "password"; //your MySQL database password# j. B& O1 N) ?$ f2 F
$database = "users";
% E) R; {, n8 s ~: W, T8 C' a$ M. q$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' Q9 S" ]: q9 i, l
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last: A( b0 Y% u3 l9 n
// $timeoutseconds seconds)& E' ], ~; t! F: e) S+ B! G
//this is where PHP gets the time
9 ?. Z( A( G* Q' d; }" A3 v/ i$timestamp = time();
6 a- ^! R1 S. L! C- t4 M: T! B4 ~: f//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
# O/ s9 Z( z n b/ Q" S( A$timeout = $timestamp-$timeoutseconds;
! }6 K. T* o+ X: ]//connect to database+ H Q+ ~5 D, f8 \3 S
mysql_connect($server, $db_user);
+ \4 D: e+ r' v/ G$ `! J# Q6 R* Q C4 [! p//add the timestamp from the user to the online list
- A" y9 H7 b! k0 J5 L: O2 x; W$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& r( N" b+ \0 e6 {9 U6 t# t& o('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 x! |3 [' U5 O8 b
if(!($insert)) {
2 B2 ^" A! K0 a; K, a$ v1 nprint "Useronline Insert Failed > ";% s; D9 w8 [7 _9 k
}
N5 c! }# ^* ~! w7 i" \: d//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' J+ R, u8 a* m' @! |$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 E' [' _% i: n( ?5 _* Sif(!($delete)) {, N" x: q( \8 p# N5 z
print "Useronline Delete Failed > ";7 m3 E- V9 y' M9 d w
}2 |' z* T" M8 u! [
//select the amount of people online, all uniques, which are online on THIS page% Y( J* l8 x, h6 H3 ~1 ~- t2 n, N( `2 |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
% W4 P: U/ \5 }+ h' ]if(!($result)) {
- C! y4 ?9 c+ @4 B/ l% I( H; Wprint "Useronline Select Error > ";
1 O( E: \* Y. w% M* ?. N2 g* p* |}% _' k, l8 W( r# ~# w. k M* J
//Count the number of rows = the number of people online3 d+ r. |! R- W4 b: x
$user = mysql_num_rows($result);5 s7 P0 b" q8 j6 S l
//spit out the results/ A) R6 P' H {# a: m
mysql_close();
0 H% p" x1 f. D9 X2 Qif($user == 1) {
& D8 t/ c$ `0 ^+ Y# n( rprint("1 user online\n");
7 L0 g- D* [1 F} else {, q" Q9 ^7 Q: m2 ^1 s
print("$user users online\n");( A8 t) }! |+ ?+ M9 w
}& {4 D4 ~0 { O8 V2 p, u* ], @
?>
5 v5 X9 e; P1 Y4 A& ? 0 u" P6 `) x. s( k6 ~2 f
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。$ _) ]7 R- ?6 {6 G" t
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( H. r- c6 ~! ]* j# A我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& Z) g: z1 Z3 Q% E& p4 K$ p当然啦,这两款主机也是相当不错的。
+ Z' H% g* D, w% o0 V" ?4 y$ F6 {智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年- m) [ Y/ Y; V+ ^: d
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 l3 A0 f1 T+ d9 Y( F1 w提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ . U# J. C7 J! f' ]9 s( k
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
4 p0 l1 s" K i0 O( m# n o自己加QQ去问吧。 |
|