PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例

yizhihongxing

下面我会详细讲解如何实现获取PHP地址的五种方法,并提供插入用户登录日志的操作示例。

获取IP地址的五种方法

1. 使用 $_SERVER['REMOTE_ADDR'] 方法

这是 PHP 内置的函数,可以直接获取用户的 IP 地址,代码如下:

$ip = $_SERVER['REMOTE_ADDR'];

2. 通过 HTTP 头中的 X-Forwarded-For

对于一些经过代理服务器的请求,可能用户的真实 IP 地址已经被伪造了,这时我们需要通过 HTTP 头中的 X-Forwarded-For 来获取真实的用户 IP 地址。代码如下:

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

这里需要注意,由于 HTTP_X_FORWARDED_FORHTTP_CLIENT_IP 这两个头信息是可以伪造的,所以我们需要做一些数据验证。

3. 使用第三方 IP 地址查询 API

除了以上两种方式,我们还可以通过调用第三方 API 获取用户 IP 地址信息。代码如下:

$ip = ''; // 获取用户 IP 地址
$url = 'http://api.ipstack.com/' . $ip . '?access_key=' . $access_key;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);

$location = json_decode($output, true);
$ip = $location['ip'];

其中 $access_key 是我们注册第三方 API 时获得的访问密钥。

4. 使用 DNS 解析服务器主机名

通过使用 gethostbyname 函数,来直接解析域名得到 IP 地址。代码如下:

$ip = gethostbyname('www.example.com');

5. PHP-fpm通过fastcgi_param传递

在PHP-fpm环境下,可以通过在nginx的conf文件中的 fastcgi_param 传递环境变量 REMOTE_ADDR ,代码如下:

location ~ \.(php|html|htm)$ {
    fastcgi_pass unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param REMOTE_ADDR $remote_addr;
    include fastcgi_params;
}

插入用户登录日志操作示例

对于网站而言,用户登录日志是非常重要的,可以在出现问题时方便查错。下面是一个基本的插入登录日志的例子:

session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];
    if (check_login($username, $password)) {
        $_SESSION['username'] = $username;

        // 插入登录日志
        $ip = get_client_ip();
        $time = time();
        $sql = "INSERT INTO login_log (username, login_time, login_ip) VALUES ('$username', '$time', '$ip')";
        insert($sql);

        header('Location: index.php');
        exit();
    } else {
        echo '用户名或密码错误';
    }
}

其中, get_client_ip() 函数为获取用户 IP 地址的函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例 - Python技术站

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

相关文章

  • 微信小程序中实现一对多发消息详解及实例代码

    下面我将详细讲解如何在微信小程序中实现一对多发消息的完整攻略。 一、概述 在微信小程序中,实现一对多发消息的过程需要使用WebSocket协议。WebSocket是HTML5中新增的协议,实现了浏览器与服务器全双工通信,使得客户端与服务器之间的数据交换变得更加实时和高效。 二、具体实现 1.服务端代码 在服务端实现WebSocket协议,向所有客户端推送消息…

    PHP 2023年5月23日
    00
  • PHP 7.4 新语法之箭头函数实例详解

    PHP 7.4 新语法之箭头函数实例详解 在 PHP 7.4 中新增了箭头函数语法,这是一个非常实用的新功能,能够让PHP代码更加简洁易懂。本文主要介绍箭头函数的使用方法和实例。 基本语法 箭头函数与普通的PHP函数语法非常相似,只是在函数名称后面添加“=>”符号来表示这是一个箭头函数,然后可以接着添加函数的参数和函数体。下面是箭头函数的基本语法: (…

    PHP 2023年5月27日
    00
  • PHP中使用foreach()遍历二维数组的简单实例

    下面就来详细讲解一下“PHP中使用foreach()遍历二维数组的简单实例”的攻略。 什么是二维数组 首先来讲解一下什么是二维数组。在PHP中,数组是非常常用的一种数据类型。二维数组指的是数组中的每一个元素又是一个数组。可以通过以下语法来创建一个二维数组: $my_array = array( array(‘a’, ‘b’, ‘c’), array(‘d’,…

    PHP 2023年5月26日
    00
  • 解析php获取字符串的编码格式的方法(函数)

    在PHP中,要获取一个字符串的编码格式,可以使用以下3种方法: mb_detect_encoding函数 mb_detect_encoding函数是PHP内置的多字节字符集检测函数,可以用于检测字符串的编码格式。使用该函数前,需要确保PHP的mbstring扩展已经安装并启用。 该函数的语法如下: string mb_detect_encoding ( st…

    PHP 2023年5月26日
    00
  • RedmiBook 13 i7版值得买吗 RedmiBook 13 i7版上手体验及评测

    RedmiBook 13 i7版值得买吗 作为一款以性价比著称的笔记本品牌,小米笔记本的RedmiBook 13 i7版备受关注。它是一款性能优秀,价格亲民的笔记本电脑,该品牌的投入使其具有了一定的竞争力,但是是否值得购买呢?在这篇文章中,我们将进行详细的分析和评测。 外观设计 RedmiBook 13 i7版采用了金属机身,整体外观质感非常不错。轻薄便携是…

    PHP 2023年5月27日
    00
  • 如何基于PHP实现微信小程序pdf文件的预览功能

    实现微信小程序PDF文件预览功能需要进行以下步骤: 安装并配置 TCPDF TCPDF是一个开源的PHP类库,用于生成PDF文档。可以使用composer安装TCPDF: composer require tecnickcom/tcpdf 安装完成后,可以编写脚本测试TCPDF是否正常工作: require_once(‘vendor/autoload.php…

    PHP 2023年5月23日
    00
  • PHP常见的几种攻击方式实例小结

    当网站使用PHP作为后端语言时,常常会遭受各种恶意攻击。以下是一些常见的PHP攻击方式以及如何防范它们的方法: 代码注入攻击 攻击者向网站提交恶意数据,使后台程序将注入的代码执行,破坏系统基本功能,比如SQL注入攻击、XSS攻击等。 在开发过程中,需要注意以下几点: 合理的过滤和校验用户输入的数据,如使用PHP内置函数 filter_input() 进行过滤…

    PHP 2023年5月23日
    00
  • PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周等相关函数

    一、时间戳和日期互相转换 // 获取时间戳 $date = time(); // 获取当前时间戳 $date = mktime(0, 0, 0, 10, 10, 2020); // 获取指定时间的时间戳 2020年10月10日0时0分0秒 // 日期转换为时间戳 $date = “2019-08-08 08:08:08”; $timestamp = strt…

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