phpでURLをfile_get_contentsやfopenする場合、自サーバだとNo route to hostエラーが出ます。

自サーバだからといって、ローカルファイルとして処理するとcgi処理されないので困ります。
分岐させたくないのでURLとして処理したいのですが、
bindはどう設定したらいいでしょうか。bindを使わないで済む方法も募集してます。

回答の条件
  • 1人2回まで
  • 登録:2008/02/06 08:57:54
  • 終了:2008/02/07 16:19:58

ベストアンサー

id:tezcello No.3

tezcello回答回数460ベストアンサー獲得回数692008/02/07 14:36:44

ポイント60pt

> phpでURLをfile_get_contentsやfopenする場合、自サーバだとNo route to hostエラーが出ます。

他のサーバなら問題無く読み込める(オープンできる)のでしょうか?

それもNGなら、

allow_url_fopen が有効になっていないと思います。

http://jp2.php.net/manual/ja/ref.filesystem.php#ini.allow-url-fo...


また、単にドメイン名が引けないだけかも知れませんね。

OSインストール時にホスト名をFQDNで与えていますか?

そうでなければ、

名前解決をしようとすると、ルータに聞くことになる。

ルータが外部のDNSから得た答えはグローバルIPアドレス。

そこに問合せても、だれも答えてくれない(答えるべきなのは自分自身)から結局失敗。

って事ではないですか?


/etc/hosts に

192.168.11.2 www.domain.com

を追加するだけでOKかもしれませんね。

(ホスト名はwwwとしましたがご利用の環境に合わせて下さい)


この辺りで解決しなければ、ネットワーク構成等が知りたいです。

+ router(192.168.11.1)
|
+ server(192.168.11.2)
|
+ PC(192.168.11.ddd)

こんな感じを予想しますがどうでしょうか?

で、質問者さんのコメントより、ping の結果は

server -> localhost OK

server -> 192.168.11.2 ?

server -> domain.com ?

PC -> 192.168.11.2 OK

PC -> domain.com NG

 ?の部分がどうなっているか知りたいです。(違っていたら修正して下さい)

id:yshkw

/etc/hostsが

192.168.11.9 www.domain.com

のような間違った設定になっていました。

ここを正したところうまく行くようになりました。

問題を切り分けるにもこんなに可能性があったのですね。

ありがとうございました。

2008/02/07 16:15:59

その他の回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262008/02/06 11:43:29

ポイント15pt

No route to host エラーが出るのは bind とは関係ないと思います。そもそも接続しようとしているホストに ping も届かないんじゃないでしょうか?

ローカルで httpd が起動しているならまずは http://localhost/ に対して file_get_contents をしてみてどうなるか?pingは通るのか?ホスト名ではなくIPでURLを指定したらどうなるか?など、問題の切り分けが必要だと思います。


また、bindについても書かれているので答えておきますが、別に自分でbindを立てる必要はありません。

名前解決がしたいなら /etc/resolv.conf にプロバイダから指定されたDNSサーバのIPを書けばよいでしょう。

複数ある場合は以下のようにnameserverを列挙すればよいです。

nameserver a.b.c.d
nameserver a.b.c.e
id:yshkw

Warning: file_get_contents(http://localhost/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in

ping localhostは通りますが

ping domain.comでは通りません

ping 192.168.11.2では通ります

とでました

2008/02/06 15:00:40
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402008/02/06 15:14:39

ポイント5pt

PHPが動いているマシンとfile_get_contentsしようとする先のマシンが

同一なら、localhostでアクセス可能だと思うのですが・・。

変わりに127.0.0.1でアクセスしても、エラーになりますか?

id:yshkw

おっしゃるとおりなのですが、アクセスできません。

file_get_contents(http://127.0.0.1/) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in ...

となりましたね。ちなみに/etc/resolv.conf はルータを指定しています。

nameserver 192.168.11.1

2008/02/07 00:11:26
id:tezcello No.3

tezcello回答回数460ベストアンサー獲得回数692008/02/07 14:36:44ここでベストアンサー

ポイント60pt

> phpでURLをfile_get_contentsやfopenする場合、自サーバだとNo route to hostエラーが出ます。

他のサーバなら問題無く読み込める(オープンできる)のでしょうか?

それもNGなら、

allow_url_fopen が有効になっていないと思います。

http://jp2.php.net/manual/ja/ref.filesystem.php#ini.allow-url-fo...


また、単にドメイン名が引けないだけかも知れませんね。

OSインストール時にホスト名をFQDNで与えていますか?

そうでなければ、

名前解決をしようとすると、ルータに聞くことになる。

ルータが外部のDNSから得た答えはグローバルIPアドレス。

そこに問合せても、だれも答えてくれない(答えるべきなのは自分自身)から結局失敗。

って事ではないですか?


/etc/hosts に

192.168.11.2 www.domain.com

を追加するだけでOKかもしれませんね。

(ホスト名はwwwとしましたがご利用の環境に合わせて下さい)


この辺りで解決しなければ、ネットワーク構成等が知りたいです。

+ router(192.168.11.1)
|
+ server(192.168.11.2)
|
+ PC(192.168.11.ddd)

こんな感じを予想しますがどうでしょうか?

で、質問者さんのコメントより、ping の結果は

server -> localhost OK

server -> 192.168.11.2 ?

server -> domain.com ?

PC -> 192.168.11.2 OK

PC -> domain.com NG

 ?の部分がどうなっているか知りたいです。(違っていたら修正して下さい)

id:yshkw

/etc/hostsが

192.168.11.9 www.domain.com

のような間違った設定になっていました。

ここを正したところうまく行くようになりました。

問題を切り分けるにもこんなに可能性があったのですね。

ありがとうございました。

2008/02/07 16:15:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません