返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 h9 f( S$ j" z
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
9 t( ^# M$ q7 R" p+ h首先我创建MYSQL数据库表。
9 h7 z- x: i  ]; O2 M) L2 s$ C4 S! {8 FCREATE TABLE tablename (
/ w3 c) S6 t% F; @field type(max_length) DEFAULT 'default_value' (NOT) NULL
. j" e* K) ]( i6 R% n2 y% t3 p}可以使用的SQL语句。4 k* E/ S% o1 v
CREATE TABLE useronline (
' e) Y' r8 i1 A/ l+ i) P9 mtimestamp int(15) DEFAULT '0' NOT NULL,) D+ D  t( J6 |+ i  K' [' Z
ip varchar(40) NOT NULL,
8 I8 H% M7 ~) m! [' \file varchar(100) NOT NULL,
3 a+ W! K/ I% n8 fPRIMARY KEY (timestamp),: t5 s2 r4 o$ R$ y0 D
KEY ip (ip),
$ m% T" l! p! ^$ d! GKEY file (file)
5 o1 A5 j* U- v6 F);下面我们是PHP脚本,首先我定义MYSQL的信息。
& [# ]5 v; I0 o: O  r4 R: V- R$server = "localhost"; //你的服务器
8 L) a+ B5 q7 l  [6 F. u$db_user = "root"; //你的mysql的用户名
9 Z1 @2 M% B8 w+ I9 R& E$ [1 v$db_pass = "password"; //你的mysql的密码
0 i: X; R' V6 m4 u8 a/ Z$ i5 a3 S$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; M* h. W  n7 j$timeoutseconds = 300;取当前时间。
% t( r8 F5 e9 Z* q9 Y$timestamp = time();上面的完整代码:
( L% ?2 {! a* ~8 [( G( H/ a<?php
" G( |) q2 w" J" u. {' ~$server = "localhost"; //your server- }) Y5 g- @1 K" q4 _" U8 ~
$db_user = "root"; //your mysql database username. Y# Z! e4 @) Q' C  |8 }3 `
$db_pass = "password"; //your mysql database password if any* _9 P, V/ @9 k2 z/ f  @& \% g3 K
$database = "users"; //the db name
' a- k- e+ D8 m) |; u$timeoutseconds = 300;//timeoutseconds limit7 d) m, ^$ k- {5 \3 ^
//get the current time, e( ^) r# c- |  l7 L
$timestamp = time();0 p9 _) D* I( z
//calculate the lowest timestamp allowed  h# z0 Y+ ?8 Y5 p
$timeout = $timestamp-$timeoutseconds;
3 k. ~. K( @$ ?7 B% }* `6 j4 f$ Q?>连接mysql+ A8 e2 o, _. w" b1 u8 {
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。8 g# j  r  l, S8 x) ^3 ~' W, \
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* V. Q/ c+ i2 e6 `% pmysql_connect($server, $db_user);查询数据库的代码:
- J. f' J% m( q4 amysql_db_query('database', 'query');我们只要有访客就要增加一条记录。4 p4 g+ Q, J' ~: i  ~% A( q1 z3 b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES8 r- n# H) b4 K7 Y& V
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- ]  X' }; P: T$ r4 r( o
如果用户用错误信息的话,这样处理。
5 c2 f; o: E) ?6 Cif(!($insert)) {
% ?  D9 D  B: G7 P5 P, ]8 kprint "Useronline Insert Failed > ";( I/ h* T) ^3 d# k
}然后实现当超过设置的时间就删除该用户记录。
' Y3 K, g7 u+ `- C1 p" o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& @9 X3 _4 T" _: ]' \3 n: i+ tif(!($delete)) {% A- K- h( o4 S+ A
print "Useronline Delete Failed > ";: k. V1 O7 ~. N* f8 j/ {) U: a  @
}下面我们解决数据库中不同IP的问题
2 n) R& V. z* V$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用: i% A/ `( o! {
mysql_num_rows(query);来统计用户,代码如下。
$ M  o( M+ ]$ [6 G$user = mysql_num_rows($result);最后关闭数据库。
/ W" S+ I3 k: Y* _mysql_close();显示在线的人数。
6 R; ?0 C2 b% a) Z" jif($user == 1) {& c; i2 o: w: M* r
print("1 user online\n");, o6 F8 `, g/ k9 j& v
} else {
  l" g6 d' z, D! r( H+ pprint("$user users online\n");
9 t0 x. W$ J. c- a}最终把上面代码写成一个PHP文件如下。
' h2 y$ T& \8 ?! n7 ?% ~<?php
7 Z9 @: J' e$ A//Put your basic server info here
0 P* M! n- k; ~$server = "localhost"; //normally localhost" n( e$ x: a' [& B% F5 p" d
$db_user = "root"; //your MySQL database username- M# |5 r( R; ^$ f
$db_pass = "password"; //your MySQL database password( l$ j: J6 z- v' r% D* O4 t1 k
$database = "users";8 y5 D3 c6 m$ @$ U+ F, s' j5 [. N- g
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
) w. p1 N% O6 V6 p// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
4 {& X  Z, [6 F- c5 A# t// $timeoutseconds seconds)- g  u; }' P  s7 u. T) ]; y
//this is where PHP gets the time7 e, E5 ]: ^# l# R0 f* h5 b
$timestamp = time();
$ x9 C  W& Y9 v8 x. {0 |; W//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
2 \) ^, p& i1 K8 P: [$timeout = $timestamp-$timeoutseconds;
# C9 B( I" v. M$ e% }1 Q* s1 g//connect to database
" N$ H" e5 e; H* r4 n8 i$ r8 _mysql_connect($server, $db_user);; \% S3 Z. P# i2 u
//add the timestamp from the user to the online list
0 b) ~. R: L7 @# i) C8 q9 J6 I( e$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 B& T8 @4 H( R" M3 w& Q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 O% m4 ~: b5 Q* H9 Fif(!($insert)) {
6 k  p% [4 n# i% J) J# Gprint "Useronline Insert Failed > ";7 ~* d1 b) C& K3 q5 N! N; F
}& h! H; Y$ s, h) W4 [4 }0 ?2 F1 v
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
/ p( x0 b! n0 i2 c( U$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# Z' @4 D! I- s1 V' f# W/ {if(!($delete)) {
( Z! K" [/ X- }- M6 T! Uprint "Useronline Delete Failed > ";5 E- R6 x2 S5 |
}) k% P( _. U  U9 e0 B
//select the amount of people online, all uniques, which are online on THIS page7 Z# Q: l& D9 H! l% b( b! e, \1 E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
. ?; F. M- c. \' ?) k4 @# s& Zif(!($result)) {8 K9 n, w1 C+ [; ^
print "Useronline Select Error > ";
9 _' b4 A6 f9 |' A- f0 w}
. \( W1 J7 g* e4 [8 h+ w! E! |//Count the number of rows = the number of people online$ L9 Z8 s3 ?+ R( O* r9 F! ~, a4 Y  K
$user = mysql_num_rows($result);
6 {$ ~/ N9 x; `' B+ l//spit out the results7 Y4 n1 l8 P8 y. A- u1 I0 w
mysql_close();
( R9 O0 h* a- \$ z/ ?6 D. e$ zif($user == 1) {5 t  Y6 F8 _1 f, ~$ L& [
print("1 user online\n");" Q$ z8 v; u: d! h; n
} else {
- M1 F, {# E' A: R1 U: n3 Jprint("$user users online\n");
( I" U0 g% S4 R}
" A  P! t4 m. H6 S* y  k* g?>
% v2 Q" g6 Y5 e1 ~- c& |% h1 U
. W% e! [1 l) |6 W- J' v$ @1 f以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
- K' \) h0 z) c) [) I" ]时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' L! u7 r3 Z4 c我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
4 Y8 J  B: i; U& L% c# v当然啦,这两款主机也是相当不错的。
' ?) b) a& }& V( u智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" u) z# M" d1 b2 @0 H
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年9 V- `$ L/ [9 `* }
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
/ `0 ]/ W9 e) T3 {8 K空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55. @6 k1 x& x9 X6 P* o$ j" p  ~
自己加QQ去问吧。

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