php network getaddresses: ошибка getaddrinfo: имя или служба не известны

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

$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: имя или служба не известны

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

EDIT: я забыл упомянуть, что я использую это для отправки данных GET в $s['url']

10 ответов


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

$myGetData = "?var1=val1&var2=val2";
file_get_contents($url.$myGetData);

вы не можете открыть соединение напрямую на пути на удаленном хосте с помощью 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"); 

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


у меня была аналогичная проблема на моем локальном testserver и локальных testdomains, например: www.домена testdomain.ЛОК с функцией GetImageSize();

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

в файле /и т. д./хосты я добавил:

192.168.1.1 www.testdomain.loc

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


$url = "http:user:pass@//www.example.com/abc.php?var1=def";
$url = urlencode($url);
$contents = file_get_contents(urldecode($url));
echo $contents;

вы пытаетесь открыть сокет для файла на удаленном хосте, который не является правильным. вы можете установить соединение сокета (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, но Я не уверен насчет писательства.

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


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

  1. Я вошел через SSH в CentOS server. Имя пользователя и пароль тип
  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


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

Я был заменен string

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

С

hosts:          files dns

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


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

для Centos 6 и 7:

service php-fpm restart 

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

для того, чтобы это расширение работало, есть DLL-файлы, которые должны быть доступны для системного пути Windows. Для получения информации о том, как это сделать, см. FAQ под названием "Как добавить каталог PHP в путь в Windows". Хотя копирование DLL-файлов из папки PHP в системный каталог Windows также работает (поскольку системный каталог по умолчанию находится в пути системы), это не рекомендуется. Это расширение требует, чтобы следующие файлы были в пути: libeay32.dll файлы

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


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