仕事と晩飯とその他

日記です。

URLからドメイン名を取り出すテキトーな考え

URLからドメイン名だけを抜き出すのはかなり難儀な話のようだ。同様にPHPのスーパーグローバル変数やgethostbyaddrで得られるホスト名からドメインを抜き出すのも何がなにやら。ホスト名からドメインを抜き出したいだけなんだけどなあ。
しょうがないのでテキトーにやってみたら意外と悪くないような気がしてきた。全然ダメかもしれないが今のところはこれで充分だったりしているのでまあいいや。

// アクセスユーザーのリモートIPからホスト名を得る
$ac_remotehost = gethostbyaddr ( $_SERVER[REMOTE_ADDR] );

(ホスト名が得られないものとホスト名に「crawl」という文字列が含まれている場合は除外する)←これでいいのか悩んだが思い切ってみた。IPアドレスは残してもいいかもしれない。

// 得られたホスト名に含まれる「.」の数を数える
$i = substr_count ( $ac_remotehost, ”.” );

// 得られたホスト名を「.」を区切り文字として分ける($ac_remotehostは配列となる)
$ac_remotehost = explode (”.”, $ac_remotehost );

// 「.」で分けた最後の文字列が3文字以上(例:.comや.net)だったら配列の最後の二つの文字列を「.」でつなぎなおしてドメイン名とする
if ( strlen( $ac_remotehost[$i] ) > 2 ){
$ac_remotehost = $ac_remotehost[$i-1] .”.” .$ac_remotehost[$i];

// 「.」で分けた最後の一つ前の文字列が3文字以上(.com.ukとか)だったら配列の最後の二つの文字列を「.」でつなぎなおしてドメイン名とする
}else{
if( strlen( $ac_remotehost[$i-1] ) > 2 ){
$ac_remotehost = $ac_remotehost[$i-1] .”.” .$ac_remotehost[$i];

// 上記の二つの場合以外(.jpとか)は配列の最後の三つの文字列を「.」でつなぎなおしてドメイン名とする
}else{
$ac_remotehost = $ac_remotehost[$i-2] .”.” .$ac_remotehost[$i-1] .”.” .$ac_remotehost[$i];
}