首頁 後端開發 php教程 计数器详细设计_PHP

计数器详细设计_PHP

Jun 01, 2016 pm 12:27 PM
connect ip 計數 計數器 設計 訪問 詳細 頁面

计数器

概述:
此设计可以在本计数器基础之上设计计数分析程序,可以对页面访问、ip访问次数进行分析,并形成报表。
一、数据库设计
数据库采用mysql
相关文件: createDatabase.sql 创建数据库
createTblCounter.sql 创建计数器表


表名:tpCounter(table of pages counter)
字段:
名称 类型 意义
id Int (10) auto_increment 序列号
pagename varchar(20) 页面标识,缺省为页面文件名
count Int(10) 计数值

表名:tiCounter(table of ip counter)
字段:
名称 类型 意义
id Int(10) auto_increment 序列号
ip varchar(20) Ip标识
count Int(10) 该ip访问次数
date datetime 最近访问时间
pages text 曾访问过的页面id,用’|’分隔

二、详细说明:
1、 可以对每个页面进行计数,也可以统计每个ip访问的次数,最近访问时间,以及每次访问的页面,需要两个表;
2、 统计网站访问人次:tpCounter中设置一个站标识[建议用pagename=’0’标志];
3、 每次打开页面时都先检查session,若不存在该用户的session,说明是刚刚开始访问本网站,此时创建一个此用户的session,对网站计数增1,对所访问页面计数增1;[打开或刷新页面时]如果该用户session已存在,网站计数值不增加,但是页面计数值每刷新一次都要增1;
4、 关闭页面时,检查该用户打开本网站页面数是否为0,是则销毁该用户的session,否则不销毁;[此功能不需编写程序,服务器自动执行]
5、 在访问时如果页面在tpCounter中没有标识,自动在表中插入一条记录;
6、 pages是一个文本类型,记录了浏览者访问的时间和访问的页面,其中包含类似这样格式的字符串:
||2001-5-1 16:00:00|1|12|5||2001-8-3 10:12:5|4|9|
表示此ip在2001-5-1 16:00:00访问了1、12、5页面,在2001-8-3 10:12:5访问了5、4、9页面[页面的号从上一个表中获得];
7、 设计计数的文件(.php),每一个页面都包含这个文件,这个文件中包含以下的功能:
1>session检查,
2>连接数据库,
3>计数[参数为 页面名称、ip、当前时间],
4>读写数据库,
5>断开与数据库的连接;
8、对所访问的页面的记录采用如下方式:
用户打开一个新的页面时,如果用户session不存在,写入时间并记录当前页面,若存在,写入当前页面。写入采用附加的方式。
9、 网站计数在此头文件中,对页面计数在所计页面中。
10、每一个页面在包含本文件时,如果要对页面计数,一定要在包含之前使用变量$page_name,并赋值为页面的名称,页面名称不能有重复。

三、接口描述:
相关文件:counter.php

1/Boolean check_session()
功能描述:session检查,原来存在返回true;原来不存在返回false,并创建,并注册布尔型变量existing
入口参数:无
出口参数:布尔型
2/site_count($content)
功能描述:网站访问计数
入口参数:数据库连接
出口参数:计数值

3/page_count($connect,$page_name,$flag=true)
功能描述:网页计数,返回页面访问次数,整型,$flag是是否增加计数的标志,缺省true
入口参数:$connect:数据库连接,$page_name:网页名称
出口参数:页面访问次数


4/show_site_count(int type)
功能描述:显示计数
入口参数: type==1采用图形计数
type==2采用文本计数

四、流程
0/检查进入页面的权限
由于头文件需要通过引用才可以编译,因此必须检查是通过引用还是直接浏览
1/链接数据库
2/检查session,若不存在,创建session,进行网站计数
3/显示计数
4/进行页面计数
5/断开与数据库的连接[自动实现]

五、使用方法
所有的函数都包含在一个头文件中,在使用时,包含此头文件即可。
六、附源程序
/** counter.php v1.0
* by Amio 2001-5-1
* 描述:计数器文件,可以对整个网站计数,
* 可以对所有页面计数,可以对每个ip计数
*/
/** 接口实现功能:
* 1>session 检查
* 2>连接数据库
* 3>计数
* 4>读写数据库
* 5>链接部分的表格输出
*/
/** 使用方法:
* 此文件必须是包含在其他的php文件之中使用,
* 在引用之前需要对$inc变量进行配置
* e.g.:
* * $inc="inc";
* include("include.php");
*
* ?>
*/
?>
//session检查,返回布尔型
//true--此用户session存在
//false--此用户session不存在
function check_session(){
$existing=true;
session_start();
if (!session_is_registered("existing")){
session_register("existing");
return false;
} else return true;
}


//网页计数,返回页面访问次数,整型
//$flag是是否增加计数的标志,缺省true
function page_count($connect,$page_name,$flag=true){
$ip = getenv("REMOTE_ADDR");
$query=@mysql_query("select id,count from tpcounter where pagename='$page_name'",$connect) or die("invalid page query!");
if (!(mysql_num_rows($query))){
mysql_query("insert into tpcounter (pagename,count) values('$page_name',1)",$connect)or die("insert page failed");
$pidquery=@mysql_query("select id from tpcounter where pagename='$page_name'",$connect) or die ("select page id failed");
$pidarray=mysql_fetch_array($pidquery);
$pid=$pidarray[id];
$return_num=1;
}else {
$array=mysql_fetch_array($query);
$num=$array[count];
$pid=$array[id];
if ($flag)
$num ;
mysql_query("update tpcounter set count=$num where pagename='$page_name'",$connect)or die("update page failed");
$return_num=$num;
}
$pquery=@mysql_query("select pages from ticounter where ip='$ip'",$connect) or die ("invalid pages query!");
if (($flag)&&(mysql_num_rows($pquery))){
$parray=mysql_fetch_array($pquery);
$ps="$parray[pages]";
$pstr="$parray[pages]"."$pid"."|";
mysql_query("update ticounter set pages='$pstr' where ip='$ip'",$connect)or die ("update ip failed");
}
return $return_num;
}

//ip计数,返回ip访问次数,整型
//功能除了计数还有时间更新
//$flag是是否增加计数的标志,缺省true
//注意:ip_count的调用必须在page_count之前!!!
function ip_count($connect){

$ip = getenv("REMOTE_ADDR");

$visit_time=date("Y:m:d:H:i");
$visit_pages="||"."$visit_time"."|";
$ipquery=@mysql_query("select count,pages from ticounter where ip='$ip'",$connect) or die ("invalid ip query!");

if (!(mysql_num_rows($ipquery))){//新的ip
$pageStr="|"."$visit_pages";
mysql_query("insert into ticounter (ip,count,date,pages) values ('$ip',1,'$visit_time','$pageStr')",$connect)or die("insert ip failed");
return 1;
}else{ //旧的ip
$parray=mysql_fetch_array($ipquery);
$ipnum=$parray[count];
$pageStr="$parray[pages]"."$visit_pages";
$ipnum ;
mysql_query("update ticounter set count=$ipnum,date='$visit_time',pages='$pageStr' where ip='$ip'",$connect)or die("update ip failed");
return $ipnum;
}

}

//网站计数,返回整型,网站访问次数
function site_count($connect){
if (!check_session()){ //session不存在
$ipnum=ip_count($connect);
$num=page_count($connect,"website",true);
}else{ //session存在
$num=page_count($connect,"website",false);
}
return $num;
}

function displayCount($num){
$fileurl="countpng.php?count=".$num;
return $fileurl;
}

//显示计数值,type为显示类型,length为显示的长度,缺省6
//type=1图形形式
//type=2文本形式(缺省)
function show_site_count($num,$length=6,$type=2){

$outStr=strval($num);
for ($i=strlen($outStr) 1;$i $outStr="0"."$outStr";
}
switch ($type){
case 1:
echo " echo displayCount($outStr);
echo "\">";
break;
case 2:
default:
echo "$outStr";
}
}
?>

if (!isset($inc))exit;
$connect=mysql_connect('localhost','root','');//connect to server
mysql_select_db("damio",$connect); //select database ,database name is damio

$sitecount=site_count($connect);
if (isset($page_name))
page_count($connect,$page_name);
?>
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1243
24
首發649元 酷比魔術方塊小酷平板2 Lite來了:11吋護眼大螢幕+8000mAh大電量 首發649元 酷比魔術方塊小酷平板2 Lite來了:11吋護眼大螢幕+8000mAh大電量 Mar 05, 2024 pm 05:34 PM

3月4日消息,酷比魔方將於3月5日推出「小酷平板2Lite」平板電腦,首發價649元。據悉,新款平板搭載紫光展銳T606處理器,採用12nm工藝,由兩顆1.6GHz的ArmCortex-A75CPU和六顆ArmCortex-A55處理器組成。螢幕採用的是10.95吋IPS護眼屏,解析度為1280x800,亮度高至350尼特。影像方面,小酷平板2Lite後置1300萬像素主攝,前置500萬像素自拍鏡頭,另支援4G上網/通話、藍牙5.0、Wi-Fi5。此外,官方宣稱,這款平板電腦&l

首發899元 中興5G隨身Wi-Fi U50S開賣:最高網速500Mbps 首發899元 中興5G隨身Wi-Fi U50S開賣:最高網速500Mbps Apr 26, 2024 pm 03:46 PM

4月26日消息,中興5G隨身Wi-FiU50S目前已經正式開賣,首發899元。外觀設計上,中興U50S隨身Wi-Fi簡約時尚,易於手持和包裝。其尺寸為159/73/18mm,攜帶方便,讓您隨時隨地暢享5G高速網絡,實現暢行無阻的行動辦公與娛樂體驗。中興5G隨身Wi-FiU50S該設備支援先進的Wi-Fi6協議,峰值速率高達1800Mbps,依托驍龍X55高效能5G平台,為用戶提供極速的網路體驗。不僅支援5G雙模SA+NSA網路環境與Sub-6GHz頻段,實測網速更可達驚人的500Mbps,輕鬆滿

復古潮流! HMD與喜力聯合推出翻蓋手機:透明外殼設計 復古潮流! HMD與喜力聯合推出翻蓋手機:透明外殼設計 Apr 17, 2024 pm 06:50 PM

4月17日消息,HMD攜手知名啤酒品牌喜力以及創意公司Bodega,聯袂推出了一款獨特的翻蓋手機-無聊手機(TheBoringPhone)。這款手機不僅在設計上充滿新意,更在功能上返璞歸真,旨在引領人們回歸真實的人際交往,享受與朋友暢飲的純粹時光。無聊手機採用了獨特的透明翻蓋設計,展現出簡約而不失優雅的美感。其內部配備了2.8英寸QVGA顯示屏,外部則是一塊1.77英寸的顯示屏,為用戶提供了基本的視覺交互體驗。在攝影方面,雖然僅搭載了30萬畫素的鏡頭,但足以應付日常的簡

榮耀Magic V3首發AI離焦護眼技術:有效緩和近視發展 榮耀Magic V3首發AI離焦護眼技術:有效緩和近視發展 Jul 18, 2024 am 09:27 AM

7月12日消息,榮耀MagicV3系列今日正式發布,搭載全新榮耀視力舒緩綠洲護眼屏,在屏幕本身俱備高規格和高素質的同時,還開創性的引入AI主動式護眼技術。據悉,傳統的緩解近視的方式是“近視鏡”,近視眼鏡度數均勻分佈,保證了視線中心區域成像在視網膜之上,但周邊區域成像在視網膜後,視網膜感應到成像在後,促進眼軸向後生長,從而使度數加深。目前主要的緩解近視發展的方式之一是“離焦鏡”,其中心區域度數正常,週邊區域透過光學設計分區調整,從而使周邊區域成像落在視網膜前,

台電M50 Mini小平板來了:8.7吋IPS螢幕、5000mAh電池 台電M50 Mini小平板來了:8.7吋IPS螢幕、5000mAh電池 Apr 04, 2024 am 08:31 AM

4月3日消息,台電即將推出的M50Mini平板電腦是一款功能豐富、效能強大的裝置。這款8吋小平板新品搭載了8.7吋的IPS螢幕,為用戶提供了出色的視覺體驗。其金屬機身設計不僅美觀,也增強了設備的耐用性。在性能方面,M50Mini搭載了紫光展銳T606八核心處理器,擁有兩個A75核心和六個A55核心,確保了流暢且高效的運作體驗。同時,該平板還配備了6GB+128GB的儲存方案,並支援8GB記憶體擴展,滿足了用戶對於儲存和多任務處理的需求。在續航上,M50Mini配備了5000mAh的電池,支援Ty

vivo訊號最強手機! vivo X100s搭載寰宇訊號放大系統:21天線、360°環繞設計 vivo訊號最強手機! vivo X100s搭載寰宇訊號放大系統:21天線、360°環繞設計 Jun 03, 2024 pm 08:41 PM

5月13日消息,vivoX100s今晚正式發布,除了出色的影像,新機在訊號方面表現也十分強悍。根據vivo官方介紹,vivoX100s採用了創新的寰宇訊號放大系統,該系統配備了高達21根天線。這項設計基於直屏進行了重新優化,以平衡5G、4G、Wi-Fi、GPS以及NFC等眾多訊號需求。這使得vivoX100s成為了vivo有史以來訊號接收能力最強的手機。新款手機還採用了獨特的360°環繞設計,天線分佈在機身周圍。這項設計不僅增強了訊號的強度,還針對日常各種握持姿勢進行了優化,避免了因握持方式不當導

ppt結束頁如何設計才夠吸引人 ppt結束頁如何設計才夠吸引人 Mar 20, 2024 pm 12:30 PM

在工作中,ppt是職場人士常使用的辦公室軟體。一個完整的ppt必須有一個好的結束頁。不同的職業要求賦予不同的ppt製作特色。關於結束頁的製作,如何才能設計的比較吸引人呢?下邊我們一起看一看,如何設計ppt結束頁吧! ppt結束頁的設計可以在文字和動畫方面進行一些調整,根據需要選擇簡潔或炫目的風格。接下來,我們將重點放在如何透過創新的表達方式來打造出符合要求的ppt結束頁。那我們就開始今天的教學吧。 1.對於結束頁的製作上,使用圖片中的任何文字都可以,結束頁重要的是表示我的簡報結束了。 2、除了這些文字,

處理Laravel頁面無法正確顯示CSS的方法 處理Laravel頁面無法正確顯示CSS的方法 Mar 10, 2024 am 11:33 AM

《處理Laravel頁面無法正確顯示CSS的方法,需要具體程式碼範例》在使用Laravel框架開發Web應用程式時,有時候會遇到頁面無法正確顯示CSS樣式的問題,這可能會導致頁面呈現不正常的樣式,影響使用者體驗。本文將介紹一些處理Laravel頁面無法正確顯示CSS的方法,並提供具體的程式碼範例,幫助開發者解決這個常見問題。一、檢查檔案路徑首先要檢查CSS檔案的路徑是

See all articles