返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
- a% B: I$ S% H0 m( b: l5 l4 \7 S我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ N9 Q4 b9 a- M% ]' H% m) O首先我创建MYSQL数据库表。- U6 e/ e/ w# H1 i
CREATE TABLE tablename (+ y, \1 a  b. L) M1 ?9 W
field type(max_length) DEFAULT 'default_value' (NOT) NULL
8 z  t/ n% ]# u}可以使用的SQL语句。% N" f  c$ A) R
CREATE TABLE useronline (. e! I8 G2 V4 R
timestamp int(15) DEFAULT '0' NOT NULL,$ S; V2 r0 r. R9 v1 ~
ip varchar(40) NOT NULL,
, q1 r7 W( K, O: r# S! z6 m% N0 s7 Afile varchar(100) NOT NULL,- j$ I6 j2 Q7 Z9 s
PRIMARY KEY (timestamp),
4 O* f* T/ r9 k* ?( M% O" NKEY ip (ip),
+ R0 L3 a' V. J' g5 fKEY file (file)
7 U; ~4 c7 L! L  a+ h8 A+ T);下面我们是PHP脚本,首先我定义MYSQL的信息。3 q$ F6 x' h, N
$server = "localhost"; //你的服务器0 z* z7 r, Y2 D; I
$db_user = "root"; //你的mysql的用户名
6 v$ Y: L& z8 m+ u: F+ r$db_pass = "password"; //你的mysql的密码
8 s! r6 M3 X4 H2 g2 U+ P2 T/ p* _" t$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# ?+ c/ v# A6 i( `
$timeoutseconds = 300;取当前时间。& L9 r# D. m% `! _! N6 G
$timestamp = time();上面的完整代码:& z/ c5 n' N- Q) M1 j5 ^
<?php! p/ L) X9 ^3 r6 I# R
$server = "localhost"; //your server
* ]. Q! j; ^/ A$ g$db_user = "root"; //your mysql database username' t5 p* w! t! R0 ^9 ^" J
$db_pass = "password"; //your mysql database password if any; [: Z& H; e& d$ m' `' F0 m
$database = "users"; //the db name0 q& J0 u; |- ^# S
$timeoutseconds = 300;//timeoutseconds limit
& W3 p2 f4 y2 a# c4 O; T//get the current time
1 D0 ]3 L" N- P1 x2 I/ n$timestamp = time();; o! i, E8 r3 n% L
//calculate the lowest timestamp allowed% ^% u4 M0 D1 w; p2 {
$timeout = $timestamp-$timeoutseconds;
% N2 X9 z" F/ Z- i/ c?>连接mysql
# P, g( `1 k3 E; j' L( Ymysql_connect('localhost', 'username', 'password');也允许使用变量形式。
/ v; @$ M0 _6 B, A$ Lmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
3 b# q: U5 U% u4 H0 u, O% Wmysql_connect($server, $db_user);查询数据库的代码:
9 X" r& z0 }$ w; U+ Zmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
3 @0 I- S! F# D7 t4 @$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" r* B4 Q- M7 K% [7 o('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# W2 R: X0 f$ z
如果用户用错误信息的话,这样处理。
4 s' N4 p+ {' _# Y! ]if(!($insert)) {
: J$ J4 _: P' l" R  U) eprint "Useronline Insert Failed > ";( j. k& Y+ O* u0 e/ X
}然后实现当超过设置的时间就删除该用户记录。) |7 I/ B- k8 Z* v" \8 \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。* i+ K6 i2 J  `: n) H, _& X! S
if(!($delete)) {
2 p  _+ t4 B1 _# \: z5 Oprint "Useronline Delete Failed > ";/ ]( u; f/ m5 x3 M
}下面我们解决数据库中不同IP的问题
, l* {, j5 t( L. A5 V$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
) ]" x2 j: v0 Y9 \, C# |; Omysql_num_rows(query);来统计用户,代码如下。, @) i* H6 t# E9 Q6 i/ w
$user = mysql_num_rows($result);最后关闭数据库。
8 m; o/ T# b0 `mysql_close();显示在线的人数。0 X$ f2 U# i5 Z* \
if($user == 1) {
. M. k$ V& e! p: Iprint("1 user online\n");0 X: k2 D+ h7 v- Z8 ^7 o1 J+ E
} else {, ?6 k! Z- _# ^6 l1 d* c
print("$user users online\n");
8 p) K4 C$ b; d6 B; w  Z}最终把上面代码写成一个PHP文件如下。, M4 m3 o6 ?: x
<?php
1 N1 _* k; ~! V4 \! b# d0 Z//Put your basic server info here
2 m- ?! u0 e8 s- \/ ~# g! G$server = "localhost"; //normally localhost4 H, _+ c) f+ i1 [6 f
$db_user = "root"; //your MySQL database username
, h7 R4 p9 r1 T$ ?$db_pass = "password"; //your MySQL database password
* x6 y6 }. K: O2 F- h3 S$database = "users";
' Z2 I8 f" c7 d( z$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
/ m, P8 e) W  r& i, ~2 o0 N$ O// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last0 |7 r, v  Z  K
// $timeoutseconds seconds)
/ t& n) o) \; S, |& e//this is where PHP gets the time5 k* L% t* k' h/ E  ^2 X
$timestamp = time();  D1 B) O. G. \9 C: ]
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
9 s! ~9 _- I+ q$ P% s/ Z! R$timeout = $timestamp-$timeoutseconds;) j9 `, N1 s  V3 s( t! R$ H( r9 Q
//connect to database9 }7 a9 S  q$ R# o6 }( Q7 ^" Q
mysql_connect($server, $db_user);) q3 ~+ n2 S" M/ A, D5 h. I8 L
//add the timestamp from the user to the online list9 y! E" X9 R/ v9 F( i/ Y' o
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' ?( U) ~3 @5 }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% b9 P& E6 }  z! }if(!($insert)) {, s! t! V0 p, _( b  s
print "Useronline Insert Failed > ";
5 p* F& k; Z! w2 f}
+ G& g, J" O  q3 _, x: O//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
7 A7 E* X, s) U) W$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) b! M9 F/ N9 d; kif(!($delete)) {1 o$ X, H- c& b; Y* \
print "Useronline Delete Failed > ";! a: q# Q: Z6 c
}7 i1 o8 S; `$ C% h9 u
//select the amount of people online, all uniques, which are online on THIS page
3 D* P7 C5 I" o$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
9 Y' q5 L' F- S/ }( dif(!($result)) {3 E6 a3 C( k6 x. s5 A1 q
print "Useronline Select Error > ";
- n. P" X3 K9 l+ K# p1 ]0 Y}8 N$ U! O' i& }' H  ^, I! B5 H/ I, G
//Count the number of rows = the number of people online1 u( S4 V7 P- r
$user = mysql_num_rows($result);
# Q. |3 b1 R, {/ r! R//spit out the results
4 e/ i! o( V4 V% }, w6 X6 v( V$ R, lmysql_close();
' C* T& a: F1 ~: \$ k# F0 tif($user == 1) {
+ H) @/ }2 K4 \$ kprint("1 user online\n");
$ H$ g# q; z8 ?* O/ ~# b, ?; c/ R) S} else {
9 u/ t# A: t3 O1 o: Dprint("$user users online\n");
. c5 Q. Q7 |/ y  g/ D. U}2 k. z) p+ V) }
?>
0 o; {7 T/ s# J* `3 T! q5 |  G2 j0 [2 k
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! o/ P- z& B% a( K5 V; l& w& g时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
; ?% Y$ c. a1 K- A$ r我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; g* |+ w1 B6 S/ t2 {7 J1 y
当然啦,这两款主机也是相当不错的。( Y! @) r0 O3 j
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
2 F6 f' z. v5 S% I标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# z. x% @7 S& n$ [提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
; j# f0 Y- `- z; o$ t' R6 Y空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( y) I5 h$ y3 h$ m% i% k0 e
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: