[PHP-users 14894]Re: 他サーバーからのDBデータ参照について

NAKAMURA Takeshi 1yen @ sh.rim.or.jp
2003年 4月 24日 (木) 21:48:35 JST


仲村です。

 大変そうですね...

From: lavlav @ paw.hi-ho.ne.jp
Date: Thu, 24 Apr 2003 21:23:14 +0900
Subject: [PHP-users 14892] Re: 他サーバーからのDBデータ参照について

>> クリック広告では、広告を(渡されるIDなどの値によって差し替え)表示するプ
>> ログラムをAサーバーに設置し、掲載サイト(Bサーバー)側に設置したプログラム
>> からソケット通信でAサーバーに広告を取りに行く。という処理になります。
>
> まず、ソケット接続とは何?と言った感じです。

Unix と、いうのは全て file として扱います。ですから、ネットワークも
socket file という file を開き、
 そのファイルへ書く == ネットワークへデータを送る
 そのファイルを読む == ネットワークからデータを読む
と、なります。

> マニュアルを見てもそこらへんは記述しておりませんし、

 man socket
# http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&cmd=&man=socket&dir=jpman-5.0.0%2Fman&sect=0

> 参考になるWEBサイトが見つかりません。

 たしかに、Web サイトには少ないですね。私も何度か探したことがありますが
あまり参考になるサイトはありませんでした。

> マニュアルの例で言わせてもらいますと、
>
> $fp = fsockopen ("www.php.net", 80, $errno, $errstr, 30);
>
> www.php.netをport80でオープンするって意味だと思うのですが、
> なんでwww.php.netなんかオープンするの?

 www.php.net をオープンするのではなく、
ホスト www.php.net の ポート 80 へ接続(socket file)を開くのです。

> 普通のファイルオープン(fopen())の感覚で言うと、
>
> fputs ($fp, "GET / HTTP/1.0\r\nHost: www.php.net\r\n\r\n");
>
> はいっ?何に書き込んでる訳?と言った感じです。

 www.php.net の 80番ポートにデータを億ってます。
telnet で 80 番ポートを叩く時を考えると簡単かと。
===
$ cat > ふぁいる
GET / HTTP/1.0
Host: www.php.net

^D
====
$ telnet www.php.net 80
GET / HTTP/1.0
Host: www.php.net

===
 一方は、ネットワークに 一方はファイルに書いていますが
改行を叩いた後のデータの送り方は同じですよね。

> while (!feof($fp)) {
>     echo fgets ($fp,128);
> }
>
> 何を出力してるの?
>
> これだと、www.php.net を出力??

 telent で、80番ポートを叩いて理解しましょう(^^;;;;;
今まで出てきた
1. ホスト www.php.het
2. ポート 80
3. 文字列 GET / HTTP/1.1\n\rHost: www.php.net\n\r\n\r

これを全て繋げると分かるのではないでしょうか。
日本語訳の RFC を読みながらいじってみるとすぐに分かると思います。
# Squidなど proxy の log があれば、それを見るのも助けになるかも知れません。


> 仕事で期限がなく大変困ってしまいました。
> どうか皆様の知恵をお借り出来たらと思います。
> よろしくお願いいたします。

 私はプログラマーではありませんが、そんな私がかなり危険な状態だなぁと思います。
頑張ってくださいとしか言えないですが。頑張ってください。
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
 関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
 仲村 武 <1yen @ sh.rim.or.jp>



PHP-users メーリングリストの案内