php_network_getaddresses: getaddrinfo не удалось: имя или служба неизвестна - PullRequest
58 голосов
/ 18 апреля 2010

Вот фрагмент моего кода

$fp = fsockopen($s['url'], 80, $errno, $errstr, 5);
if($fp){
        fwrite($fp, $out);
        fclose($fp);

Когда я запускаю его, он выдает:

невозможно подключиться к www.mydomain.net/1/file.php:80 (php_network_getaddresses: сбой getaddrinfo: имя или служба неизвестна

Я использую это для отправки данных GET на $s['url']

Я не могу понять, почему. Любая помощь будет принята с благодарностью.

Ответы [ 10 ]

36 голосов
/ 18 апреля 2010

Невозможно открыть соединение напрямую с путем на удаленном хосте, используя fsockopen. URL www.mydomain.net/1/file.php содержит путь, когда единственным допустимым значением для этого первого параметра является хост, www.mydomain.net.

Если вы пытаетесь получить доступ к удаленному URL-адресу, то file_get_contents () - ваш лучший выбор. Вы можете предоставить полный URL-адрес этой функции, и он будет извлекать содержимое в этом месте с помощью обычного HTTP-запроса.

Если вы хотите отправить только HTTP-запрос и игнорировать ответ, вы можете использовать fsockopen() и вручную отправлять заголовки HTTP-запроса, игнорируя любой ответ. Это может быть проще с cURL или с простым старым fopen () , который откроет соединение, но не обязательно прочитает какой-либо ответ. Если вы хотите сделать это с fsockopen(), это может выглядеть примерно так:

$fp = fsockopen("www.mydomain.net", 80, $errno, $errstr, 30);
fputs($fp, "GET /1/file.php HTTP/1.1\n");
fputs($fp, "Host: www.mydomain.net\n");
fputs($fp, "Connection: close\n\n"); 

Это, конечно, оставляет любую обработку ошибок на ваше усмотрение, но это будет означать, что вы не будете тратить время на чтение ответа.

22 голосов
/ 20 октября 2012

У меня была похожая проблема на локальном тестовом сервере и локальных тестовых доменах, например: www.testdomain.loc с функцией GetImageSize();

Решено, добавив имя хоста в файл hosts на локальном сервере:

В файле / etc / hosts я добавил:

192.168.1.1 www.testdomain.loc

Надеюсь, это кому-нибудь поможет

22 голосов
/ 18 апреля 2010

Если вы хотите отправить данные GET только по URL-адресу, вы должны использовать нечто простое, например file_get_contents ();

$myGetData = "?var1=val1&var2=val2";
file_get_contents($url.$myGetData);
3 голосов
/ 24 марта 2013
$url = "http://user:pass@www.example.com/abc.php?var1=def";
$contents = file_get_contents($url);
echo $contents;
2 голосов
/ 12 февраля 2018

Была такая проблема (с https://github.com/PHPMailer/PHPMailer), просто перезагрузите PHP и все начало работать

для Centos 6 и 7:

service php-fpm restart 
2 голосов
/ 18 апреля 2010

вы пытаетесь открыть сокет для файла на удаленном хосте, что неверно. Вы можете установить сокет-соединение (TCP / UDP) с номером порта на удаленном хосте. поэтому ваш код должен быть таким:

fsockopen('www.mysite.com', 80);

если вы пытаетесь создать ресурс указателя файла для удаленного файла, вы можете использовать функцию fopen (). но для этого вам также необходимо указать протокол приложения.

PHP предоставляет потоковые обертки по умолчанию для открываемых файлов URL. на основе схемы URL соответствующая потоковая оболочка будет вызываться внутри. URL, который вы пытаетесь открыть, не имеет допустимой схемы для этого решения. убедитесь, что в нем есть схема типа "http://"" или "ftp: //".

поэтому код будет выглядеть так:

$fp = fopen('http://www.mysite.com/path/file.txt');

Кроме того, я не думаю, что оболочка потока HTTP (которая обрабатывает действия с файловыми ресурсами на URL-адресах с http-схемой) поддерживает запись данных. Вы можете использовать fread () для чтения содержимого URL через HTTP, но я не уверен насчет записи.

EDIT: из комментариев и других ответов я понял, что вы хотите отправить HTTP-запрос на указанный URL-адрес. методы, описанные в этом ответе, предназначены для получения данных с удаленного URL-адреса. если вы хотите отправить данные, вы можете использовать http_request () для этого.

1 голос
/ 10 ноября 2016

В моем случае эта ошибка вызвана неправильной конфигурацией /etc/nsswitch.conf в debian.

Мне заменили строку

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

с

hosts:          files dns

и все работает прямо сейчас.

1 голос
/ 26 февраля 2016

Я получаю ту же ошибку, что и fsocket (), и я только что обновил файлы хоста

  1. Я зарегистрировался через SSH на сервере CentOS. Имя пользователя и пароль тип
  2. cd / etc /
  3. ls // "просто посмотреть список"
  4. vi hosts // "Редактировать файл хоста"
  5. i // "перевести файл в режим вставки"
  6. 95.183.24.10 [mail_server_name] в моем случае ("mail.kingologic.com")
  7. Нажмите клавишу ESC
  8. нажмите ZZ

надеюсь, это решит вашу проблему

для любого дальнейшего запроса, пожалуйста, пинг меня на http://kingologic.com

0 голосов
/ 23 июля 2017

Проще говоря, ваш сайт заблокирован для доступа к сети.возможно, вы автоматизировали какой-то скрипт, и это привело к блокировке всего вашего сайта.лучший способ решить эту проблему - обратиться на этот сайт и сообщить о своей проблеме.если проблема подлинная, они могут рассмотреть возможность разблокировки

0 голосов
/ 06 июня 2015

Попробуйте установить ENV PATH . Добавьте путь PHP в ENV PATH.

Чтобы это расширение работало, существуют файлы DLL, которые должны быть доступны в системной переменной PATH Windows. Информацию о том, как это сделать, см. В разделе часто задаваемых вопросов под названием «Как добавить мой каталог PHP в PATH в Windows». Хотя копирование файлов DLL из папки PHP в системный каталог Windows также работает (поскольку системный каталог по умолчанию находится в системной переменной PATH), это не рекомендуется. Это расширение требует наличия следующих файлов в ПУТИ: libeay32.dll

http://php.net/manual/en/openssl.installation.php

...