请选择 进入手机版 | 继续访问电脑版

php网站访客大数据地图前后端源码教程分享

[复制链接]
查看1510 | 回复0 | 2022-5-1 15:44 | 显示全部楼层 |阅读模式
php网站访客大数据地图前后端源码教程分享
访问地址:你的域名/map
代码如下:
  1. <?php
  2. /*
  3. * 获取每个独立访客的IP地理位置的经纬度保存到txt文件
  4. * 腾讯地图开放平台地址:https://lbs.qq.com/
  5. */

  6. $server_ip_arr = [ //定义你服务器公网IP的地理位置经纬度
  7.     "server_lat" => 31.230355,
  8.     "server_lng" => 121.473710
  9. ];
  10. $API_key = '88888888888888888'; //腾讯地图KEY
  11. $server_ip = '114.114.114.114'; //服务器公网IP地址
  12. $ifcdn = false;  //当前网站是否启用了CDN,否false

  13. $ret = map_add($ifcdn, $server_ip_arr, $server_ip, $API_key); //执行
  14. if ($_GET['type'] == 'map') {
  15.     var_dump($ret); // 浏览器地址访问 /map.php?type=map  调试并打印结果
  16. }

  17. function map_add($ifcdn = false, $server_ip_arr = null, $server_ip = "", $API_key = "")
  18. {
  19.     $file =  dirname(__FILE__) . "/data/" . date("Y-m-d") . ".txt";
  20.     if (!file_exists($file)) {
  21.         @mkdir(dirname(__FILE__) . "/data", 0777, true);
  22.         @file_put_contents($file, '');
  23.     }
  24.     $put_data = @file_get_contents($file);

  25.     $use_ip = Get_User_ip();
  26.     if (strpos($put_data, $use_ip) === false) {
  27.         $data = map_curl_get($API_key, $use_ip);
  28.         $arr = json_decode($data, true);
  29.         $lat = $arr['result']['location']['lat'];
  30.         $lng = $arr['result']['location']['lng'];
  31.     } else {
  32.         return '用户数据已存在';
  33.     }

  34.     $cdn_ip = $_SERVER['REMOTE_ADDR'];
  35.     if ($ifcdn == true and $cdn_ip != $server_ip) {
  36.         $server_ip = $cdn_ip;
  37.         if (strpos($put_data, $cdn_ip) === false) {
  38.             $data = map_curl_get($API_key, $cdn_ip);
  39.             $arr = json_decode($data, true);
  40.             $to_lat = $arr['result']['location']['lat'];
  41.             $to_lng = $arr['result']['location']['lng'];
  42.         } else {
  43.             $arr = map_obg_data($put_data, $cdn_ip);
  44.             $to_lat = $arr["to"]["lat"];
  45.             $to_lng = $arr["to"]["lng"];
  46.         }
  47.     } else {
  48.         $to_lat = $server_ip_arr["server_lat"];
  49.         $to_lng = $server_ip_arr["server_lng"];
  50.         $server_ip = 'server';
  51.     }

  52.     if (!empty($lat) and !empty($lng) and !empty($to_lat) and !empty($to_lng)) {
  53.         $data_arr = array(
  54.             "from" => array(
  55.                 "lat" => $lat,
  56.                 "lng" => $lng,
  57.                 "uip" => $use_ip
  58.             ),
  59.             "to" => array(
  60.                 "lat" => $to_lat,
  61.                 "lng" => $to_lng,
  62.                 "ip" => $server_ip
  63.             ),
  64.         );
  65.         $put_file = json_encode($data_arr);
  66.         if (strpos($put_data, $put_file) === false) {
  67.             if (file_put_contents($file, $put_file . "\n", FILE_APPEND)) {
  68.                 return $put_file;
  69.             } else {
  70.                 return '数据写入失败';
  71.             }
  72.         } else {
  73.             return '数据重复未保存';
  74.         }
  75.     }
  76. }

  77. function map_curl_get($Api_key, $ip)
  78. {
  79.     $url = "https://apis.map.qq.com/ws/location/v1/ip?key={$Api_key}&ip=" . $ip;
  80.     $ch = curl_init();
  81.     curl_setopt($ch, CURLOPT_URL, $url);
  82.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  83.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  84.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  85.     curl_setopt($ch, CURLOPT_REFERER, 'http://' . $_SERVER['HTTP_HOST']);
  86.     curl_setopt($ch, CURLOPT_TIMEOUT, 3);
  87.     $data = curl_exec($ch);
  88.     curl_close($ch);
  89.     return $data;
  90. }

  91. function Get_User_ip()
  92. {
  93.     if ($_SERVER['HTTP_CLIENT_IP']) {
  94.         $ip = $_SERVER['HTTP_CLIENT_IP'];
  95.     } elseif ($_SERVER['HTTP_X_FORWARDED_FOR']) {
  96.         $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  97.     } elseif ($_SERVER['REMOTE_ADDR']) {
  98.         $ip = $_SERVER['REMOTE_ADDR'];
  99.     }
  100.     return $ip;
  101. }

  102. function map_obg_data($data, $str)
  103. {
  104.     $array = explode("\n", $data);
  105.     foreach ($array as $value) {
  106.         if (strpos($value, $str) !== false) {
  107.             $obg = $value;
  108.             break;
  109.         }
  110.     }
  111.     return json_decode($obg, true);
  112. }
复制代码
详细请下载附件:
网站访客大数据地图前后端源码.zip (5.02 KB, 下载次数: 0, 售价: 5 丢币)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

UID
1
贡献
387
丢币
38902
主题
4607
回帖
116
注册时间
2018-9-25
最后登录
2024-3-24