PHP 记录访客的浏览信息方法


Posted in PHP onJanuary 29, 2018

可以记录访客的地理位置,操作系统,浏览器,IP,时间和访问的文件。

1.首先创建一个comm_function.php文件:

<?php
//echo $_SERVER['HTTP_USER_AGENT'];
//echo "<br />".$_SERVER ['REMOTE_ADDR'];
/**
 * 获取客户端类型,手机还是电脑,以及相应的操作系统类型。
 *
 * @param string $subject
 */
function get_os($agent) {
  $os = false;
  if (preg_match ( '/win/i', $agent ) && strpos ( $agent, '95' )) {
    $os = 'Windows 95';
  } else if (preg_match ( '/win 9x/i', $agent ) && strpos ( $agent, '4.90' )) {
    $os = 'Windows ME';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/98/i', $agent )) {
    $os = 'Windows 98';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt 6.0/i', $agent )) {
    $os = 'Windows Vista';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt 6.1/i', $agent )) {
    $os = 'Windows 7';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt 6.2/i', $agent )) {
    $os = 'Windows 8';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt 10.0/i', $agent )) {
    $os = 'Windows 10'; // 添加win10判断
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt 5.1/i', $agent )) {
    $os = 'Windows XP';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt 5/i', $agent )) {
    $os = 'Windows 2000';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/nt/i', $agent )) {
    $os = 'Windows NT';
  } else if (preg_match ( '/win/i', $agent ) && preg_match ( '/32/i', $agent )) {
    $os = 'Windows 32';
  } else if (preg_match ( '/linux/i', $agent )) {
    if(preg_match("/Mobile/", $agent)){
      if(preg_match("/QQ/i", $agent)){
        $os = "Android QQ Browser";
      }else{
        $os = "Android Browser";
      }
    }else{
      $os = 'PC-Linux';
    }
  } else if (preg_match ( '/Mac/i', $agent )) {
    if(preg_match("/Mobile/", $agent)){
      if(preg_match("/QQ/i", $agent)){
        $os = "IPhone QQ Browser";
      }else{
        $os = "IPhone Browser";
      }
    }else{
      $os = 'Mac OS X';
    }
  } else if (preg_match ( '/unix/i', $agent )) {
    $os = 'Unix';
  } else if (preg_match ( '/sun/i', $agent ) && preg_match ( '/os/i', $agent )) {
    $os = 'SunOS';
  } else if (preg_match ( '/ibm/i', $agent ) && preg_match ( '/os/i', $agent )) {
    $os = 'IBM OS/2';
  } else if (preg_match ( '/Mac/i', $agent ) && preg_match ( '/PC/i', $agent )) {
    $os = 'Macintosh';
  } else if (preg_match ( '/PowerPC/i', $agent )) {
    $os = 'PowerPC';
  } else if (preg_match ( '/AIX/i', $agent )) {
    $os = 'AIX';
  } else if (preg_match ( '/HPUX/i', $agent )) {
    $os = 'HPUX';
  } else if (preg_match ( '/NetBSD/i', $agent )) {
    $os = 'NetBSD';
  } else if (preg_match ( '/BSD/i', $agent )) {
    $os = 'BSD';
  } else if (preg_match ( '/OSF1/i', $agent )) {
    $os = 'OSF1';
  } else if (preg_match ( '/IRIX/i', $agent )) {
    $os = 'IRIX';
  } else if (preg_match ( '/FreeBSD/i', $agent )) {
    $os = 'FreeBSD';
  } else if (preg_match ( '/teleport/i', $agent )) {
    $os = 'teleport';
  } else if (preg_match ( '/flashget/i', $agent )) {
    $os = 'flashget';
  } else if (preg_match ( '/webzip/i', $agent )) {
    $os = 'webzip';
  } else if (preg_match ( '/offline/i', $agent )) {
    $os = 'offline';
  } else {
    $os = '未知操作系统';
  }
  return $os;
}
/**
 * 获取 客户端的浏览器类型
 * @return string
 */
function get_broswer($sys){
  if (stripos($sys, "Firefox/") > 0) {
    preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
    $exp[0] = "Firefox";
    $exp[1] = $b[1]; //获取火狐浏览器的版本号
  } elseif (stripos($sys, "Maxthon") > 0) {
    preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);
    $exp[0] = "傲游";
    $exp[1] = $aoyou[1];
  } elseif (stripos($sys, "MSIE") > 0) {
    preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
    $exp[0] = "IE";
    $exp[1] = $ie[1]; //获取IE的版本号
  } elseif (stripos($sys, "OPR") > 0) {
    preg_match("/OPR\/([\d\.]+)/", $sys, $opera);
    $exp[0] = "Opera";
    $exp[1] = $opera[1];
  } elseif(stripos($sys, "Edge") > 0) {
    //win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配
    preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);
    $exp[0] = "Edge";
    $exp[1] = $Edge[1];
  } elseif (stripos($sys, "Chrome") > 0) {
    preg_match("/Chrome\/([\d\.]+)/", $sys, $google);
    $exp[0] = "Chrome";
    $exp[1] = $google[1]; //获取google chrome的版本号
  } elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){
    preg_match("/rv:([\d\.]+)/", $sys, $IE);
    $exp[0] = "IE";
    $exp[1] = $IE[1];
  }else {
    $exp[0] = "未知浏览器";
    $exp[1] = "";
  }
  return $exp[0].'('.$exp[1].')';
}
/**
 * 根据 客户端IP 获取到其具体的位置信息
 * @param unknown $ip
 * @return string
 */
function get_address_by_ip($ip) {
  $url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $info = curl_exec($curl);
  curl_close($curl);
  return $info;
}
function clientlog() {
  $useragent = $_SERVER ['HTTP_USER_AGENT'];
  $clientip = $_SERVER ['REMOTE_ADDR'];
  $client_info = get_os ( $useragent ) . "---" . get_broswer ( $useragent );
  $rawdata_position = get_address_by_ip ( $clientip );
  $rawdata_position = json_decode($rawdata_position, true);
  $country = $rawdata_position['data']['country'];
  $province = $rawdata_position['data']['region'];
  $city = $rawdata_position['data']['city'];
  $nettype = $rawdata_position['data']['isp'];

  $time = date ( 'y-m-d h:m:s' );
  $data = "来自{$country} {$province} {$city }{$nettype} 的客户端: {$client_info},IP为:{$clientip},在{$time}时刻访问了{$_SERVER['PHP_SELF']}文件!\r\n";
  $filename = "./log.log";
  if (! file_exists ( $filename )) {
    fopen ( $filename, "w+" );
  }
  file_put_contents ( $filename, $data, FILE_APPEND );
}

2.在别的文件引入这个comm_function.php

require_once "comm_function.php";

以上这篇PHP 记录访客的浏览信息方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php基础知识:控制结构
Dec 13 PHP
php读取msn上的用户信息类
Dec 05 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
php使用curl存储cookie的示例
Mar 31 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
php连接oracle数据库的核心步骤
May 26 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 PHP
PHP大文件分割分片上传实现代码
Dec 09 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 #PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 #PHP
PHP 使用二进制保存用户状态的实例
Jan 29 #PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 #PHP
Ubuntu上安装yaf扩展的方法
Jan 29 #PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
Jan 29 #PHP
php实现的AES加密类定义与用法示例
Jan 29 #PHP
You might like
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
extjs中grid中嵌入动态combobox的应用
2011/01/01 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
微信小程序批量上传图片到七牛(推荐)
2019/12/19 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
重命名批处理python脚本
2013/04/05 Python
Python函数式编程
2017/07/20 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
幼儿运动会邀请函
2014/01/17 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
心理健康日活动总结
2014/05/08 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
合作协议书模板
2014/10/10 职场文书
《叶问2》观后感
2015/06/15 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python