ここに私のコードのスニペットがあります
$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:名前またはサービスが不明です
これを使用して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リクエストのみを送信し、レスポンスを無視する場合は、couldfsockopen()
を使用し、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 with the function GetImageSize()
;
ローカルサーバー上のhostsファイルにホスト名を追加することで解決しました。
ファイルに/ etc/hostsを追加しました:
192.168.1.1 www.testdomain.loc
これが誰にも役立つことを願っています
このような問題があった場合( https://github.com/PHPMailer/PHPMailer )、PHPをリロードするだけですべてが機能し始めます
centos 6および7の場合:
service php-fpm restart
$url = "http://user:[email protected]/abc.php?var1=def";
$contents = file_get_contents($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ストリームラッパー(httpスキーマを使用してURLのファイルリソースに対するアクションを処理する)がデータの書き込みをサポートするとは思わない。 fread()を使用してHTTPを介してURLのコンテンツを読み取ることができますが、書き込みについてはわかりません。
編集:コメントやその他の回答から、指定されたURLにHTTPリクエストを送信したいと思いました。この回答で説明されている方法は、リモートURLからデータを受信する場合に使用します。データを送信する場合は、 http_request() を使用してこれを実行できます。
私はfsocket()と同じエラーを受け取っていたので、ちょうどhostsファイルを更新しました
それがあなたの問題を解決することを願っています
さらに質問がある場合は、 http://kingologic.com
私の場合、このエラーは、debianの/etc/nsswitch.conf設定が間違っているために発生しました。
文字列を置き換えました
hosts: files myhostname mdns4_minimal [NOTFOUND=return] dns
と
hosts: files dns
そして今すぐすべてが機能します。
ENV PATHを設定してみてください。 PHPパスをENV PATHに追加します。
この拡張機能が機能するためには、WindowsシステムPATHで使用できる必要があるDLLファイルがあります。これを行う方法については、「FAQディレクトリをWindowsのPATHに追加する方法」というタイトルのPHPを参照してください。 DLLフォルダーからWindowsシステムディレクトリにPHPファイルをコピーすることもできますが(システムディレクトリはデフォルトでシステムのPATHにあるため)、これはお勧めしません。この拡張機能では、次のファイルがPATHに含まれている必要があります。libeay32.dll
簡単なWordでは、あなたのサイトはネットワークにアクセスするためにブロックされています。何らかのスクリプトを自動化して、ウェブサイト全体がブロックされた可能性があります。これを解決するより良い方法は、そのサイトに連絡して問題を伝えることです。問題が本物である場合、ブロック解除を検討する場合があります