|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 L# Q- l; {% [% [
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 w0 B( m& i B8 K/ Q
首先我创建MYSQL数据库表。
- L5 Y1 o4 Q8 _% ]5 \0 ]CREATE TABLE tablename (
{) Y/ Q4 @; _' Y: m5 T" Pfield type(max_length) DEFAULT 'default_value' (NOT) NULL
/ v) T/ T% w$ K# J1 U H2 R}可以使用的SQL语句。( v" E8 |2 k0 b0 J8 I
CREATE TABLE useronline (
7 P* f0 g- S7 B( D5 {timestamp int(15) DEFAULT '0' NOT NULL,
- M. v1 w9 C& v3 h! L/ I/ |/ t6 J7 ?3 uip varchar(40) NOT NULL,
9 ?' B' ]1 p2 t* y4 A: F% Sfile varchar(100) NOT NULL,
2 E0 {( U/ D, f* t/ hPRIMARY KEY (timestamp),/ ]2 S E/ ^, N% n! l4 ?
KEY ip (ip),
5 k3 j4 y# f- p3 D" W; {4 f h4 TKEY file (file). b; d6 q6 h" A X. m0 T
);下面我们是PHP脚本,首先我定义MYSQL的信息。' }0 \7 @: w3 l7 S6 U; m
$server = "localhost"; //你的服务器
2 G) J6 S" c2 C% T* n) B; b+ m! p$db_user = "root"; //你的mysql的用户名# W1 K+ |+ f A3 f5 u6 F
$db_pass = "password"; //你的mysql的密码9 E( q0 T! x h: A g1 a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)! r/ ?* W( e6 O2 {
$timeoutseconds = 300;取当前时间。
5 {5 [4 ~, g! ], p2 k! v$ ?7 ^: k0 z$timestamp = time();上面的完整代码:
# L5 G' |4 T2 L<?php( q. g# o; M0 F- t% x& L. h
$server = "localhost"; //your server$ D3 E/ ` M+ L; l) P/ F$ P! O
$db_user = "root"; //your mysql database username2 ~. n; S* k$ f6 `+ K2 y4 |
$db_pass = "password"; //your mysql database password if any" D: f, V% P6 Z5 E- ` c2 r
$database = "users"; //the db name8 l+ S# b" [/ |! [; g. O# w
$timeoutseconds = 300;//timeoutseconds limit P+ X* C) m6 ^/ c! b" H8 c) a9 D
//get the current time
. X2 U9 N8 T8 _; G( I; ^' p$timestamp = time();
; o- t/ g5 t* a7 U//calculate the lowest timestamp allowed+ ^5 k* c( I+ B3 ?8 @
$timeout = $timestamp-$timeoutseconds;
/ m" W/ L+ T" ?4 u?>连接mysql
9 }0 t- g1 W" A# O" z, x# B9 I. emysql_connect('localhost', 'username', 'password');也允许使用变量形式。
. q, r9 g% y9 u) ?. {0 t q7 m1 M$ z1 Gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* S& i5 s2 Z3 d1 {* p2 F; s/ |mysql_connect($server, $db_user);查询数据库的代码:4 n- \$ W9 @' C4 i( x
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' i0 y0 E$ D; K! j3 ]+ n
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ q) T+ f. u5 R& b('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 H4 X {" t' r4 M2 |* M, e
如果用户用错误信息的话,这样处理。) D, n9 y8 y# w f( _/ h
if(!($insert)) {
6 I1 K4 }, M( Y4 i) d1 Rprint "Useronline Insert Failed > ";
2 g# z) N) I; V- L. V2 e}然后实现当超过设置的时间就删除该用户记录。5 q+ ?- P* m. J7 t; h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
1 g# U K6 B+ ` g' iif(!($delete)) {
, h _- N9 ~7 wprint "Useronline Delete Failed > ";
8 V u0 D: ~4 Z+ b) ]}下面我们解决数据库中不同IP的问题* g* i: D, @1 L7 d/ w; T3 w
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用# ~1 e4 @# K5 B& x) e* ^
mysql_num_rows(query);来统计用户,代码如下。3 U1 l3 _5 {+ e0 a" C
$user = mysql_num_rows($result);最后关闭数据库。
! Q! j7 V+ I3 S- {2 [; Vmysql_close();显示在线的人数。, {1 d/ ^& H+ s; N1 Y
if($user == 1) {
, b& x% ~0 p; ?% t3 X! `, o" Pprint("1 user online\n");3 `- O, f b8 s' v' S
} else {
) x! ^1 m5 H+ ^3 \2 }* uprint("$user users online\n");* a& b4 J1 O4 q. V8 X
}最终把上面代码写成一个PHP文件如下。% t6 c, |8 K1 q1 o5 ]! P' c
<?php. s" v [) Z2 E C+ C
//Put your basic server info here
# m# |: L2 A6 A" X$server = "localhost"; //normally localhost# l. B2 q/ M# s; \( T* g
$db_user = "root"; //your MySQL database username- S" ^. J, q- ]
$db_pass = "password"; //your MySQL database password
! b& q0 s* G+ i: V* a+ X$database = "users";. M; ^# \9 m- H3 T
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* k8 i, P4 a6 m
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 Y3 n# j4 H3 Q& l9 r" X
// $timeoutseconds seconds): `. e9 g9 U8 C& s
//this is where PHP gets the time
/ ]3 I5 B! w& r0 V$timestamp = time();8 ?% L4 I- s* d: V3 i! c5 p
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) `) d) O# c* L! H& q: m
$timeout = $timestamp-$timeoutseconds;
2 }8 Z7 O' A& \//connect to database
# e" l" L* Y0 E0 x3 q. c/ zmysql_connect($server, $db_user);
, K8 E0 j" J0 j7 V2 P//add the timestamp from the user to the online list
/ ~$ L# P3 d3 Z* E* T, l7 ?$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* R% ^, W! x9 ?; o6 h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 b5 R0 G5 m9 B2 l0 rif(!($insert)) {: Z( J3 X9 g' Y1 s+ a/ h
print "Useronline Insert Failed > ";
3 G6 g6 S; p$ ~0 a' G}1 b$ I5 g* H8 x! e
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6 M3 R2 N( u8 x5 X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");% u _6 P; O* }. v5 i; q+ |# S
if(!($delete)) {
0 \5 m5 K, d' U8 o6 t# U% R8 Y) v% jprint "Useronline Delete Failed > ";
. F- F8 K, ^( q}8 \" E6 h% |2 D
//select the amount of people online, all uniques, which are online on THIS page: n# Y9 w# a7 z" w
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 G, Y& ]. m% w3 [3 d
if(!($result)) {/ L$ M, K0 k8 m) r# d" [9 T( T
print "Useronline Select Error > ";0 \) q2 Y: Q1 A; o$ K
}/ ?9 @4 i; t# C) @
//Count the number of rows = the number of people online
# i" Q$ S) G; k8 n, o$user = mysql_num_rows($result);8 C' F) ?7 Z2 b3 U I! C ?
//spit out the results$ x( m1 R7 M8 B2 T
mysql_close();
& c# s V. H8 g" y! a; @* L" F# E1 nif($user == 1) {
( }+ X3 L0 M+ E2 T/ Yprint("1 user online\n");
& a5 M1 G8 C# T9 m* M* d4 x} else {- p9 K( c" [" J- Z' s" B
print("$user users online\n");( L3 a. l" t7 [5 n5 n2 O
}
# y3 f# \: i$ _ x* H& o/ q?>
) v0 a5 e3 k" J- |$ M3 s , d$ ?# Z+ L" p, t7 j* v
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。2 x" t+ v$ X( `3 o" C6 C' G
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ J% [& T/ N+ w6 h% E5 I' ?
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
4 Z% N0 `9 \6 \8 S当然啦,这两款主机也是相当不错的。+ R$ u8 Q0 e+ y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
) V1 ~+ R7 \. n8 v) |标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年; ]. X4 o/ @9 Q; m
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
4 {6 I4 M* m% @4 e5 s' z. I6 w" E空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
( i0 d* V3 K. {3 S& N; r自己加QQ去问吧。 |
|