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

下面我会详细讲解如何实现获取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日

相关文章

  • PHP编写学校网站上新生注册登陆程序的实例分享

    下面我来详细讲解如何用PHP编写学校网站上的新生注册登陆程序。 一、准备工作 在开始编写程序之前,我们需要先完成以下准备工作: 服务器环境:需要在本地或远程搭建Apache、MySQL、PHP的服务器环境。 数据库设计:需要设计好数据库中的表结构,包括用户表、密码表等。 网页界面设计:需要设计好注册、登陆页面的界面,包括表单元素等。 二、实现流程 实现新生注…

    PHP 2023年5月23日
    00
  • PHP解析目录路径的3个函数总结

    以下是关于“PHP解析目录路径的3个函数总结”的完整攻略: 概述 在PHP中,解析目录路径是非常常见的操作,PHP提供了多种函数来满足不同场景需求。本文总结了3个较常用的函数,分别为basename、dirname和pathinfo。 函数一:basename basename函数用于获取路径中的文件名部分,可以是相对路径或绝对路径。例如: $path = …

    PHP 2023年5月25日
    00
  • PHP 用数组降低程序的时间复杂度

    下面是PHP用数组降低程序时间复杂度的完整攻略: 1. 什么是时间复杂度? 时间复杂度是算法执行所需的时间,通常用 “O(n)” 表示,其中 n 是程序输入的规模或者说大小。时间复杂度可以用来衡量算法的效率,通常我们会尽可能降低时间复杂度。 2. 数组降低时间复杂度的原理 数组是一种数据结构,用于存储固定大小的元素序列。在编程过程中,使用数组可以降低时间复杂…

    PHP 2023年5月26日
    00
  • php中foreach结合curl实现多线程的方法分析

    当我们需要对多个网站进行数据抓取时,可以使用多线程来加速抓取的效率。PHP中的curl库可以用来发送http请求来进行数据抓取,而结合foreach循环,可以实现多个curl请求同时发送,进而实现多线程抓取的效果。 一、curl库的基本使用 要使用curl库发送http请求,我们首先需要开启curl扩展,可以在php.ini文件中将其打开,或者使用函数ext…

    PHP 2023年5月26日
    00
  • PHP关联数组的10个操作技巧

    下面将详细讲解“PHP关联数组的10个操作技巧”的完整攻略。 1. 创建关联数组 关联数组是一种特殊的数组,它使用自定义的键名来代替常规的索引数字。在PHP中,我们可以通过以下方式创建关联数组: $myArray = array( "name" => "John", "age" => 2…

    PHP 2023年5月26日
    00
  • PHP 内置WEB服务器的简单使用

    下面是详细讲解PHP内置Web服务器的简单使用的完整攻略: 什么是PHP内置Web服务器 PHP内置Web服务器是一个能够在开发测试过程中轻松测试PHP应用程序的快速、小型的Web服务器。 它是从PHP 5.4.0版本开始引入的,默认情况下,PHP内置Web服务器只能在开发环境中使用,不能用于生产环境中。 PHP内置Web服务器的简单使用步骤 步骤一:启动内…

    PHP 2023年5月23日
    00
  • php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比

    在 PHP 中,我们可以使用多种函数来在数组中查找元素是否存在,这些函数包括 in_array(),array_search() 和 foreach 循环。这些函数的性能也不尽相同,下面就简要介绍一下这三种方式。 使用 in_array() 函数查找数组元素 in_array() 函数用于检查指定值是否在一个数组中存在。下面是 示例代码: <?php …

    PHP 2023年5月26日
    00
  • PHP实现的链式队列结构示例

    下面就让我来详细讲解“PHP实现的链式队列结构示例”的完整攻略。 一、什么是链式队列结构 链式队列结构是指使用链表的数据结构来实现队列。队列的一端叫做队尾,在队尾添加元素;另一端叫做队头,在队头删除元素。在链式队列中,队头和队尾分别对应链表的头和尾。 二、链式队列结构的操作 链式队列结构的主要操作包括入队(enqueue)和出队(dequeue)。入队操作向…

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