運用保守の同僚からのリクエストで、php ファイルで IP フィルタリングを実行したいとのことでした。サーバーを直接設定するのは不便なので、php ファイルの先頭で IP を直接フィルタリングする必要がありました。
IP フィルタリング ルールには次の形式があります:
1. 完全な IP アドレス (例: 192.168.0.1)
2. 特定の IP セグメント (例: 192.168.0.*)。
運用と保守は、複数の IP フィルタリング ルールで構成され、配列に保存されている IP ブラック/ホワイト リストをカスタマイズできます。コードを記述することで、IP ブラック/ホワイト リスト機能が実装されます。比較的単純な要件です。
最初に関数を実装します。この関数は、IP が IP フィルタリング ルールに準拠しているかどうかを判断することです:
function ip_test($ip,$iprule){ $ipruleregexp=str_replace('.*','ph',$iprule); $ipruleregexp=preg_quote($ipruleregexp,'/'); $ipruleregexp=str_replace('ph','\.[0-9]{1,3}',$ipruleregexp); if(preg_match('/^'.$ipruleregexp.'$/',$ip)) return true; else return false; }
コア関数 ip_test を実装した後、次のプロセスは単純にリスト内の各ルールを走査するだけです。現在接続されている IP がルールに準拠しているかどうかを判断し、対応する手順を実行します。 P p リスト、IP が少なくとも 1 つのルールを満たす場合、操作の実行を続行します。
$curr_ip=$_SERVER['REMOTE_ADDR']; $white_list=array(...); //白名单规则 $test_success=false; foreach($white_list as $iprule){ if(ip_test($curr_ip,$iprule)){ $test_success=true; break; } } if(!$test_success) exit('IP not in white list');