プロが教える店舗&オフィスのセキュリティ対策術

わたくし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)


基本的な質問でたいへん恐縮ですが、
ご指導お願いいたします!

A 回答 (3件)

見当違いの回答かもしれませんが、


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

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

お礼日時:2005/03/19 01:07

こんにちは。


なぜエラーになったかわからないようなので、補足しておきます。
socketは電話にたとえられることがあります。
質問者さんのやってる状態は、電話をかけるときに

012-3456-7890営業課佐藤さん

と、ダイアルしてしまっているのと同じです。
PHPを使うと簡単に外部ドメインのサーバに接続できてしまいますが、WebサーバならHTTP、メールサーバならSMTPやPOPといったプロトコル(決まり事)が使われています。こうしたプロトコルに沿った方法でアクセスしないと迷惑がかかることありますので、まずは
business.yahoo.co.jp
ではなくて、
localhost
で試してからやってください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/19 01:05

ソケット使う必要がないなら


#1さんのおっしゃるようにすればよいかと。

ソケット使うなら
$fp=fsockopen("business.yahoo.co.jp", 80, $errno, $errstr, 30);

fputs($fp, "GET /prod/store/ HTTP/1.0\r\n\r\n");
ここを変えればよいかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/19 01:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!