Я застрял с этой ошибкой при попытке прочитать файл, который содержит 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 (): адрес не является допустимым PHP IPv4 или IPv6
Решаемые.
Мой код работал, я не получал запись 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);
}
}
}
ПРИМЕЧАНИЕ. Регулярное выражение, использованное здесь, было написано здесь @alex: Regex для сопоставления IP-адреса
Если это не помогает, то это может быть проблема конфигурации. Несколько других вещей, которые нужно проверить, которые могут помочь с устранением неполадок:
gethostbyaddr('127.0.0.1');
кинуть ту же ошибку?dig
команда с сервера для выдачи поиска по IP?Других решений пока нет …