
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
+ I+ {; _$ Q( z6 e. b我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。! v" q9 ` X5 l. Y, t
首先我创建MYSQL数据库表。3 ~3 }+ G& c, a$ a0 l) [
CREATE TABLE tablename (
! S) d# H9 h9 c. Z/ q, ]1 L8 _5 Y3 sfield type(max_length) DEFAULT 'default_value' (NOT) NULL
$ L+ U1 {' q+ _, u& @}可以使用的SQL语句。/ f, O$ d, ]% h3 F) n
CREATE TABLE useronline (4 ?$ b' w/ p$ a) k0 j, M) g
timestamp int(15) DEFAULT '0' NOT NULL,
4 M/ r0 Y; l& g9 k6 y% pip varchar(40) NOT NULL,
0 u( G- j1 i) U, X6 vfile varchar(100) NOT NULL,( J4 Z" {- V" ~; @/ Z% L
PRIMARY KEY (timestamp),- j3 ^- ^4 C3 h; q* Q9 l! k
KEY ip (ip),
5 L5 o. {) {! `! w4 @$ p9 I8 LKEY file (file)
2 L) l* b5 G4 `/ }8 [);下面我们是PHP脚本,首先我定义MYSQL的信息。9 X6 S$ c M% s
$server = "localhost"; //你的服务器 P' j3 d: ~- x9 @8 U
$db_user = "root"; //你的mysql的用户名
+ ]. y- x# @, ?! A- S7 p7 `$db_pass = "password"; //你的mysql的密码
6 z/ \6 d6 u, T6 E( _$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# `1 n, ^) D0 s' P5 e+ a* A1 a
$timeoutseconds = 300;取当前时间。
9 d5 t+ d9 W S7 ?. i& y$timestamp = time();上面的完整代码:
4 t& S% B1 j/ Q# U" A% ?<?php
+ O. v0 f: l |5 h! m* y4 [$server = "localhost"; //your server: e8 `2 S* X/ u# g5 u. d5 t4 L8 J/ R0 H
$db_user = "root"; //your mysql database username1 u- O# i- J: t8 w+ K, ~
$db_pass = "password"; //your mysql database password if any
5 A- ?- T. j; a$database = "users"; //the db name* U) I0 l8 h3 ~; O+ {
$timeoutseconds = 300;//timeoutseconds limit
& V7 U0 g8 O* u- [( j3 R' P//get the current time0 s( ? m3 `* Z, v
$timestamp = time();
& H ^7 V, D3 f, z' `! x//calculate the lowest timestamp allowed
; Q; e* ~) ~ \! g# q7 M& C$timeout = $timestamp-$timeoutseconds;
' `: E+ V& X* F9 M. M: a9 G( t?>连接mysql9 Y) L1 ~# k& \! R: B8 e. M9 _
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ l* o8 S P P) k/ F) U* Gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* I- e% N7 z5 O* d) W' F, {mysql_connect($server, $db_user);查询数据库的代码:! E+ u+ E* s- c
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 N& y' Z. a' c* N, ?; m6 f# t
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) k$ z# m1 F. `( f- S+ U/ b1 O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# z6 b. s- h: t |
如果用户用错误信息的话,这样处理。
o5 m" Y, q# cif(!($insert)) {
+ z( \% U5 G$ {) o2 O3 w A9 {% Kprint "Useronline Insert Failed > ";' B6 \7 B% w; ^
}然后实现当超过设置的时间就删除该用户记录。# \# S# v. \6 M
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
/ _% o7 L* G) nif(!($delete)) {# ~/ y) ?) u# H
print "Useronline Delete Failed > ";4 Q8 i) s/ W$ Y9 h& t
}下面我们解决数据库中不同IP的问题& B' Q. Z0 }( c, T* H2 |& C6 M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
0 Z9 `' a" G/ l- j4 ~! jmysql_num_rows(query);来统计用户,代码如下。# {. C1 l9 m% W
$user = mysql_num_rows($result);最后关闭数据库。 Y, ]* _* v, G) ^, f
mysql_close();显示在线的人数。1 N y$ v! l3 c" v* n1 s) x
if($user == 1) {
, N! a1 C* i5 M8 c0 jprint("1 user online\n");
; u3 u/ p3 A8 |3 Y; T* c& y% ?} else {
0 R7 h" D. `6 mprint("$user users online\n");
0 v' w& B U# w7 r}最终把上面代码写成一个PHP文件如下。( a$ ~# x6 l! ?3 T5 c6 ?
<?php; i* [% I3 `; b" r, N1 [" u) ]1 V
//Put your basic server info here
4 ^7 c$ O3 {( E8 e' l5 d3 e$server = "localhost"; //normally localhost5 t9 s% b: S- |+ g8 ~
$db_user = "root"; //your MySQL database username: }$ L2 ~" e: g E. s
$db_pass = "password"; //your MySQL database password3 I, G/ k6 S$ z- {, M0 |
$database = "users";
% W8 {1 L' q4 s8 h$ u* s$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are. A3 P5 Z; Q+ h" z* Z
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last' c' ]) K1 l2 d) E
// $timeoutseconds seconds)4 u, x4 m; {9 M9 E3 f+ \
//this is where PHP gets the time$ C4 k% N; i$ J; N
$timestamp = time();
. l2 j5 P- r. w+ L9 s//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 C/ ?- j( |. b S3 A$ p! B2 [
$timeout = $timestamp-$timeoutseconds;
) j, A. ^% s9 |0 o//connect to database3 a1 P1 _" D( S/ f; U6 n
mysql_connect($server, $db_user);
3 \/ F7 ~) z- l8 N, ]//add the timestamp from the user to the online list$ L9 C" G O- |4 K5 v4 I3 C3 q7 x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES; o7 X! B) V# W8 U K( h5 r
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% ]) C. W: x2 _4 p, l
if(!($insert)) {
: F) { s: |3 {print "Useronline Insert Failed > ";0 p3 D! E4 j t) b. ]
}
. A& a9 p' [' U//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
6 Q0 R& E, [2 F( g" `$ K! l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
, k, Y! Q( K8 \9 G& Iif(!($delete)) {
0 r' v% ^% Z7 ?0 Lprint "Useronline Delete Failed > ";
$ L2 k) C- I/ o$ a: F}
0 d, t3 L: C3 n9 @//select the amount of people online, all uniques, which are online on THIS page( C# d/ u3 a4 H6 c
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
) w+ D9 x1 X! U4 nif(!($result)) {
& H" }! R* X$ h ]& o8 u; ^print "Useronline Select Error > ";4 w, Y( ?% O2 k: u
}8 B7 _1 X5 L; g( T _) y7 |( T
//Count the number of rows = the number of people online6 n5 A c: w# {) E
$user = mysql_num_rows($result);
; u' D/ N: O3 ? |% V//spit out the results [& z A' f9 T! `' I
mysql_close();% t& d- x) r, \6 F5 Q+ Y; ~: s
if($user == 1) {0 ]( m" S( W4 T. Z4 C% V! x
print("1 user online\n");" _% k0 i- J9 c
} else {
+ E( ]( S, G# v, Gprint("$user users online\n");
6 h& _& G: H* J+ J& B}
3 x" k% }' r7 `5 q j% h& ?& s0 s3 ~?>
4 m& N1 O" |& |' @1 H, e$ G ) R* k4 I* Y! P* r! @" l
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* D8 z- v+ }- g时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。1 d4 T: o; x$ s2 `
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
; V" r2 P$ R* R7 T/ U当然啦,这两款主机也是相当不错的。! b3 t* p" D. y6 Y; G, u$ ]
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年; Q7 c( @8 X' u& o/ U2 ^
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年2 n6 R: C, `+ z6 M. B2 l
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! _8 H0 v) U9 [5 M4 E) M. F
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# Q# y; D+ R. p6 v" i% F/ p
自己加QQ去问吧。 |
|