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实现文件下载更能介绍
Nov 23 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
php静态文件返回304技巧分享
Jan 06 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP实现git部署的方法教程
Dec 19 PHP
php中上传文件的的解决方案
Sep 25 PHP
thinkPHP框架RBAC实现原理分析
Feb 01 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 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&amp;java(三)
2006/10/09 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
完善的jquery处理机制
2016/02/21 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
jquery中有哪些api jQuery主要API
2017/11/20 jQuery
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
python中List的sort方法指南
2014/09/01 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
Python如何实现线程间通信
2020/07/30 Python
法人委托书
2014/07/31 职场文书
门面房租房协议书
2014/08/20 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
团组织推优材料
2014/12/29 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
怎么用Python识别手势数字
2021/06/07 Python
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python