返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
. y( O) I4 ^2 K! U" H我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
6 k+ s% w+ f* e- w% ?首先我创建MYSQL数据库表。, ?! W/ U, J; h8 ^5 I
CREATE TABLE tablename (
! ^2 q" f# z: @* Vfield type(max_length) DEFAULT 'default_value' (NOT) NULL5 N: D7 R+ O# L" X
}可以使用的SQL语句。
# L5 E1 N3 W- x. S, [CREATE TABLE useronline (
: N+ Y6 N! w5 z* Stimestamp int(15) DEFAULT '0' NOT NULL,  C8 x' N8 u' r( `
ip varchar(40) NOT NULL,
: {' T' H# W. k$ S* C+ J5 \1 sfile varchar(100) NOT NULL,
, }( g+ r' |1 C; N# W  uPRIMARY KEY (timestamp),
: H2 `7 I9 [5 O( }/ uKEY ip (ip),( h/ w( U1 M3 k0 D
KEY file (file)
8 [; G! x9 u/ }! \& l! \);下面我们是PHP脚本,首先我定义MYSQL的信息。0 W* g$ o  V1 p6 Z) r& L
$server = "localhost"; //你的服务器
/ {9 S3 O0 w3 o) K: x* S% p( j% A$db_user = "root"; //你的mysql的用户名6 i6 S; H2 [7 U8 ]
$db_pass = "password"; //你的mysql的密码. \$ ^* r2 \% @% n7 R
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
9 j- w2 w% N" h* I2 k$timeoutseconds = 300;取当前时间。/ v& K! I- R3 z2 q0 d4 W
$timestamp = time();上面的完整代码:
  k- A1 A8 z- V+ m<?php
2 G+ ?0 H& r- W2 O( i7 j8 F$server = "localhost"; //your server
8 X& n* v' d9 z  H# e/ v1 d$db_user = "root"; //your mysql database username1 t; P1 A0 J4 V7 C
$db_pass = "password"; //your mysql database password if any
' O& S7 a. b7 @4 W, q$database = "users"; //the db name/ _7 ?8 Z2 Y5 F, N$ o
$timeoutseconds = 300;//timeoutseconds limit/ W5 Y3 S! ?" v4 f6 A% ]$ j
//get the current time4 T! N4 K  L2 N. ^" }
$timestamp = time();  |+ k7 P6 N: A
//calculate the lowest timestamp allowed" m) G' f6 {9 y3 h
$timeout = $timestamp-$timeoutseconds;, Z/ M, D9 [& k* c; a  |& P! W/ \: C
?>连接mysql6 F. p8 D+ ~9 M$ b& D' T- c; D
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
& @" k. K2 Y0 [$ \7 ymysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 p- [# S5 g' b6 n, l" g6 Omysql_connect($server, $db_user);查询数据库的代码:7 a4 _5 ?: |! T* C1 O$ n
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
+ w( ]) d$ d* n( Y8 z5 c& V$ ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- |4 q! A6 |) `# I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- K  u( l5 p& M, H4 p. I
如果用户用错误信息的话,这样处理。2 ^$ [: F! C1 [1 V8 V; Q
if(!($insert)) {8 x0 U% X/ i1 F# r  o# {, S
print "Useronline Insert Failed > ";
' k$ G# h7 P- l1 Z' z% }}然后实现当超过设置的时间就删除该用户记录。
! }6 m% v: q3 i2 ?, S- G7 r$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" }4 J3 J& C" o
if(!($delete)) {
5 k; Q/ ?4 g1 ~$ Rprint "Useronline Delete Failed > ";
7 W6 a* K. [0 c, V+ b}下面我们解决数据库中不同IP的问题
) C& s6 w9 ]- |# h' Y# e2 N$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用, A# [8 R+ I- Q( u
mysql_num_rows(query);来统计用户,代码如下。
2 q/ q) A/ b1 k0 q: A$user = mysql_num_rows($result);最后关闭数据库。
6 {* O: |$ J" k( o' C) ]mysql_close();显示在线的人数。# u- J' u- J/ F
if($user == 1) {/ }$ Y) O" \2 j1 g, }9 i
print("1 user online\n");
1 }5 W1 H7 _, B2 k- W3 S, M+ z} else {8 v* V. f) l" a4 \: }
print("$user users online\n");
) G" t1 ?" F& h! W* `5 W}最终把上面代码写成一个PHP文件如下。
, L& p* s: t9 {. Y1 w* O<?php4 j% i6 }) k5 D
//Put your basic server info here
6 ~/ k1 J, K/ @0 _8 ?1 D) @7 p$server = "localhost"; //normally localhost' ^) ^9 h- n9 a" m5 D* C2 E1 G
$db_user = "root"; //your MySQL database username  {; o/ h* l" l' E* Z9 ?3 M3 C
$db_pass = "password"; //your MySQL database password
8 y  G. C/ N2 y0 P$database = "users";
$ x8 D/ c0 b0 Y" ]7 n4 x$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; w* X# |' L' V5 c0 K
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 K5 |2 B; T  Z3 |5 p// $timeoutseconds seconds)
: ~6 [) `; g) M, r//this is where PHP gets the time
* m8 D9 [' G" Y% \9 [5 Y$timestamp = time();
- ^- \* m$ v6 c3 q0 F//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
- Y4 l1 i* i( T. `2 _$timeout = $timestamp-$timeoutseconds;
0 K8 D$ ?- [5 }: w" E) o+ F//connect to database9 o/ h, d2 a5 y. R1 b8 X0 Z1 \
mysql_connect($server, $db_user);
, {$ ?6 ]2 d' ?9 \; G. X; Q, Y//add the timestamp from the user to the online list6 `8 l( S6 ~( @& p4 n
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% n  @6 C1 |6 g3 d
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; V4 n( u' b' F' |if(!($insert)) {
5 d! {* ^1 P7 p! p( ]5 w: J+ s' |print "Useronline Insert Failed > ";
3 L# k! y5 W' m( ?) A$ d}
- d% y  J' |- j0 F1 H- H' J1 N//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.* N3 S' B& c6 ~
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. o. `! s' J5 V& C7 b: Lif(!($delete)) {
1 Y( V7 A0 w; tprint "Useronline Delete Failed > ";: J( E: N8 l/ S$ H8 z/ e( M8 I, Z
}
- H. O  \) Y, K) x/ \# Z//select the amount of people online, all uniques, which are online on THIS page
. R) U9 ?7 o+ Z; K$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# H# w) T7 P$ B1 G& p( D9 d; U
if(!($result)) {
! C5 G- ^+ m9 g* ~0 C2 w/ g/ f: tprint "Useronline Select Error > ";
) t, g6 R* p# p" d1 l}( Q+ K2 y2 Y1 [/ \! L" }+ m' W
//Count the number of rows = the number of people online6 [7 q2 j; P0 }' F1 f! A' n
$user = mysql_num_rows($result);# k% `7 x4 X# S- F( L1 N5 o
//spit out the results
  K& W0 c" B9 `' a$ Rmysql_close();
1 l) H4 g& ^  Y7 a1 tif($user == 1) {
2 J1 `1 b3 F5 D8 c- G3 J, Zprint("1 user online\n");
6 A1 @# m) E9 J6 x9 T} else {
( f& `: C" S% }' C1 qprint("$user users online\n");( R6 _! v: P) g
}$ b6 t' \/ w: j; m! [
?>
# v. r8 U  l1 V2 e+ g3 n2 `
5 P; S2 B* P+ E+ j% b以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。9 Z2 i: A" X; J5 ]
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。7 X. i% V" q' B2 F0 ~4 u6 ^5 X
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& K2 B5 f1 Q9 i' W' A& q当然啦,这两款主机也是相当不错的。: `4 l, O- L/ e0 Y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
4 S$ b  e, s# w* V标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 }  l& L( J) Z8 s0 u, c" C; K5 `提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ [* P! D5 ~5 K2 r空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
% O: _4 G3 H2 O4 a' F! y1 P自己加QQ去问吧。

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