• ベストアンサー

fsockopenで下層ページの内容を取得するには

わたくしphp歴4ヶ月のものです。 fsockopenで下層ページの内容を取得するにはどうすればよいのでしょうか。説明がうまくできないので例を書きます。 business.yahoo.co.jp/prod/store を指定するとエラーが出ます。 例1) $fp=fsockopen("business.yahoo.co.jp/prod/store", 80, $errno, $errstr, 30); if(!$fp) { echo "$errstr ($errno)<br>\n"; } else{ fputs($fp, "GET / HTTP/1.0\r\n\r\n"); while(!feof($fp)) { echo fgets ($fp,600); } fclose($fp); } business.yahoo.co.jpを指定するとエラーが出ません。 例2) $fp=fsockopen("business.yahoo.co.jp", 80, $errno, $errstr, 30); if(!$fp) { echo "$errstr ($errno)<br>\n"; } else{ fputs($fp, "GET / HTTP/1.0\r\n\r\n"); while(!feof($fp)) { echo fgets ($fp,600); } fclose($fp); } 下層ディレクトリのページはどのように指定すればよいのでしょうか。/←スラッシュに問題があるのでしょうか。 その場合のエラーの内容は下記です。 Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/mero/public_html/test.php on line 23 Warning: fsockopen(): unable to connect to business.yahoo.co.jp/prod/store:80 in /home/mero/public_html/test.php on line 23 No such file or directory (2) 基本的な質問でたいへん恐縮ですが、 ご指導お願いいたします!

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

見当違いの回答かもしれませんが、 仮想フォルダとかが、実際には、異なるのかもしれません。 ソケットでなくて、 単純に $fp=fopen("http://business.yahoo.co.jp/prod/store","r"); とかしてみてはどうでしょう

hachimitsu2000
質問者

お礼

見当違いではございません。おっしゃる通りでござます。この関数を使えば良かったのですね。難しく考えすぎてました。

その他の回答 (2)

回答No.3

こんにちは。 なぜエラーになったかわからないようなので、補足しておきます。 socketは電話にたとえられることがあります。 質問者さんのやってる状態は、電話をかけるときに 012-3456-7890営業課佐藤さん と、ダイアルしてしまっているのと同じです。 PHPを使うと簡単に外部ドメインのサーバに接続できてしまいますが、WebサーバならHTTP、メールサーバならSMTPやPOPといったプロトコル(決まり事)が使われています。こうしたプロトコルに沿った方法でアクセスしないと迷惑がかかることありますので、まずは business.yahoo.co.jp ではなくて、 localhost で試してからやってください。

hachimitsu2000
質問者

お礼

ああ、非常に分かりやすいご返信ありがとうございます。ホントありがとうございます。

回答No.2

ソケット使う必要がないなら #1さんのおっしゃるようにすればよいかと。 ソケット使うなら $fp=fsockopen("business.yahoo.co.jp", 80, $errno, $errstr, 30); fputs($fp, "GET /prod/store/ HTTP/1.0\r\n\r\n"); ここを変えればよいかと。

hachimitsu2000
質問者

お礼

ありがとうございます。そうすればこの関数でも良かったのですね。ほんとう勉強になります!!

関連するQ&A