gpt4 book ai didi

PHP IPv4 和 IPv6 函数存储在数据库中

转载 作者:行者123 更新时间:2023-11-29 00:29:01 24 4
gpt4 key购买 nike

我想存储 IP 地址以及用户注册、帖子、上传等。我以前制作的网站一直使用 ip2long/long2ip 并将其存储为 UNSIGNED INT 因为 IPv4 是我唯一关心的问题。所以我会通过 ip2long 运行 IP 地址,存储它,当我检索它时,使用 long2ip。但现在我想确保它更适合 future 并同时处理 IPv4 和 IPv6。

这是我迄今为止想出的同时处理 IPv4 和 IPv6 的函数:

function ipCheck()
{
// Get IP Address
if (!empty($_SERVER['HTTP_CLIENT_IP'])) // Shared client
{
$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
}
else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) // Proxy address
{
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ipAddress = $_SERVER['REMOTE_ADDR']; // User viewing
}

// Over IP for testing
/*
IP Examples for testing

IPv4: 64.233.160.0
IPv6: 2607:f0d0:1002:51::4
IPv6: 2607:f0d0:1002:0051:0000:0000:0000:0004
*/

$ipAddress = '2607:f0d0:1002:0051:0000:0000:0000:0004'; // Comment out this line for actual IP

// Validate IP
if (filter_var($ipAddress, FILTER_VALIDATE_IP))
{
if (strpos($ipAddress, ':') !== false)
{
$ipType = 'IPv6';
$ipAddressDB = inet_pton($ipAddress);
}
else
{
$ipType = 'IPv4';
$ipAddressDB = ip2long($ipAddress);
}
}
else
{
$ipType = 'Invalid';
$ipAddressDB = $ipAddress;
}

// Display results
echo '<strong>IP Type: </strong>'.$ipType.'<br />',
'<strong>IP Address: </strong>'.$ipAddress.'<br />',
'<strong>DatabaseIP: </strong>'.$ipAddressDB;
}

ipCheck();

我个人没有 IPv6 地址,因此出于测试目的我覆盖了 $ipAddress 变量。

IPv4 地址一切正常,但 IPv6 地址的 $ipAddressDB 返回值 &(diamond-with-question-mark)(diamond-with-question-mark)Q 当我使用 2607:f0d0:1002:0051:0000:0000:0000:0004 测试 IP 时,我真的不知道为什么?我使用的 inet_pton 错了吗?我必须添加一些东西吗?是不是因为测试IPv6地址?

我假设一旦我开始工作,因为我们需要存储在 2 列中,我为数据库 IP 创建 2 个变量,如果它是 IPv4,我将它分配给变量 1 并将变量 2 留空。然后如果是IPv6,我把它分开,前半部分放在变量1,第二部分放在变量2。然后在插入/选择时,如果第二列是空的,我们可以假设它是一个IPv4地址吗?

我什至不能 100% 确定我正在尝试做的事情是否真的可行?如果不是,是否直接使用 IPv6 地址(不使用 inet_pton),然后以这种方式拆分它们会更好吗?

最佳答案

您正在查看二进制形式的地址。 “&”为UTF-8 0x26,0xf0和0xd0为无效UTF-8(显示为“�”),“Q”为UTF-8 0x51,其他字节为空显示。在存储之前将字节串编码为十六进制(然后您可以以完全相同的方式处理 IPv4 地址)。

关于PHP IPv4 和 IPv6 函数存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com