PHP 简易网页访问统计
传统的网页访问统计,已经有很多,如 51la、百度统计、站长统计
一般都需要引用JS,在你的网页内嵌入JS,这个操作存在风险,并且不可控。
可以考虑使用 【img src、css src、link href】引用统计;
使用方法:
在需要统计页面添加 <img src="/stat.php" />
访问记录按照站点每日存储,记录内容:time、ip、url、user_agent、统计参数(stat.php?xxxx)
使用 stat.php?null=1 禁止输出svg
使用 stat.php?host=xxx 将多个不同站点统计到一起
后期基于记录内容可以分析访问数据;
统计代码的PHP实现:
<?php error_reporting(E_ALL & ~E_NOTICE);
define('ROOT_PATH', dirname(__FILE__) . '/'); $now = date('Y-m-d H:i:s');
$host = '_null';
$url = @$_SERVER['HTTP_REFERER'] ?: '';
if (!empty($url))
{
$arr = parse_url($url);
$host = $arr['host'];
} if (!empty($_GET['host']))
{
$host = trim($_GET['host']);
$host = str_replace(['.', '/', '\\', ' '], '', $host);
} $file = ROOT_PATH . '/stat/' . $host . '/stat.log';
$str = @file_get_contents($file);
$arr = [];
if (empty($str))
{
mkdir(ROOT_PATH . '/stat/' . $host);
$arr = [0,0,$now];
}
else
{
$arr = explode(',', $str);
} $arr[0]++;
$arr[1] = substr($arr[2], 0, 10) < date('Y-m-d') ? 0 : ($arr[1] + 1);
$arr[2] = $now; @file_put_contents($file, implode(',', $arr)); $data = [
'time' => $now,
'ip' => $_SERVER['REMOTE_ADDR'],
'user_agent' => @$_SERVER['HTTP_USER_AGENT'] ?: '',
'url' => $url,
'query' => @$_SERVER['QUERY_STRING'] ?: '',
]; @file_put_contents(ROOT_PATH . '/stat/' . $host . '/' . date('Ymd') . '.log', json_encode($data) . PHP_EOL, LOCK_EX|FILE_APPEND); if (!empty($_GET['null']))
{
exit;
} // 输出svg
$out = $arr[0] . '/' . $arr[1];
$w = strlen($out) * 7 + 5;
header('Content-Type:image/svg+xml');
echo <<<EOF
<svg version="1.1"
width="$w"
height="15"
viewBox="0 0 $w 15"
preserveAspectRatio="none"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<text x="2" y="11" style="font-size:12px">$out</text>
</svg>
EOF; exit;
PHP 简易网页访问统计的更多相关文章
- JSP中实现网页访问统计的方法【转】
我采用的是jsp网页,但是不管采用什么语言,原理是一样的. 第一种,单页面统计.就是说,只要点击这个页面就会统计一次. <body> <%!//在这种标记中定义的变量为全局变量 in ...
- JSP简单实现统计网页访问次数
JSP简单实现统计网页访问次数 需求:统计网页的访问次数 核心思想:利用application对象,将访问次数的信息放入application对象中,每次访问就+1.这里利用了application对 ...
- 开源网站访问统计系统Piwik
http://www.piwik.cn/ http://www.piwik.org/ Piwik 是一套基于 Php+MySQL 技术构建,能够与 Google Analytics 相媲美的开源网站访 ...
- piwik网站访问统计系统
一.Piwik介绍 Piwik是一套基于PHP+MySQL技术构建的开源网站访问统计系统.Piwik可以给你详细的统计信息,比如网页浏览人数,访问最多的页面,搜索引擎关键词等流量分析功能.此外,它还采 ...
- 原创:C语言打开、下载、删除网页,统计网页字符个数
本程序由本人在华夏联盟的ID闪电笨笨原创,首发地址:http://bbs.hx95.com/ 写此程序希望可以可以激发新手学习C语言的积极性! C语言代码实现功能如下: 1.实现 ...
- 简易安装python统计包
PythonCharm简易安装python统计包及 本文介绍使用pythonCharm IDE 来安装Python统计包或一些packages的简单过程,基本无任何技术难度,顺便提一提笔者在安装过程中 ...
- 网页中"IE限制网页访问脚本或ActiveX控件"的提示问题的解决方法
以前从来没有注意过"IE限制网页访问脚本或ActiveX控件"的提示问题,对于这个小细节问题,虽然感觉很别扭,但一直没考虑解决方法,今天才发现该问题可以轻松解决,以下做个小小记录. ...
- [Mugeda HTML5技术教程之17] 理解Mugeda访问统计结果
1. 功能简介 Mugeda提供动画统计功能,使得动画制作者可以直观的了解动画的浏览情况,包括浏览量,参与度,以及观看者的分布情况. 目前统计功能主要展示动画内容和广告工程的统计数据.在动画被发布或导 ...
- 用户对动态PHP网页访问过程,以及nginx解析php步骤
www.example.com | Nginx | 路由到www.example.com/index.php | 加载nginx的fast-cgi模块 | fast-cgi监听127.0.0.1:90 ...
随机推荐
- Django 之 cookie & session
Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面 ...
- 【Spring Cloud】Spring Cloud之Zipkin server搭建以及HTTP收集,分布式服务跟踪(2)
一.搭建步骤 1)新建Spring Boot项目,引入pom坐标 <parent> <groupId>org.springframework.boot</groupId& ...
- Tessy — 嵌入式软件单元测试/ 集成测试工具
Tessy 源自戴姆勒- 奔驰公司的软件技术实验室,由德国Hitex 公司负责全球销售及技术支持服务,是一款专门针对嵌入式软件进行单元/ 集成测试的工具.它可以对C/C++ 代码进行单元.集成测试,可 ...
- Normalize.css重置化样式表
Normalize.css是一种CSS reset的替代方案.它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML ...
- Object类.时间日期类.System类.Stringbuilder类.包装类
Object类 java.lang.Object类是java语言中的根类,即所有类的父类.它中描述的所有方法都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类没有特别指定父类, ...
- 使用java spring开发ckeditor的文件上传功能(转)
说明:原帖提供的代码无法直接运行.本人在原帖基础上做了一些修改,修复了一些bug. 关于CKEditor的使用,网络上有无数的文章,这里不再赘述.而关于java支持的文件上传功能,网络上同样有千千万万 ...
- the_permalink()和get_permalink()的区别
wordpress中the_permalink()是用于posts loop循环中(判断是否有文章,如果有文章则展示出来:如果没有文章就显示没有文章),常用于文章分类列表和文章页的模板中,用法如下 & ...
- Spark SQL中的Catalyst 的工作机制
Spark SQL中的Catalyst 的工作机制 答:不管是SQL.Hive SQL还是DataFrame.Dataset触发Action Job的时候,都会经过解析变成unresolved的逻 ...
- jsbridge与通信模型
三层通信模型: 应用层.解释层.会话层: 通信协议: 通信原语: 报文格式: 网络层: _evaluateJavascript 会话层: #define kQueueHasMessage @&qu ...
- 2019 Nowcoder Multi-University Training Contest 1 H-XOR
由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...