PHP 获取ip地址代码汇总

yizhihongxing

接下来我将为大家详细讲解“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实现LRU算法的原理详解

    PHP实现LRU算法的原理详解 什么是LRU算法 LRU(Least Recently Used)是一种缓存算法,它的过期规则是:缓存空间满时,优先淘汰最近最少使用的缓存数据。即在一段时间内,如果某个数据没有被访问到,那么接下来它被访问到的几率也很小,就可以被淘汰掉。可以理解为”长时间不用的东西,就扔掉”。 LRU算法原理 LRU算法可以通过哈希表和双向链表…

    PHP 2023年5月27日
    00
  • php array_keys 返回数组的键名

    当我们需要获取PHP数组中所有的键名时,可以使用PHP内置函数array_keys(),该函数返回一个由数组中所有的键名所组成的新数组。 函数语法为: array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] ) 其中,$array参数表示…

    PHP 2023年5月26日
    00
  • PHP实现简单用户登录界面

    让我向你详细讲解“PHP实现简单用户登录界面”的攻略。 步骤 实现一个简单用户登录界面,包含以下几个步骤: 创建数据库和数据表 编写登录页面 编写登录验证的PHP脚本程序 实现退出登录功能 步骤1:创建数据库和数据表 在MySQL或其他支持SQL的数据库中创建一个名为“users”的数据表,该表包含以下字段:id、username、password、emai…

    PHP 2023年5月23日
    00
  • 深入浅析php中sprintf与printf函数的用法及区别

    深入浅析php中sprintf与printf函数的用法及区别 简介 在PHP中,我们经常需要格式化输出数据。可以使用printf()和sprintf()来格式化数据并输出(或存储)结果。这两个函数在功能上十分相似,但使用方法略有不同,可以满足不同的需求。 函数区别 sprintf()函数的返回值为格式化后的字符串,而printf()函数的返回值为输出的字符数…

    PHP 2023年5月26日
    00
  • php限制文件下载速度的代码

    接下来我将为您详细讲解如何对PHP文件进行限速下载。 第一步 – 检查是否支持重定向和一些头文件 在PHP文件开始执行之前,要检查服务器是否支持HTTP重定向和一些头文件: <?php if (!headers_sent()) { header(‘X-Accel-Buffering: no’); } ini_set(‘max_execution_tim…

    PHP 2023年5月26日
    00
  • 浅谈PHP设计模式的装饰器模式

    简介 装饰器模式又叫做装饰者模式,属于结构型的设计模式。指的是在不改变原类文件和使用继承的情况下动态扩展这个对象的功能,从而修饰源数据。组成:抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。抽象装饰(Decorator)角色:继承…

    PHP 2023年4月19日
    00
  • PHP开发入门教程之面向对象

    认识面向对象编程(Object Oriented Programming,OOP)是学习PHP的一个重要环节,面向对象编程是一种程序设计风格,它将类或对象作为主要的软件组织单元,以便具有结构性和可重用性。本教程将深入探索PHP面向对象编程的方方面面,为您提供学习的完整攻略。 一. 安装PHP环境 在开始这个教程之前,我们需要安装PHP环境,可以选择在自己的电…

    PHP 2023年5月23日
    00
  • php的单例模式及应用场景详解

    让我来详细讲解一下“PHP的单例模式及应用场景详解”这个话题。 什么是单例模式? 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并且提供一个全局访问点来访问该实例。单例模式是应用程序开发中常用的设计模式之一,它将一个类的对象与全局范围的访问点联系起来,这样可以确保只有一个类的实例可以被访问。 如何实现单例模式? 实现单例模式的关键在于确保只有一个对…

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