PHPでIP制限を行う
$_SERVER[‘REMOTE_ADDR’]にIPアドレスが入るので,これを用いてIP制限を行う。
また,123.234.0.0/8など,サブネットマスクにも対応する。
// 許可IPリスト $allowIpList = array( '123.234.0.2', '321.123.10.0/24', ); // リモートIP取得 $thisIp = $_SERVER['REMOTE_ADDR']; // リモートIPをドットで区切る $thisIpNums = explode('.', $thisIp); // リモートIPを10進数値に変更 $thisIpNum = isset($thisIpNums[3]) ? ( $thisIpNums[0] * pow(2,24) + $thisIpNums[1] * pow(2,16) + $thisIpNums[2] * pow(2,8) + $thisIpNums[3] * pow(2,0) ) : 0; // 許可IPリストとのマッチ検索開始 $matchFlag = false; foreach ($allowIpList as $allowIp) { // 許可IPをスラッシュで区切る $allowIpArray = explode('/', $allowIp); // 許可IPをドットで区切る $allowIpNums = explode('.', $allowIpArray[0]); // 許可IPを10進数値に変更 $allowIpNum = isset($allowIpNums[3]) ? ( $allowIpNums[0] * pow(2,24) + $allowIpNums[1] * pow(2,16) + $allowIpNums[2] * pow(2,8) + $allowIpNums[3] * pow(2,0) ) : 0; // 許可IPのマスクを数値に変更 $maskNum = isset($allowIpArray[1]) ? (pow(2,(int)$allowIpArray[1]) - 1) * pow(2, 32 - (int)$allowIpArray[1]) : pow(2, 32) - 1; // リモートIPと許可IPの一致を確認 if (($thisIpNum & $maskNum) === ($allowIpNum & $maskNum)) { $matchFlag = true; break; } } // 一致が無ければIP制限 if (!$matchFlag) { // 制限の処理・・・ }