Ответ 1
Если вы хотите отправлять данные GET в URL-адрес, вы должны использовать что-то простое, например file_get_contents();
$myGetData = "?var1=val1&var2=val2";
file_get_contents($url.$myGetData);
Вот фрагмент моего кода
$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']
Если вы хотите отправлять данные 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");
Это оставляет любую обработку ошибок, конечно, но это будет означать, что вы не теряете время, читая ответ.
У меня была аналогичная проблема на моем локальном сервере тестирования и локальных тестовых доменах, например: www.testdomain.loc, с функцией GetImageSize()
;
Решил его, добавив имя хоста в файл hosts на локальном сервере:
В файле /etc/hosts я добавил:
192.168.1.1 www.testdomain.loc
Надеюсь, это поможет кому-то
$url = "http:user:[email protected]//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, но я не уверен в написании.
EDIT: из комментариев и других ответов я понял, что вы захотите отправить HTTP-запрос указанному URL-адресу. методы, описанные в этом ответе, предназначены для тех случаев, когда вы хотите получать данные с удаленного URL-адреса. если вы хотите отправить данные, вы можете использовать http_request() для этого.
Я получал ту же ошибку fsocket(), и я только что обновил файлы хостов
надеюсь, что он решит вашу проблему.
для любого последующего запроса, пожалуйста, напишите мне на http://kingologic.com
В моем случае эта ошибка вызвана неправильной конфигурацией /etc/nsswitch.conf на debian.
Я заменил строку
hosts: files myhostname mdns4_minimal [NOTFOUND=return] dns
с
hosts: files dns
и все работает прямо сейчас.
Попробуйте установить ENV PATH. Добавьте путь PHP в ENV PATH.
Чтобы это расширение работало, есть файлы DLL, которые должны быть доступны для системы PATH для Windows. Информацию о том, как это сделать, см. В разделе "Вопросы и ответы", озаглавленный "Как добавить каталог PHP в PATH на Windows". Хотя копирование DLL файлов из папки PHP в системный каталог Windows также работает (поскольку системный каталог по умолчанию находится в системе PATH), это не рекомендуется. Для этого расширения требуются следующие файлы в PATH: libeay32.dll
простым словом, ваш сайт заблокирован для доступа к сети. может быть, вы автоматизировали некоторые script, и это привело к блокировке всего вашего сайта. лучший способ разрешить это - связаться с этим сайтом и рассказать о своей проблеме. если проблема является подлинной, они могут рассмотреть возможность разблокировки