- ベストアンサー
PHPでのIP制限の方法
現在携帯専用のHPを作ってるんですが、 借りているサーバーがhtaccessを使えないので、phpで携帯のIP帯域のみアクセス許可したいのですが、可能でしょうか? もし出来るのであれば、方法をどなたかお教え願えませんでしょうか? よろしくお願いします!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No2に関して チェック項目なのでfunction関数を使用しOKならスルーするといった感じになります。 例を記述すると <? $ip = $_SERVER["REMOTE_ADDR"]; ip_check($ip); print<<<END <html> main page </html> END; exit; #--------------------------- function ip_check($ip){ if(ereg("210.153.84.",$ip)){$ip_check='ok';} elseif(ereg("210.136.161.",$ip)){$ip_check='ok';} elseif(ereg("210.134.83.",$ip)){$ip_check='ok';} elseif(ereg("210.146.7.",$ip)){$ip_check='ok';} elseif(ereg("210.146.60.",$ip)){$ip_check='ok';} elseif(ereg("210.151.9.",$ip)){$ip_check='ok';} elseif(ereg("210.169.193.",$ip)){$ip_check='ok';} elseif(ereg("210.228.189.",$ip)){$ip_check='ok';} elseif(ereg("211.8.49.",$ip)){$ip_check='ok';} elseif(ereg("211.8.159.",$ip)){$ip_check='ok';} elseif(ereg("211.127.183.",$ip)){$ip_check='ok';} elseif(ereg("210.169.40.0",$ip)){$ip_check='ok';} elseif(ereg("210.196.3.192",$ip)){$ip_check='ok';} elseif(ereg("210.196.5.192",$ip)){$ip_check='ok';} elseif(ereg("210.230.128.0",$ip)){$ip_check='ok';} elseif(ereg("210.230.141.192",$ip)){$ip_check='ok';} elseif(ereg("210.234.105.32",$ip)){$ip_check='ok';} elseif(ereg("210.234.108.64",$ip)){$ip_check='ok';} elseif(ereg("210.251.1.192",$ip)){$ip_check='ok';} elseif(ereg("210.251.2.0",$ip)){$ip_check='ok';} elseif(ereg("211.5.1.0",$ip)){$ip_check='ok';} elseif(ereg("211.5.2.128",$ip)){$ip_check='ok';} elseif(ereg("211.5.7.0",$ip)){$ip_check='ok';} elseif(ereg("218.222.1.0",$ip)){$ip_check='ok';} elseif(ereg("61.117.0.0",$ip)){$ip_check='ok';} elseif(ereg("61.117.1.0",$ip)){$ip_check='ok';} elseif(ereg("61.117.2.0",$ip)){$ip_check='ok';} elseif(ereg("61.202.3.0",$ip)){$ip_check='ok';} elseif(ereg("219.108.158.0",$ip)){$ip_check='ok';} elseif(ereg("219.125.148.0",$ip)){$ip_check='ok';} elseif(ereg("222.7.56.0",$ip)){$ip_check='ok';} else{$ip_check='ng';} if($ip_check=='ng'){ header('Location:http://oshiete1.goo.ne.jp'); exit; } ?> となります。 これで一応DoCoMo&au&vodafone以外の端末からは入ってこれなくなるはずです。 あと、IP情報は予告無く変更及び追加されることがありますのでWWWC等を使用しこまめにチェックすることをお勧めします。 http://www.nakka.com/wwwc/ DoCoMo http://www.nttdocomo.co.jp/p_s/imode/ip/index.html#ip vadafon http://www.dp.j-phone.com/dp/tech_svc/web/ip.php au http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html
その他の回答 (3)
- takashi-project
- ベストアンサー率66% (8/12)
逆引き処理するんでサーバが重くなりますが、 <?php //ホストを取得 $host = getenv("REMOTE_HOST"); $addr = getenv("REMOTE_ADDR"); if($host == "" || $host ==$addr){ $host = gethostbyaddr($addr); } if((ereg("docomo.ne.jp",$host)) or (ereg("jp-[a-z]",$host)) or (ereg("ezweb.ne.jp",$host))){ echo <<<EOM モバイル用HTMLを記述 EOM; }else{ echo <<<EOM PC用のHTML(アクセス禁止ですとか書く) EOM; } ?> で、いいと思います
- tripod_r
- ベストアンサー率38% (5/13)
前準備として各携帯会社のIP情報を取得しリストを作成します。 DoCoMo http://www.nttdocomo.co.jp/p_s/imode/ip/index.html#ip 210.153.84. 210.136.161. vadafon http://www.dp.j-phone.com/dp/tech_svc/web/ip.php 210.134.83. 210.146.7. 210.146.60. 210.151.9. 210.169.193. 210.228.189. 211.8.49. 211.8.159. 211.127.183. au http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html 210.169.40.0 210.196.3.192 210.196.5.192 210.230.128.0 210.230.141.192 210.234.105.32 210.234.108.64 210.251.1.192 210.251.2.0 211.5.1.0 211.5.2.128 211.5.7.0 218.222.1.0 61.117.0.0 61.117.1.0 61.117.2.0 61.202.3.0 219.108.158.0 219.125.148.0 222.7.56.0 端末のIP情報を取得します。 $ip = $_SERVER["REMOTE_ADDR"]; 作成したリストと端末のIP情報を比較します。 if(ereg("210.153.84.",$ip)){$ip_check='ok';} elseif(ereg("210.136.161.",$ip)){$ip_check='ok';} elseif(ereg("210.134.83.",$ip)){$ip_check='ok';} elseif(ereg("210.146.7.",$ip)){$ip_check='ok';} . . . else{$ip_check='ng';} if($ip_check=='ng'){ header('Location:pc.html'); } 以上でIPチェックが行えます。 あと、ユーザーエージェントでIPとのダブルチェックを行えばさらに良いと思います。
お礼
お返事ありがとうございます! 記述は、 <?php $ip = $_SERVER["REMOTE_ADDR"]; if(ereg("210.153.84.",$ip)){$ip_check='ok';} elseif(ereg("210.136.161.",$ip)){$ip_check='ok';} elseif(ereg("210.134.83.",$ip)){$ip_check='ok';} elseif(ereg("210.146.7.",$ip)){$ip_check='ok';} 以下、そのほかのIPを入れて... ↓ else{$ip_check='ng';} if($ip_check=='ng'){ header('Location:http://oshiete1.goo.ne.jp'); } ?> こんな感じでOKでしょうか??
- chupark
- ベストアンサー率41% (90/218)
自信はないですが、こういうのはどうでしょう? 1.環境変数 $_SERVER['REMOTE_ADDR']で IPアドレスを取得する 2.それを元に正規表現マッチングなどで許可・不許可を判定する 3.不許可であった場合は、 header('Location:error.html'); などで別ページに飛ばせる
お礼
お返事ありがとうございます! 実は、PHP初心者なんです。。。 どうやってそれを記述したらよいでしょうか・・・? すみません
お礼
ありがとうございました! できました!