返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
8 e$ U; ]9 g3 S# t7 f. P我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。/ G, i; S& n5 @4 U* [; h' W
首先我创建MYSQL数据库表。+ T2 W8 C" d$ l2 R. Q
CREATE TABLE tablename (
3 a# e* q; m1 r. k" l- _" [# U& ]field type(max_length) DEFAULT 'default_value' (NOT) NULL
# l, a6 |/ e5 j8 }}可以使用的SQL语句。. r) _7 ^* x& f" R4 M" U% ~) v
CREATE TABLE useronline (
! J! X/ ~# l4 b# y! n3 ]( gtimestamp int(15) DEFAULT '0' NOT NULL,/ o) p' _! N# o% t: [/ d
ip varchar(40) NOT NULL,$ i2 }1 K! o( i9 K1 V
file varchar(100) NOT NULL,
6 d4 H8 a  t; T3 r" \7 v: {PRIMARY KEY (timestamp),: G) M/ b% E5 Q" `
KEY ip (ip),7 W1 Q4 q( j+ x) t6 H0 r2 a4 t
KEY file (file)1 q& ?3 Y% ?' P4 f2 c. `, N0 R
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$ _; h4 S; _7 m" |$server = "localhost"; //你的服务器
: O+ d; X5 h  y9 c$db_user = "root"; //你的mysql的用户名; t3 _5 M$ l1 G8 j$ F6 `
$db_pass = "password"; //你的mysql的密码" y5 h$ v* T, `: @) k) E# `  h
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
$ Q% M7 }7 Q! C: b# p, F" R. i$timeoutseconds = 300;取当前时间。& q2 W: F- b' P9 z8 V3 r
$timestamp = time();上面的完整代码:
0 R. E# y4 {4 r# ~<?php
: T- p+ `1 h" ]- |' v$server = "localhost"; //your server8 Y4 K9 \1 l( g9 Y/ t9 q7 h; j
$db_user = "root"; //your mysql database username8 v" Y/ I" H0 n% I, {& ?
$db_pass = "password"; //your mysql database password if any! z, R5 y& j& H0 ?4 }) P% ^
$database = "users"; //the db name! `+ \& k1 F+ t" C% G7 {
$timeoutseconds = 300;//timeoutseconds limit. K0 \& d. U+ o
//get the current time- L6 h; j% ~3 V7 Q
$timestamp = time();- A" ~! G! l9 f# r/ d+ @5 g
//calculate the lowest timestamp allowed$ B3 Q5 j' z3 J) |5 ~5 S
$timeout = $timestamp-$timeoutseconds;
( L7 c! q% M0 k) R& W  }/ g?>连接mysql/ p  o: I9 h! d; |& L
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
' c, Q; \5 S7 Q3 mmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. R: B. D1 O4 w' y: ~7 emysql_connect($server, $db_user);查询数据库的代码:" L2 `+ @) `0 @
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 N* r( }7 l$ J& N9 F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* Y0 t4 E- x; G+ q0 o6 I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* D4 d  q9 G3 k1 ~9 s* V4 i
如果用户用错误信息的话,这样处理。
' {+ E* u; |  `. M  U9 l; nif(!($insert)) {
' t( N. o, F; e" o% {print "Useronline Insert Failed > ";
- N3 f) z6 P! ^}然后实现当超过设置的时间就删除该用户记录。
% Y9 y7 x% f# N# M- K7 ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。' }) g! n: D' E* u; M
if(!($delete)) {
9 \, O& \  x# X) W8 B2 n5 J) h# Y/ P2 Fprint "Useronline Delete Failed > ";. z. T5 L9 A9 b! E% X# D0 ~
}下面我们解决数据库中不同IP的问题
, i8 z9 `7 J% y) F, l$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 V* n5 C# J: y4 M6 g! g6 y7 @
mysql_num_rows(query);来统计用户,代码如下。3 t1 S. _  J9 U4 f1 Y# c) \1 K
$user = mysql_num_rows($result);最后关闭数据库。& |  T% f3 @+ U
mysql_close();显示在线的人数。
4 _3 ~8 C$ o4 `/ s1 ~, aif($user == 1) {
& R; x% H% U. O+ B- j0 oprint("1 user online\n");
0 E5 h& [; W4 S/ f2 C: G} else {2 s) Q$ E8 r, k/ V0 D; c1 U7 `
print("$user users online\n");
/ I5 J! h. J  _% B- Q}最终把上面代码写成一个PHP文件如下。( T7 ?7 W/ b2 w+ _9 z1 ~; k. B
<?php
5 W! y* H1 W. p% D: O//Put your basic server info here/ a4 V9 A! }$ S" C; S4 F8 e; h) F! o
$server = "localhost"; //normally localhost( V) S) \) E6 ~6 }
$db_user = "root"; //your MySQL database username5 Q0 c; N+ Y/ _/ V( b/ }5 ~
$db_pass = "password"; //your MySQL database password, B4 V0 o6 Y. ~5 H3 s
$database = "users";
: [: ], a$ o* Q! G2 H2 V8 {+ l$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 L5 i6 J2 [) x// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last& K3 h5 u( X, _' ]7 {
// $timeoutseconds seconds)
7 j$ j; B% R8 \( r  a//this is where PHP gets the time
; n% C% B) \7 _1 N7 `" o$timestamp = time();* {* W0 k% M/ S6 L% O. [& o8 Q# S
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
$ E, i6 h5 @  x3 |7 e) |# I$timeout = $timestamp-$timeoutseconds;
* n) s' i, j& [, B0 ^! ]# t//connect to database
5 G  W6 }  w4 j. s( Z) zmysql_connect($server, $db_user);8 r' K* z) C3 y2 A! Y* q0 m
//add the timestamp from the user to the online list, {* D8 B" h" S+ x. [: ~) k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 _2 c* e& \, I% ~" F$ O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& c# \5 Q  w. q" k; lif(!($insert)) {# Y  D, Z7 [# n: U7 x
print "Useronline Insert Failed > ";
1 I9 a9 s& y% Q/ g6 {( W' ?; [* A$ H}
* O) [; |3 p: u8 i  T//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- f7 U( m, d3 z  y# y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");( B' f8 `3 E5 W, R
if(!($delete)) {- P4 e. Z* @7 v
print "Useronline Delete Failed > ";
9 U6 ~1 I- i0 o, K$ h) q" a}- F% |) d- i" u* E8 p) s' x) h7 V
//select the amount of people online, all uniques, which are online on THIS page5 K" ^" e* k6 K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ ~- j" Y/ ^% y( w4 h( ?
if(!($result)) {% I' B; _2 W& u% u5 y: L
print "Useronline Select Error > ";
1 D, Q. p! m' Y0 g% G+ w2 j" h& d}' S5 L# Q4 a1 B9 p
//Count the number of rows = the number of people online
& x: T+ a  K8 |* W2 O( z0 A; K$user = mysql_num_rows($result);
: F2 s$ C2 ?# Q5 U- Y//spit out the results
; d7 D4 D2 T! P2 Y8 _" |% }mysql_close();
* b" c/ r7 f) B+ x( p7 Hif($user == 1) {
0 z- C4 N8 _! q% v# Oprint("1 user online\n");
2 {8 s* K' w! u( r% ?} else {- E& K2 d$ i1 f8 a
print("$user users online\n");8 c, [" S6 }" s) D) x" p  K( U2 H
}4 h  k6 b3 ?& \) u
?>$ N* B# T; Z# V: f% ^  {) @  |

% D- Y# Q0 d$ J+ v" k以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ _5 a* ^" v+ p. g7 U时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# U8 P  }0 ~3 P. i/ {2 l" c- ]
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
8 V! A# I/ e# F! B当然啦,这两款主机也是相当不错的。3 X- Z/ o' h  N
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& X( N. `* X* W' v0 i9 ~1 X标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年; K% N$ i2 \, u
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ X9 M5 a0 L5 k0 t' h$ D, H空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; }* B: O) ?% V8 z( X- x
自己加QQ去问吧。

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