web-dev-qa-db-ja.com

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:名前またはサービスが不明です

これを使用してGETデータを$s['url']に送信します

理由がわかりません。どんな助けも大歓迎です。

59
Rob

GETデータをURLにのみ送信する場合は、file_get_contents()のような簡単なものを使用する必要があります。

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

接続を直接開くことはできませんパスへ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"); 

もちろん、エラー処理はユーザーに任されていますが、応答を読む時間を無駄にしないということです。

36
zombat

ローカルテストサーバーとローカルテストドメインで同様の問題が発生しました。例:www.testdomain.loc with the function GetImageSize();

ローカルサーバー上のhostsファイルにホスト名を追加することで解決しました。

ファイルに/ etc/hostsを追加しました:

192.168.1.1 www.testdomain.loc

これが誰にも役立つことを願っています

22
Johan

このような問題があった場合( https://github.com/PHPMailer/PHPMailer )、PHPをリロードするだけですべてが機能し始めます

centos 6および7の場合:

service php-fpm restart 
3
Sanya Snex
$url = "http://user:[email protected]/abc.php?var1=def";
$contents = file_get_contents($url);
echo $contents;
3
Ap.Muthu

正しくないリモートホスト上のファイルへのソケットを開こうとしています。リモートホストのポート番号へのソケット接続(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() を使用してこれを実行できます。

2
farzad

私はfsocket()と同じエラーを受け取っていたので、ちょうどhostsファイルを更新しました

  1. CentOSサーバーでSSH経由でログインしました。 USERNAMEおよびPASSWORDタイプ
  2. cd/etc /
  3. ls //「リストを見るだけ」
  4. vi hosts //「ホストファイルの編集」
  5. i // "ファイルを挿入モードにする"
  6. 95.183.24.10 my [mail_server_name](私の場合)( "mail.kingologic.com")
  7. ESCキーを押す
  8. zZを押す

それがあなたの問題を解決することを願っています

さらに質問がある場合は、 http://kingologic.com

1
Ali Khurram

私の場合、このエラーは、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

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

0
DucTM

簡単なWordでは、あなたのサイトはネットワークにアクセスするためにブロックされています。何らかのスクリプトを自動化して、ウェブサイト全体がブロックされた可能性があります。これを解決するより良い方法は、そのサイトに連絡して問題を伝えることです。問題が本物である場合、ブロック解除を検討する場合があります

0
Steeve