在试图读取一个包含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():Address不是有效的IPv4或IPv6
解决了。
我的代码是工作的,我没有得到正确的rdns记录,因为这些IP不存在,我用主机185.1.1.1检查了它,它返回了实际的IP非域。然后查一下IP,我确定他们有PTR记录,结果成功了。但我不确定错误究竟是如何修正的。
发布于 2016-07-27 18:48:54
老实说,我认为爆炸原始文件数据,并希望最好的可能不是最好的方式来实现这一点。相反,您应该尝试使用正则表达式提取所需的确切数据,以便确定您正在提取正确的值。
试着做这样的事情:
$data = file_get_contents($file);
// This regex matches things that resemble an IP4 address
if (preg_match_all("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/", $data, $addresses)) {
foreach ($addresses as $address) {
// Need to verify it ACTUALLY is a valid IP address
if (filter_var($address, FILTER_VALIDATE_IP)) {
echo gethostbyaddr($address);
}
}
}
注意:此处使用的regex是@alex:Regex to match an IP address编写的。
如果这没有帮助,那么它可能是一个配置问题。需要检查的其他一些可能有助于故障排除的事情是:
gethostbyaddr('127.0.0.1');
会抛出相同的错误吗?dig
命令对IP发出查找吗?https://stackoverflow.com/questions/38620727
复制相似问题