【PHP】php+txt实现网页计数器(限IP统计方式和不限IP统计方式)
一般的网页计数器制作实现思路:首先设定存放统计数据的文件(counter.txt)——读取文件中的内容存入字符串——自加操作——以写入方式打开文件写入数据——从文件中输出统计数据——关闭文件。
代码:
<?php
$counter_fname='counter.txt';//动态获取需要统计的页面,并进行命名
$counter=file_get_contents($counter_fname); //将文件的内容读入到一个字符串中
$counter+=0;
$counter++;
if($fp=fopen($counter_fname,'w')){
fputs($fp,$counter);//输出统计数据
fclose($fp);
}
echo "document.writeln('<input type=text value=$counter>');";
?>
一、不限IP统计方式即只要刷新页面统计数就会增加
实现思路:首先设定存放统计数据的文件(counter[i].txt)是动态获取的即可以实现多页面统计——读取文件中的内容存入字符串——自加操作——以写入方式打开文件写入数据——从文件中输出统计数据——关闭文件。
代码:
counter.php页面:
<?php
$counter_fname='counter'.$_REQUEST[id].'.txt';//动态获取需要统计的页面,并进行命名
$counter=file_get_contents($counter_fname);
$counter+=0;
$counter++;
if($fp=fopen($counter_fname,'w')){
fputs($fp,$counter);fclose($fp);
}
echo "document.writeln('<input type=text value=$counter>');";
?>
访问页面:jsq.php 代码: <script type=text/javascript src=counter_ip.php?id=1></script>
二、限IP统计方式即只有不同ip访问才会被记录为统计
实现思路:首先设定存放统计数据的文件(counter[i].txt)是动态获取的即可以实现多页面统计——在设定存放统计ip数据的文件(ip[i].txt)是动态获取的——读取文件中的内容存入字符串——比较获取的ip是否已经存在于ip文件中,未存在重新写入自加操作——更新ip——以写入方式打开文件写入数据——从文件中输出统计数据——关闭文件。
counter_ip.php页面代码:
<?php
$counter_fname='counter'.$_REQUEST["id"].'.txt';//动态获取需要统计的页面,并进行命名
$counter_ips='ip'.$_REQUEST["id"].'.txt';//
$counter=file_get_contents($counter_fname);
$counter+=0;
//判断本IP是否曾经访问过
$ips=preg_split("/\s+/",file_get_contents($counter_ips));
$ip=$_SERVER["REMOTE_ADDR"];
if(!in_array($ip,$ips)){//倘若该IP不在ip文件夹中,就新增加访问数据
//更新计数器
$counter++;
if($fp=fopen($counter_fname,'w')){
fputs($fp,$counter);fclose($fp);
}
//更新访问IP
if($fp=fopen($counter_ips,'a')){
fputs($fp,"\n$ip");fclose($fp);
}
}
echo "document.writeln('<input type=text value=$counter>');";
?>
访问页面:jsq_ip.php 代码: <script type=text/javascript src=counter_ip.php?id=2></script>
【PHP】php+txt实现网页计数器(限IP统计方式和不限IP统计方式)的更多相关文章
- 限流(四)nginx接入层限流
一.nginx限流模块 接入层指的是请求流量的入口,我们可以在这里做很多控制,比如:负载均衡,缓存,限流等. nginx中针对限流有两个模块可以处理: 1)ngx_http_limit_req_mod ...
- TCP/IP协议(二)tcp/ip基础知识
今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...
- TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节
1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统 ...
- 用shell统计访问日志里每个ip访问次数【转】
今天,要统计一个系统的每个ip访问次数,于是我找到该系统访问日志,并写脚本实现. 访问日志情况: [root@qular ~]# cd /usr/local/nginx/logs/ [root@q ...
- IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑
开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了…… 1.开发者基本配置 (1) 公众平台官网登录 ...
- Shell 命令行统计 apache 网站日志访问IP以及IP归属地
Shell 命令行统计 apache 网站日志访问IP以及IP归属地 我的一个站点用 apache 服务跑着,积攒了很多的日志.我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里. 因为日 ...
- 限流(三)Redis + lua分布式限流
一.简介 1)分布式限流 如果是单实例项目,我们使用Guava这样的轻便又高性能的堆缓存来处理限流.但是当项目发展为多实例了以后呢?这时候我们就需要采用分布式限流的方式,分布式限流可以以redis + ...
- TCP/IP学习笔记(5)------IP选路
静态IP选路 一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统路由表. D ...
- WireShark——IP协议包分析(Ping分析IP协议包)
互联网协议 IP 是 Internet Protocol 的缩写,中文缩写为“网协”.IP 协议是位于 OSI 模型中第三层的协议,其主要目的就是使得网络间能够互联通信.前面介绍了 ARP 协议, 该 ...
随机推荐
- windows server 2003 系统重装蓝屏
错误码:0X0000007B 这个代码和硬盘有关系,不过不用害怕,不是有坏道了,是设置问题或者病毒造成的硬盘引导分区错误.如果您在用原版系统盘安装系统的时候出这个问题,那说明您的机器配置还是比较新的, ...
- Ubuntu常用终端快捷键
CTRL+k:删除从光标到行尾的部分 CTRL+u:删除从光标到行首的部分 ALT+d:删除从光标到当前单词结尾的部分 CTRL+w:删除从光标到当前单词开头的部分 CTRL+a:将光标移到行首 CT ...
- swift 遍历
最简单的一个遍历数组 for 随便起个名字 in 升级 上面的看不懂的话,这个应该会简单点 import UIKit let interestingNumbers = [ ,,,,,], ,,,,,] ...
- 打印出不同顺序的字符串&单引号和双引号的差异
发现一个很好玩的打印顺序 package com.liaojianya.chapter1; /** * This program demonstrates the string. * @author ...
- ZOJ 1074 To the Max(DP 最大子矩阵和)
To the Max Time Limit: 2 Seconds Memory Limit: 65536 KB Problem Given a two-dimensional array o ...
- PowerDesigner 的几个使用技巧
1. 生成sql脚本 Database→Generate Database 选择要输出的文件路径,即文件存储路径,并根据需要修改文件名,单击确定后便会生成sql脚本. 在Options选项卡里, ...
- js 组件的写法
var Test1 = function(){ var name = ""; this.setName = function(username){ name = username; ...
- Day20 Django之Model多对多、中间件、缓存、信号和分页
一.Form补充 class IndexForm(forms.Form): # c = [ # (1, 'CEO'), # (2, 'CTO') # ] # 静态字段,属于IndexForm类,即使数 ...
- GCC编译器的安装
1.GCC简介 GCC(GNU Compiler Collection)是一套功能强大.性能优越的编程语言编译器,它是GNU计划的代表作品之一.GCC是Linux平台下最常用的编译器,GCC原名为GN ...
- MySQL驱动阅读------Connection连接的建立,基于JDBC-----5.1.26
一般获取数据库连接的程序 Class.forName("com.mysql.jdbc.Driver"); final Connection connection = (Connec ...