Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 回显表中部分隐藏(IPV4或IPV6)的ip_Php - Fatal编程技术网

Php 回显表中部分隐藏(IPV4或IPV6)的ip

Php 回显表中部分隐藏(IPV4或IPV6)的ip,php,Php,我有一个表,其中包含IP信息的行中的一个变量正在被回显。我认为我的if语句有一个问题,因为如果我使用以下语句,那么我就可以得到要回显的变量: echo $row['log_ip'] = substr_replace ($row['log_ip'], $ipv4replacement, stripos ($row['log_ip'], $ipv4needle, $offset = 2)); 我当前的代码: $ipv6needle = ':'; $ipv4needle = '.'; $

我有一个表,其中包含IP信息的行中的一个变量正在被回显。我认为我的if语句有一个问题,因为如果我使用以下语句,那么我就可以得到要回显的变量:

echo $row['log_ip'] =  substr_replace ($row['log_ip'], $ipv4replacement, stripos     ($row['log_ip'], $ipv4needle, $offset = 2)); 
我当前的代码:

$ipv6needle = ':';
$ipv4needle = '.';
$ipv4replacement = '.***.***.***';
$ipv6replacement = ':****:****:****:****:****:****:****';
if (strpos($row['log_ip'], ':') !== FALSE) {
echo $row['log_ip'] =  substr_replace ($row['log_ip'], $ipv4replacement, stripos     ($row['log_ip'], $ipv4needle, $offset = 2));
else 
echo $row['log_ip'] =  substr_replace ($row['log_ip'], $ipv6replacement, stripos     ($row['log_ip'], $ipv6needle, $offset = 2)); }

你的代码充满了奇怪的任务,我不知道你想用它们实现什么,但这里有一个经过修改和重构的代码

<?php

$offset = 2;

if (strpos($row["log_ip"], ":") !== false) {
  $needle      = ".";
  $replacement = ".***.***.***";
}
else {
  $needle      = ":";
  $replacement = ":****:****:****:****:****:****:****";
}

$row["log_ip"] = substr_replace($row["log_ip"], $replacement, stripos($row["log_ip"], $needle, $offset));

echo $row["log_ip"];
对评论中问题的答复:

<?php

function mask_ip_address($ip_address) {
  if (strpos($ip_address, ".") !== false) {
    $parts = explode(".", $ip_address);
    return $parts[0] . str_repeat(".***", 3);
  }
  $parts = explode(":", $ip_address);
  return $parts[0] . str_repeat(":****", 7);
}

function mask_ip_address_test($ip_address, $expected) {
  assert($expected === mask_ip_address($ip_address));
}

mask_ip_address_test("17.0.0.1", "17.***.***.***");
mask_ip_address_test("fe80::200:5aee:feaa:20a2", "fe80:****:****:****:****:****:****:****");

感谢您的编辑,我无法将第一个示例正确格式化。这是我得到的输出:IP 2014年7月7日下午3:30。***.**.**.**.**2014年7月7日下午3:28:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***。至少我从你的代码中删除了语法错误,这样你现在就可以自己实现你想要的了。另外,使用一个IDE,例如帮助您理解语法的IDE。我只是想显示ip地址的前缀,第一组数字示例->ipv4:17.0.0.1=17.*.*.*或ipv6:fe80:200:5aee:feaa:20a2->fe80:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***:***。我试着改变偏移量,但没用。现在我明白了,看看我的扩展答案。嘿,很抱歉打扰你。。。在我的示例中,我将如何使用此函数来回显$row[log_ip]呢?