[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 メーリングリストの案内