質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2619閲覧

PHP:IPでの認証について。

kimera

総合スコア12

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2014/11/03 23:52

ユーザーが個別のページを持っていて、IPアドレスによってログインをフィルターできるようにしたいと考えています。
これにより、ユーザーが自分のIPでログインし、そのIPアドレスが規制に引っかからなければログイン成立という流れを作りたいのです。

また次のようなことも考えています。
ユーザーIPが12.34.56.78の場合、12.34.56*を選択すればログイン可能。また12.34でも、12のみの選択でも大丈夫。以上の場合だとどれもログインができ、それ以外だと無効になるという形です。

ユーザーは5つのIP制限までを選ぶことができます。

(例)
12.34..
123.45.67.*
1.234.56.78
9.87..
98...*

explode()を使いIPを分割し、設定された規制の全てと比較しようかと思いました。しかし、それを5回もチェックする必要があるのでかなりの時間がかかってしまいます。

もっと速いやり方などがありましたら、ぜひアドバイスをお願いできませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そこまで時間はかからないと思いますよ!下記のような感じでいかがでしょう!

lang

1<?php 2function FilterIP($setting_ip) { 3 $user_ip = $_SERVER['REMOTE_ADDR']; 4 if($setting_ip == '*' || $setting_ip == '*.*.*.*') { 5 return TRUE; 6 } 7 if($user_ip == $setting_ip) { 8 return TRUE; 9 } 10 $mask = str_replace('.*', '', $setting_ip); 11 return strpos($user_ip, $mask) === 0; 12} 13 14 15// ここで自分のipアドレスを仮指定 16$_SERVER['REMOTE_ADDR'] = '12.34.56.78'; 17 18$setting_ip = '1.23.45.*'; 19echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 20$setting_ip = '12.34.5.6'; 21echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 22$setting_ip = '12.5.*.*'; 23echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 24$setting_ip = '12.34.56.*'; 25echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 26$setting_ip = '12.34.*.*'; 27echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 28$setting_ip = '12.*.*.*'; 29echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 30$setting_ip = '*.*.*.*'; 31echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 32$setting_ip = '*'; 33echo("$setting_ip : ");var_dump(FilterIP($setting_ip)); 34will output:

出力は以下のようになります。

lang

11.23.45.* : bool(false) 212.34.5.6 : bool(false) 312.5.*.* : bool(false) 412.34.56.* : bool(true) 512.34.*.* : bool(true) 612.*.*.* : bool(true) 7*.*.*.* : bool(true) 8* : bool(true)

投稿2014/11/04 01:47

isaotsuneda

総合スコア316

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問