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


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

$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 failed: Name or service not known

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

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

10 53

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 на локальном сервере:

в файле / etc / 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 (), и я просто обновил свои файлы hosts

  1. Я вошел через SSH в CentOS server. Имя пользователя и пароль типа
  2. cd / etc/
  3. ls // "просто посмотреть список"
  4. vi hosts / / "edit the host file"
  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

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