• 締切済み

PHPによるIPアドレスマッチ

こんにちは。現在、掲示板などに使うアクセス制限ライブラリを作っています。 やりたいことは、制限したいIPアドレスのリストを作り、そのリストの中に接続元のIPが含まれているかどうかを調べたいのです。 制限したいIPアドレスのリストには、IPアドレスの範囲表現(?)を使うことができるようにしたいと考えています。 例: $deny[0] = 'xxx.11.11.11'; $deny[1] = 'xxx.11.22.33'; $deny[2] = 'xxx.11.33.*'; 上記の「*」のようにです。 ここで、 $ip = 'xxx.11.33.12'; が、$denyに含まれているかどうかを調べたいのです。 正規表現を使うのかとも考えましたが、なかなか理解できません。 もし、お分かりになりましたら回答よろしくお願いいたします。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

多分こんな感じではないかと。。。 if(preg_match ("/xxx\.11\.33\.\d*/i", $ip)) { #ふくまれてる } else { #ふくまれてない }

参考URL:
http://www2.famille.ne.jp/~akio1998/l_grep.html
fly1435
質問者

お礼

ありがとうございます。参考になりました。 ============================================= $deny[0] = '11.11.11.11'; $deny[1] = '11.11.22.33'; $deny[2] = '11.11.33.*'; $ip = '11.11.33.4'; foreach ($deny as $value) { $str = str_replace('*', '\d*', $value); if(preg_match ('/'.$str.'/i', $ip)) { #ふくまれている } else { #ふくまれてない } } ============================================= としたところ、「11.11.33.*」のみがマッチすることを確認しました。自分は正規表現の基礎から勉強する必要がありますね^_^; URLも参考になります。 ありがとうございました。

関連するQ&A

専門家に質問してみよう