我在尝试读取一个文件时遇到了这个错误,该文件包含用新行分隔的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。我已经用主机185.1.1.1检查了它,它返回了实际的IP而不是域。然后检查了IP,我确信他们有PTR记录,这让我大吃一惊。但我不确定这个错误到底是如何修复的。
老实说,我认为分解原始文件数据并抱着最好的希望可能不是实现这一目标的最佳方式。相反,您应该尝试使用正则表达式提取所需的确切数据,这样您就可以确定提取的值是正确的。
试试这样的东西:
$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是由@alexhere:regex编写的,用于匹配IP地址
如果这没有帮助,那么可能是配置问题。其他一些可能有助于故障排除的检查事项包括:
gethostbyaddr('127.0.0.1');
是否抛出相同的错误- 你有防火墙阻止DNS请求通过吗
- 您可以使用服务器上的
dig
命令在IP上发布查找吗