PHP 获取ip地址代码汇总

接下来我将为大家详细讲解“PHP 获取ip地址代码汇总”的完整攻略。

1. 获取客户端IP地址的常用方法

1.1. 使用$_SERVER数组获取

PHP中可以使用$_SERVER超全局变量获取客户端IP地址。其中,$_SERVER['REMOTE_ADDR']是最基本的获取IP地址的方式。

<?php
$ip = $_SERVER['REMOTE_ADDR'];
echo $ip;
?>

1.2. 优先考虑X-Forwarded-For头部

考虑到某些代理服务器会利用X-Forwarded-For头部记录客户端真实IP地址,因此获取客户端IP地址时应首先尝试获取X-Forwarded-For头部中的IP地址。

<?php
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $ip = trim($ip_arr[0]);
} elseif(isset($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
echo $ip;
?>

1.3. 使用代理时要加判断

如果你的网站部署在代理服务器之后,那么上面的代码就不能正常工作了。因此,我们需要判断当前请求是否是代理服务器发出的。

<?php
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false) {
        $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $ip = trim(end($ips));
    }else{
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
}elseif(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
}else{
    $ip = $_SERVER['REMOTE_ADDR'];
}
// 如果是内网地址,则获取本机的IP地址
if(substr($ip,0,7) == "192.168" || substr($ip,0,7) == "172.16" || substr($ip,0,8) == "10.0.0."){
    $ip = file_get_contents("http://ipecho.net/plain");
}

echo $ip;
?>

2. 解析IP地址获取详细信息

2.1. 使用淘宝IP库

淘宝提供了一个IP地址查询的API,可以通过访问以下URL解析IP地址对应的详细信息。

http://ip.taobao.com/service/getIpInfo.php?ip=202.103.26.16

解析结果会以JSON格式返回。我们可以使用PHP的json_decode()函数将其转换为数组,然后使用数组下标获取相应信息即可。

以下是示例代码:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$url = "http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
$response = file_get_contents($url);
$info = json_decode($response,true);
if($info['code'] == 0) { // 查询成功
    echo $info['data']['country'].$info['data']['region'].$info['data']['city'];
}else{
    echo '查询失败';
}
?>

2.2. 使用GeoIP库

GeoIP库是一个流行的IP地址解析库,它可以解析IP地址对应的国家、地区、城市以及经纬度等信息。

以下是GeoIP库的示例代码:

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$database = dirname(__FILE__).'/GeoIP.dat'; // GeoIP库的位置
if (!file_exists($database)) {
    die('GeoIP database not found');
}

require_once 'geoip.inc';

// 初始化GeoIP
$gi = geoip_open($database, GEOIP_STANDARD);

// 解析IP地址
$record = geoip_record_by_addr($gi, $ip);

// 输出详细信息
echo $record->country_name.' - '.$record->city.' - '.$record->latitude.','.$record->longitude;

// 关闭GeoIP
geoip_close($gi);
?>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP 获取ip地址代码汇总 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php简单分页类实现方法

    让我来为您详细讲解“PHP简单分页类实现方法”的完整攻略。 1. 确定分页需求 在开始实现分页类之前,需要了解分页的具体需求,例如每页显示数量、总数据量、当前页码等,这些信息将作为分页类的初始化参数。在本次示例中,我们假设需求如下: 每页显示10条数据; 总共有100条数据; 当前页码为2。 2. 实现分页类 2.1 确定类的属性和方法 根据需求,我们需要实…

    PHP 2023年5月27日
    00
  • PHP之sprintf函数用法详解

    PHP之sprintf函数用法详解 简介 sprintf函数是PHP语言中一个强大的格式化输出函数。它可以用于将一个字符串格式化输出为你所需要的样式并返回这个字符串。 基本语法 sprintf函数的基本语法如下: sprintf(string $format, mixed $args, …): string; 其中,$format参数为格式化字符串,$a…

    PHP 2023年5月26日
    00
  • 那些年一起学习的PHP(一)

    那些年一起学习的PHP(一)完整攻略 1. 学习前的准备 在开始学习 PHP 之前,有一些必要的准备要做好: 了解HTML和CSS的基础知识,这是前端开发的必要知识; 了解基本的编程概念和流程,比如循环、条件语句等; 安装 PHP 开发环境,建议使用 XAMPP 或 WAMP 等集成环境,这样可以快速搭建开发环境并且省去配置的麻烦。 2. PHP 语法 学习…

    PHP 2023年5月30日
    00
  • PHP函数参数传递的方式整理

    下面我将为您讲解“PHP函数参数传递的方式整理”的攻略。 什么是函数参数传递? 在 PHP 中,函数参数传递指的是函数调用的时候传递参数的过程。在调用函数时,可以将变量或者常量作为参数传递给函数,在函数内部可以使用这些参数进行计算或者实现某些功能。 在 PHP 中,函数参数传递的方式有以下几种: 1. 值传递 值传递是指将一个变量的值复制一份后,将复制的值作…

    PHP 2023年5月27日
    00
  • PHP获取访问页面HTTP状态码的实现代码

    获取访问页面的HTTP状态码可以使用PHP内置的函数或者第三方库。下面分别介绍这两种方案的实现方式。 方案一:使用PHP内置的函数 PHP内置了获取HTTP状态码的函数http_response_code($code = null),使用该函数可以获取当前页面的HTTP状态码。 示例一 <?php $url = ‘https://www.baidu.c…

    PHP 2023年5月30日
    00
  • 在服务端进行目录建立、删除,文件上传、删除的过程的php代码

    在服务端进行目录建立、删除,文件上传、删除的过程涉及到文件系统的操作,需要使用PHP的文件系统函数来实现。下面是具体的攻略: 一、目录建立 在PHP中,可以使用mkdir()函数来创建目录。该函数的基本语法如下: mkdir($path, $mode, $recursive); 参数说明: $path:要创建的目录路径; $mode:目录权限。默认为0777…

    PHP 2023年5月26日
    00
  • PHP中遍历数组的三种常用方法实例分析

    PHP中遍历数组的三种常用方法实例分析 PHP是一门常用的服务器端脚本语言,数组是PHP中常用的数据类型之一。在PHP中,遍历数组是非常常见的操作之一。本文将介绍PHP中遍历数组的三种常用方法并给出代码示例进行详细说明。 方法一:for循环 for循环是一种常见的遍历数组的方式,可以使用下标来访问数组元素,并可以设置一个循环计数器来控制循环次数。 以下是使用…

    PHP 2023年5月26日
    00
  • 微信小程序网络请求wx.request详解及实例

    微信小程序网络请求wx.request详解及实例 在微信小程序中,我们经常需要与服务器进行交互获取数据。而微信提供了wx.request方法用于实现网络请求。本文将详细介绍wx.request的使用方法及实例说明。 wx.request方法详解 语法 wx.request(Object object) 参数说明 Object object: 请求的相关参数,…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部