返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
4 ~$ [# [+ ]4 K, b我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
' @0 A, \+ Q, h. B+ W' X首先我创建MYSQL数据库表。
3 u: r/ V5 T$ E& x" k+ Y9 C4 p4 fCREATE TABLE tablename (/ s" U. {+ t1 H* T0 b/ a6 W4 R
field type(max_length) DEFAULT 'default_value' (NOT) NULL* a; J) R& }5 _: r
}可以使用的SQL语句。6 }, {- C! l( e# h. }' v7 g, r+ L
CREATE TABLE useronline (
) I5 E8 v8 n; E$ F: e( L/ ctimestamp int(15) DEFAULT '0' NOT NULL,! X( [' d. x8 c8 c' R
ip varchar(40) NOT NULL,* D/ |. X9 r: ]+ }9 Y' ?
file varchar(100) NOT NULL,
/ W/ A5 Q9 x) H: EPRIMARY KEY (timestamp),
- P$ r! [& k3 b/ Q% ^9 FKEY ip (ip),
& o$ w! Y) Z0 a; dKEY file (file)6 F' R2 \0 ^& x
);下面我们是PHP脚本,首先我定义MYSQL的信息。
4 V( M6 T7 Z& `9 \$server = "localhost"; //你的服务器0 i" }3 b1 q  ^7 ]  }
$db_user = "root"; //你的mysql的用户名
$ M  O+ P) Y% ^# o, }$db_pass = "password"; //你的mysql的密码- g6 a/ f7 a3 @' V5 H8 ?
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
/ |2 Z, Z, u9 z/ U$timeoutseconds = 300;取当前时间。
$ T! i: }/ w" J% d+ ]  E! T% J; z$timestamp = time();上面的完整代码:) N% ]9 K1 o6 ^+ R! `
<?php
$ e8 l3 Y0 ]( Q6 u4 v$server = "localhost"; //your server* ^! w3 \5 h9 i! b
$db_user = "root"; //your mysql database username
+ _: f/ `: N0 Y$ s9 A$db_pass = "password"; //your mysql database password if any9 W3 O  X% D& t) W- {
$database = "users"; //the db name
5 C6 k- f% _" x( U" M8 z1 _6 l$timeoutseconds = 300;//timeoutseconds limit
+ t( ^3 Y3 t, {. o//get the current time
0 i. M0 q8 A  b$ i( r8 [$timestamp = time();
1 i4 i2 E: U) \' S1 {//calculate the lowest timestamp allowed9 J8 b! `" u+ y7 @/ V% J2 N5 A! {
$timeout = $timestamp-$timeoutseconds;& C' k) M: C5 U
?>连接mysql
. x3 R# E4 j" w" Q/ Amysql_connect('localhost', 'username', 'password');也允许使用变量形式。. a* Q+ F, c5 }3 ?
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 W/ _0 d2 M. g7 w; imysql_connect($server, $db_user);查询数据库的代码:- I) d" E! X% P: K& }1 X
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- h- ]  @/ ]1 s) w7 N& {& I9 |
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' U! j. y1 L3 ]& C6 J# w
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 r/ _9 a3 e" l9 {0 k# ]8 H& i如果用户用错误信息的话,这样处理。8 C: ]& I* p/ d% s+ z
if(!($insert)) {- q/ F1 C1 J: C# t6 b
print "Useronline Insert Failed > ";
4 n0 q; a- P! A) V! z8 y/ d}然后实现当超过设置的时间就删除该用户记录。
) E1 J. j8 `, u2 u6 K$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 ?' ^$ N3 j4 d: y- k5 T2 C, i1 [  eif(!($delete)) {
6 E9 R+ W6 j- _# `% `' Tprint "Useronline Delete Failed > ";$ Z, P- O7 o# i# q: \
}下面我们解决数据库中不同IP的问题
' J4 s5 L! K  C4 m$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用! [8 U4 c3 a( l0 ^+ J" [" K
mysql_num_rows(query);来统计用户,代码如下。% b" U/ q: L: Y; T+ Y; X4 y3 K5 B1 ]
$user = mysql_num_rows($result);最后关闭数据库。# Z+ P7 c' r/ _7 X* v
mysql_close();显示在线的人数。9 ?+ \( N! C. t8 U  _
if($user == 1) {4 j( K. l% w( Y) s5 b8 |
print("1 user online\n");( V5 O3 Z4 n) `9 Y3 A' h; [
} else {$ ]6 J/ M7 p5 o5 }
print("$user users online\n");, k2 _+ ?2 b0 J7 f# ~+ x9 G
}最终把上面代码写成一个PHP文件如下。
' p/ s, b1 k& ?4 E! b<?php
, I& V, @& J& B# x4 d* ~. R6 V2 ?3 R//Put your basic server info here
0 {# m: Y+ b, `2 Z8 ]3 h6 L* \$server = "localhost"; //normally localhost4 v' L/ U" F8 o
$db_user = "root"; //your MySQL database username
/ G& K* B1 o( q$ P$db_pass = "password"; //your MySQL database password
3 P$ y1 Z- @$ _1 y+ V) Z$database = "users";
, y# H  Q) `% F5 O+ i0 F5 C4 W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are1 L5 p: v/ E/ u
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. Z+ u1 K: |1 L) n) Q$ K$ {6 s// $timeoutseconds seconds)- [4 z4 r0 Z+ M+ y4 r
//this is where PHP gets the time
* l1 Y; C  H$ O$timestamp = time();
( ?" G/ a4 }) @6 |0 N- P7 y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
4 t3 G; t. [+ q7 J$timeout = $timestamp-$timeoutseconds;
$ ?5 a: K1 \0 [; K//connect to database9 d/ N  H4 N/ Z7 r* n0 @
mysql_connect($server, $db_user);
5 H& a7 ^3 Z" h//add the timestamp from the user to the online list. u/ A" g# p- f( b  L+ Z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 }2 ~9 }. p; c0 ^  O8 ]('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# p+ W% R+ @7 m6 ?/ Y
if(!($insert)) {
7 u3 O' w( D) o" d6 dprint "Useronline Insert Failed > ";6 n. G; d  }- E' {+ S* r0 `' o
}
: ~5 h. L/ O/ K( X7 ^4 p2 \2 L//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. T, a% r$ d2 o" `- V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) w- S$ @- Q. ?$ }9 k- w6 jif(!($delete)) {9 g2 {* B7 A7 M. y4 J( u5 a
print "Useronline Delete Failed > ";2 n# t% b; D: e+ }6 n$ C6 E& |7 p% v
}% U8 ?. J3 ^6 H2 @
//select the amount of people online, all uniques, which are online on THIS page- t3 \3 a: T& R; }+ K8 R+ M' |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");' h+ N* q+ Z" [, t! s( ~3 i
if(!($result)) {
7 L9 S5 ]0 e9 |* h  T1 m0 eprint "Useronline Select Error > ";1 g2 {8 ?" J: W) e! B
}
. M1 s; z/ w4 Q% y8 f! t- o; `8 d: j//Count the number of rows = the number of people online. L( C1 t& ]7 J7 @6 j! S* [! i
$user = mysql_num_rows($result);2 a. I4 q# y2 `5 N/ ?2 q( j
//spit out the results
8 r9 g5 X+ I, \, Emysql_close();
7 S2 C4 M( Q" p2 lif($user == 1) {6 D( `  p, @6 n, q7 k# b  n5 I
print("1 user online\n");
* T$ `7 L9 w% Z( [} else {, k$ c& v! S3 d* w) x
print("$user users online\n");
" G& W, Z. G+ b}
8 e7 {1 q4 \; Q& \5 d: S. s: I?>
' N4 O- s  K2 i9 [  k+ t7 |3 Y7 N4 F4 ^; ^1 y  w0 S: z% [
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 [3 c' d* {% ~+ M$ [# v4 R7 B时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
4 p, p3 z0 l; }. {" A* D我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。( E. T1 C" \) e, p  g& ?3 H
当然啦,这两款主机也是相当不错的。
" p; \) k) {' }+ m. _0 @智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
1 o7 u  U& A( h6 Y: C4 b标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- j" O) U! ~4 Z9 j' h6 L提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 f2 ^! k# N, ^空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55$ V! {5 @1 x: B: }5 G9 t" p0 z
自己加QQ去问吧。

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