【发布时间】:2016-12-01 22:08:36
【问题描述】:
我在尝试读取包含由新行分隔的 IP 地址的文件时遇到此错误。我想要做的是阅读我的包含一堆 IP 的文件并检查它们是否有正确的记录。这是我的代码:
$file = "test.sh";
if (is_file($file) && is_readable($file)) {
$get_file_data = file_get_contents($file);
$turn_to_array = explode("\n", $get_file_data);
foreach ($turn_to_array as $key => $value) {
if (filter_var($value, FILTER_VALIDATE_IP)) {
echo gethostbyaddr(trim($value));
} else {
echo "IP invalid";
}
}
}
我的 test.sh 文件如下所示:
编辑: 示例 IP
180.1.1.1
181.1.1.2
我需要添加一些特定的测试来解析文件还是有其他问题?
使用非常独特的方法导致的错误:
警告:gethostbyaddr():地址不是有效的 IPv4 或 IPv6 PHP
解决了。
我的代码正常工作,我没有正确获取 rdns 记录,因为这些 IP 不存在它。我用 host 185.1.1.1 检查了它,它返回的是实际 IP 而不是域。然后检查我确信他们有 PTR 记录的 IP,然后它就醒了。但我不确定实际上是如何修复错误的。
【问题讨论】:
-
在这种情况下使用
PHP_EOL时要小心。您运行它的服务器可能是 *nix 并使用\n,但该文件可能是在 Windows 上生成的,因此具有\r\n -
只使用
file(而不是file_get_contents和explode(PHP_EOL。还要var_dump你的变量$value来确认它是否符合预期。 -
@TessellatingHeckler x.x.x 只是 IP 的掩码。我正在测试我的 Debian。
-
@MilosM,但您的文件是否包含
180.x.x.x?或者它是否包含一堆符合该模式的真实 IP 地址,例如180.1.2.3? -
在检查之前尝试
trimming 您的 IP 地址。
标签: php ip gethostbyaddr