file_get_contents завершается с ошибкой «getaddrinfo fail: ни один адрес не связан с именем хоста»

1

Я пытаюсь получить страницу с другого хоста. Я делаю так, как говорится в руководстве hph:

    $page = file_get_contents('http://www.example.com/');
    echo $page;

Но он терпит неудачу, и в журнале apache я получаю следующее:

[Mon Oct 12 18:58:47.676454 2015] [:error] [pid 2971] [client 127.0.0.1:49434] PHP Warning:  file_get_contents(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname in /var/www/html/digest/ftry.php on line 2
[Mon Oct 12 18:58:47.704659 2015] [:error] [pid 2971] [client 127.0.0.1:49434] PHP Warning:  file_get_contents(http://www.example.com/): failed to open stream: php_network_getaddresses: getaddrinfo failed: No address associated with hostname in /var/www/html/digest/ftry.php on line 2

Пытаясь выяснить причину неудачи, я проверил, что говорит nslookup. Когда я запускаю nslookup http://www.example.com/ он отвечает примерно так:

nslookup http://www.example.com/
Server:         94.242.57.130
Address:        94.242.57.130#53

** server can't find http://www.example.com/: NXDOMAIN

Когда я удаляю http:// из имени домена, он отлично работает, возвращает ip. Но когда я пытаюсь получить файл с file_get_contents без http://, он ищет файл в локальной файловой системе (и как он должен быть).

Я проверил phpinfo, allow_url_fopen находится On на локальных и мастер уровней. Я установил 94.242.57.130 имен в свой resolv.conf 94.242.57.130 (ближайший общедоступный dns).

  • 1
    Вот некоторый код, чтобы показать вам, что php получает для dns так же, как nslookup. $ dnsrecs = dns_get_record ('www.example.com'); foreach ($ dnsrecs as $ dnsrec) {foreach ($ dnsrec as $ label => $ val) {echo $ label. ':'. $ val. '<br>'; }}
  • 0
    @JasonK Это было интересно, dns_get_record вернул фактическую запись, но старый сбой в file_get_contents все еще продолжается. Я решил переключиться на curl .
Показать ещё 3 комментария
Теги:
dns
file-get-contents

1 ответ

0
Лучший ответ

Кажется, что allow_url_fopen отключен на вашем php.ini, поэтому file_get_contents не работает.
Вместо этого попробуйте использовать завиток:

$url = "http://www.example.com/";
$ch = curl_init();  
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$page = curl_exec($ch);
curl_close($ch);
echo $page;
  • 0
    Как я уже писал, я проверил phpinfo и allow_url_fopen это On . Я думаю, что мне придется переключиться на curl , но file_get_contents рекомендуется во всех руководствах, поэтому я хотел бы использовать его, если это было возможно.
  • 1
    Сервер DNS может иметь некоторые проблемы, попробуйте использовать серверы Google DNS, чтобы проверить, является ли проблема, 8.8.8.8 и 4.4.4.4
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню