68

これが私のコードの抜粋です

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

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

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

4

10 に答える 10

38

を使用して、リモート ホスト上のパスへの直接接続を開くことはできませんfsockopenwww.mydomain.net/1/file.php最初のパラメーターの有効な値がホストのみの場合、urlにはパスが含まれますwww.mydomain.net

リモート URL にアクセスしようとしている場合は、file_get_contents()が最適です。その関数に完全な URL を指定すると、通常の HTTP リクエストを使用してその場所にあるコンテンツをフェッチします。

HTTP 要求のみを送信して応答を無視する場合は、HTTP 要求ヘッダーを使用して手動で送信し、応答を無視することができます。ただし、接続を開くが必ずしも応答を読み取るとは限らないcURLまたは単純な古いfopen()fsockopen()の方が簡単かもしれません。でやりたい場合は、次のようになります。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"); 

もちろん、エラー処理はあなた次第ですが、応答を読む時間を無駄にしないことを意味します。

于 2010-04-18T08:11:56.670 に答える
28

ローカルのテストサーバーとローカルのテストドメインで同様の問題がありましたGetImageSize()

ローカルサーバーのホストファイルにホスト名を追加して解決しました:

私が追加したファイル/etc/hostsで:

192.168.1.1 www.testdomain.loc

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

于 2012-10-20T09:35:30.273 に答える
24

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

$myGetData = "?var1=val1&var2=val2";
file_get_contents($url.$myGetData);
于 2010-04-18T08:16:44.503 に答える
4
$url = "http://user:pass@www.example.com/abc.php?var1=def";
$contents = file_get_contents($url);
echo $contents;
于 2013-03-24T15:07:36.337 に答える
2

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

于 2010-04-18T08:06:24.127 に答える
2

fsocket() と同じエラーが発生し、ホスト ファイルを更新したところです。

  1. CentOSサーバーにSSH経由でログインしました。ユーザー名とパスワードの種類
  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で私に連絡してください。

于 2016-02-26T15:03:31.677 に答える
1

私の場合、このエラーは、debian の /etc/nsswitch.conf 設定が間違っていることが原因です。

文字列を交換しました

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

hosts:          files dns

そして、すべてが今すぐ機能します。

于 2016-11-10T07:34:05.293 に答える
0

ENV PATHを設定してみてください。PHP パスを ENV PATH に追加します。

この拡張機能が機能するためには、Windows システム PATH で使用できる必要がある DLL ファイルがあります。これを行う方法については、「Windows で PHP ディレクトリを PATH に追加する方法」というタイトルの FAQ を参照してください。PHP フォルダーから Windows システム ディレクトリに DLL ファイルをコピーすることもできますが (システム ディレクトリは既定でシステムの PATH にあるため)、これはお勧めできません。この拡張機能では、次のファイルが PATH にある必要があります: libeay32.dll

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

于 2015-06-06T06:40:55.000 に答える
0

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

于 2017-07-23T13:18:15.307 に答える