[PHP-users 21940] Re: Temporary failure in name resolution
KEMUSI
keigo-fu @ selene.dricas.com
2004年 6月 1日 (火) 19:02:47 JST
"Hisashi Chinami" <hisashi @ to.707.to> wrote:
(2004/06/01 17:18)
>どうやらバーチャルホストで運用されているようで、
>複数のサイトが同じIPアドレスのため、
>IPだと指定できなさそうなのですが。
>
>バーチャルホストでもIPアドレスで指定できるものなのでしょうか?
ブラウザー等はホスト名を指定してもIPアドレスでアクセスしますから
IPアドレスでも構いません。
ただしApache等のネームベースバーチャルホストは
クライアントが送信するHTTP_HOSTヘッダーで表示すべきページを切り替えま
す。
なので正しいHTTP_HOSTヘッダーを接続時に送信しておく必要があります。
<?php
//取得するファイルのURL
$url = "http://hoge/hoge.csv";
//URLをparse_url関数で分解して要素別に配列に格納
$urlarray = parse_url($url);
$protcol = $urlarray[scheme];
$host = $urlarray[host];//サーバー名
$port = $urlarray[port];//URLで指定されているポート番号
$path = $urlarray[path];//URLで指定されているURIパス
$user = $urlarray[user];//URLで指定されているBASIC認証ユーザー名
$pass = $urlarray[pass];//URLで指定されているBASIC認証パスワード
//HTTPリクエストヘッダーの作成
//BASIC認証情報がある場合認証用ヘッダーを作成
if($user!=""||$pass!=""){
$authorizationdata = $user.":".$pass;
$authorizationdata = base64_encode($authorizationdata);
$authorizationdata = "Authorization: Basic ".$authorizationdata."\r\n";
}
//ポート番号の指定がない場合HTTPのデフォルトポート番号を指定する
if($port == "") $port = "80";
//URIパスが空の場合/を指定する
if($path == "") $path = "/";
//User Agentをセットする
$useragent = 'Mozilla/4.0 (compatible; Monazilla1.0/PHP; Linux;)';
//Time Outを指定する(秒)
$time_out = 20;
//HTTPリクエストヘッダーのコンパイル
//HTTP/1.1にするとチャンクエンコードされる事がある
$reqheader = "GET {$path} HTTP/1.0\r\n";
$reqheader .= "Accept: */*\r\n";
$reqheader .= "---------------: ----- -------\r\n";
$reqheader .= "User-Agent: {$useragent}\r\n";
$reqheader .= "Host: {$host}\r\n";
$reqheader .= $authorizationdata;
$reqheader .= "Connection: close\r\n\r\n";
//サーバーに接続する
$fp = fsockopen($host, $port, &$errno, &$errstr, $time_out);
if(!$fp) {
//接続に失敗した場合
echo "サーバーに接続できませんでした。";
exit;
}else{
//接続できた場合HTTPリクエストヘッダーを送信
fputs($fp,$reqheader);
//レスポンスヘッダーを飛ばす
while (!@feof($fp) && $he != "\r\n"){
$he = @fgets($fp, 512);
}
//取得したデーターをファイル(local.csv)に保存
$lp = fopen("./local.csv","w");
while(!@feof($fp)) {
$data = @fgets($fp,1024);
fputs($lp,$data);
}
fclose($lp);
fclose($fp);
}
?>
PHP-users メーリングリストの案内