相关文章推荐
打酱油的豆芽  ·  javascript - ...·  1 年前    · 
如何使用IP地址和国家代码获得地理定位

如何使用IP地址和国家代码获得地理定位

地理定位提供了关于用户地理位置的信息。具体来说,IP地址被地理定位服务用来确定位置。

在本教程中,你将学习如何使用一个IP地址和一个国家名称及代码来获得地理位置。这是一个两步的过程,第一步是获取IP地址,第二步是获取地理位置。

  • PHP的基础知识。
  • 文本编辑器 - VScode。
  • 完成本教程后,你应该能够做到以下几点。

  • 获取当前的IP地址。
  • 使用PHP cURL API获取区域。
  • 知道获取地理位置的不同用途
  • 如何启用/禁用Geolocation API。
  • 关于这个例子

    本例使用IPWhoIs地理定位API工具,通过使用IP地址查询位置数据。该API端点寻找任何IPV4、IPv6或任何域作为参数,同时读取地理位置请求。

    这段代码执行了一个两步流程来输出位置数据。它创建了一个带有函数的PHP服务,从 $_SERVER 阵列中获取用户的IP地址。然后,它将使用IP地址来设置cURL选项来读取地理位置数据。这将通过解析API的JSON响应来输出国家名称、代码和给定的IP。

    下面的文件结构图显示了这个例子的简单性,文件的数量最少。 Request.php 文件有主要的函数,执行两个步骤以获得IP和地理位置数据。 index.php 文件调用服务来获取位置数据并将其填充到用户界面中。

    ###第1步:获取并验证当前的IP地址

    这是主页代码,包含HTML代码,以确认用户的当前地理位置数据。它导入位置服务类,调用方法来获取和验证IP地址。一旦IP被验证并返回真,它就会请求地理定位数据。否则,它将在用户界面上显示错误信息。

  • index.php
  • require_once 'lib/Request.php' ; $requestModel = new Request (); $ip = $requestModel -> getIpAddress (); $isValidIpAddress = $requestModel -> isValidIpAddress ( $ip ); <TITLE>Get Geo Location by the IP address</TITLE> <link href= "assets/css/style.css" type= "text/css" rel= "stylesheet" /> </HEAD> <div class =" txt - heading "> Get Geo Location by the IP address </ div > <? php if ($ isValidIpAddress == "") { echo "<div class='error'>Invalid IP address $ip </div>" ; } else { $geoLocationData = $requestModel -> getLocation ( $ip ); print "<PRE>" ; print_r ( $geoLocationData ); <div id= "location" > <div class =" geo - location - detail "> < div class =" row "> < div class =" form - label "> Country Name : <? php echo $ geoLocationData [' country '];?> </ div > </ div > < div class =" row "> < div class =" form - label "> Country Code : <? php echo $ geoLocationData [' country_code '];?> </ div > </ div > < div class =" row "> < div class =" form - label "> Ip Address : <? php echo $ geoLocationData [' ip '];?> </ div > </ div > </ div > </ div > <? php }?> </ BODY > </ HTML >

    第2步:准备API请求,通过PHP cURL获得地理位置信息

    getIPAddress() 函数建立了一个if-else-if梯子的大部分方案,使用 $_SERVER 变量获得非空的IP地址。一旦IP被验证并返回真, getLocation() 函数就会通过cURL请求ipwhois API。该API将返回一个JSON响应作为结果。这个例子对JSON响应进行解码,解析地理位置数据,从中获得国家的详细信息。

  • Request.php
  • class Request public function getIpAddress ( ) $ipAddress = '' ; if (! empty ( $_SERVER [ 'HTTP_CLIENT_IP' ]) && $this -> isValidIpAddress ( $_SERVER [ 'HTTP_CLIENT_IP' ])) { // check for shared ISP IP $ipAddress = $_SERVER [ 'HTTP_CLIENT_IP' ]; } else if (! empty ( $_SERVER [ 'HTTP_X_FORWARDED_FOR' ])) { // check for IPs passing through proxy servers // check if multiple IP addresses are set and take the first one $ipAddressList = explode ( ',' , $_SERVER [ 'HTTP_X_FORWARDED_FOR' ]); foreach ( $ipAddressList as $ip ) { if ( $this -> isValidIpAddress ( $ip )) { $ipAddress = $ip ; break ; } else if (! empty ( $_SERVER [ 'HTTP_X_FORWARDED' ]) && $this -> isValidIpAddress ( $_SERVER [ 'HTTP_X_FORWARDED' ])) { $ipAddress = $_SERVER [ 'HTTP_X_FORWARDED' ]; } else if (! empty ( $_SERVER [ 'HTTP_X_CLUSTER_CLIENT_IP' ]) && $this -> isValidIpAddress ( $_SERVER [ 'HTTP_X_CLUSTER_CLIENT_IP' ])) { $ipAddress = $_SERVER [ 'HTTP_X_CLUSTER_CLIENT_IP' ]; } else if (! empty ( $_SERVER [ 'HTTP_FORWARDED_FOR' ]) && $this -> isValidIpAddress ( $_SERVER [ 'HTTP_FORWARDED_FOR' ])) { $ipAddress = $_SERVER [ 'HTTP_FORWARDED_FOR' ]; } else if (! empty ( $_SERVER [ 'HTTP_FORWARDED' ]) && $this -> isValidIpAddress ( $_SERVER [ 'HTTP_FORWARDED' ])) { $ipAddress = $_SERVER [ 'HTTP_FORWARDED' ]; } else if (! empty ( $_SERVER [ 'REMOTE_ADDR' ]) && $this -> isValidIpAddress ( $_SERVER [ 'REMOTE_ADDR' ])) { $ipAddress = $_SERVER [ 'REMOTE_ADDR' ]; return $ipAddress ; public function isValidIpAddress ( $ip ) if ( filter_var ( $ip , FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false ) { return false ; return true ; public function getLocation ( $ip ) $ch = curl_init ( 'http://ipwhois.app/json/' . $ip ); curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, true ); $json = curl_exec ( $ch ); curl_close ( $ch ); // Decode JSON response $ipWhoIsResponse = json_decode ( $json , true ); // Country code output, field "country_code" return $ipWhoIsResponse ;

    响应API调用的国家地理定位

    下面的图片显示了带有国家名称和代码的位置数据。

    如果IP地址不是一个有效的地址,那么代码将返回错误信息以确认用户。

    替代的地理定位API

    这些是一些提供服务的替代API,以程序化方式访问位置数据。

  • GeoPlugin服务允许从PHP、ASP、JavaScript等访问。
  • IPinfo库可以通过基于令牌的认证获得位置。
  • PHP支持整合PECL扩展的GeoIP2包,通过使用预定义的函数来获取位置数据。从IP地址或域名获取国家名称的代码是。
  • geoip_country_name_by_name ( $hostname );
    

    获取地理位置的不同用途

    为了通过IP地址获得用户的地理位置,有很多用途。

  • 它提供了位置数据的准确性和可靠性,而用户可能输入错误的数据。
  • 它提供了一个单一的入口点来获取数据,这些数据将在许多地方使用,如基于位置的货币转换器,运输计算或更多。
  • 计算基于区域的访问统计。
  • 它有助于通过对访问者进行本地化来切换多语言网站内容的语言。
  • 在用户界面的地图层上绘制用户的位置。谷歌地图的JavaScript API提供地理定位服务,在地图上显示用户和设备的位置。
  • 在整个文章中,你已经了解了如何获得你的网站的地理位置数据。此外,在这种情况下,地理定位数据可能会被用于几个原因,这可能包括。

  • 个人化和限制对网站某些部分的访问。
  • 基于地形的访问和交付的限制。
  • 避免不诚实的行为。
  • 掌握整个公司的信息流动情况。
  • 分类:
    代码人生
    标签: