管理しているVPSはたぶんIPv6レディである。そこで某ドメインにAAAAレコードを追加して、IPv6でのアクセスを許すようにした。そこで、時々プロバイダのトップページにあるみたいに、今v4とv6のどちらで通信しているかを表示しようと思って若干コーディングした。
まずはアイコンを作成する。僕にとってアイコンを作るなどの高度な操作はExcelでやるしかない…ので以下のようなアイコンを用意した。それぞれv4.png、v6.pngという名前で配置するものとする。
あとはPHPでアクセス元をIPv4かIPv6か判別して、この画像のどちらかを出せばよい。
- IPv4のアドレスは数字を.で区切る
- IPv6のアドレスは:で区切る
という事実を利用してコードを書けばよい。具体的にはこんな感じ(v4v6.php)。
<?php
$count = substr_count($_SERVER['REMOTE_ADDR'], ':');
if ($count > 0 ) {
readfile('v6.png');
} else {
readfile('v4.png');
}
?>
このコードは、コロン区切りであればv6.pngを、そうでなければv4.pngを読み込んで出力する。要は画像そのものを出しているのであるから、利用する側のHTMLは以下のようになる。
<img src="v4v6.php">
僕がやった方法はこれだけ。
もっとうまい方法がありそうな気がする。REMOTE_ADDR以外を用いて判断することができるのかもしれないが、知らないのでこのようにやってしまった。
substr_count() で「:」の数を数えなくても、strpos() で「:」が存在するか否かを確認すればよいかと
strpos() の方がわずかに処理時間が短いです
100万回実行して数ミリ秒のほんの僅かな差ですが
https://paiza.io/projects/ordhdnMB3mC0pk-Ys7k4qA