[精讚] [會員登入]
3334

[PHP] 檢查IP是否在某個網段內 mtachcidr

要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

分享此文連結 //n.sfs.tw/10170

分享連結 [PHP] 檢查IP是否在某個網段內 mtachcidr@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 13:16:47 最後編修
2016-11-05 11:20:04 By 張○○
 

自動目錄

要檢查IP是否在某個網段內,要寫幾行?10行?5行?不用,只要2行。

函式

/**
* matchCIDR() - 判斷兩個地址是否在某個子網内
* @param $addr 地址IP ex.. 1.2.3.4
* @param $cidr 網段範圍 ex .. 1.2.3.5/24
* @return 同網段回傳 1 否則回傳 null
*/
public function matchCIDR($addr, $cidr) {
     list($ip, $mask) = explode('/', $cidr);
     return (ip2long($addr) >> (32 - $mask) == ip2long($ip) >> (32 - $mask));
}

用法

$schcidr="163.17.40.0/24";
$ip=$_SERVER["REMOTE_ADDR"];

if( matchCIDR($ip, $schcidr) )
  //  in this net, do something...
else
  //  get out of here....

 

運算法是大家少知道的推移(shift)運算法,他的效能是乘法的10倍+,所以並不會為了精簡而輸了效能。

美中不足的,就是如果是 ipv6 的使用者,會遇到麻煩,請參考下面的連結。

 

相關連結

[PHP] IPv6檢查IP是否在某個網段內 mtachcidr6


原文 2009-11-08 20:03:51 程式於2007

END

你可能感興趣的文章

[CodeIgniter3] CI3 Session 失敗的問題 這次把我的程式放到Centos8,結果sesssion 一直沒作用,真的不知道發生了什麼事?

[PHP] UTF8中取出字串中特定的字數 要將字串,例如資料庫取出的TEXT,取出特定的字數

[PHP+ci4] codeignitor4 Cache 及 Session 使用 memcached php 的framework codeignitor4 中的cache和session使用memcached

使用Yahoo OAuth2 1/2 使用Yahoo OAuth2來認證我的網站

[CodeIgniter 3] COOKIE的使用 PHP CodeIgniter 3 中COOKIE的使用超簡單

[PHP] CodeIgniter 3+pure+smarty安裝及環境設置2/2 PHP framework CodeIgniter 3+ pure CSS +smarty Template Engine的整合#2

隨機好文

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

[CodeIgniter 3] 資料庫的使用方法整理1/2 --Select的使用 [CodeIgniter 3] 資料庫的使用方法整理:Select的使用

[Bootstrap] Datepicker使用/Bootstrap日期選日期選擇器的使用 Bootstrap日期選日期選擇器的使用

對物品的感情 這個議題很奇怪,可是大部分的人都會有,物品是死的,壞了就淘汰,出新的就被替換。為何會有情感?

[Javascript] 偵錯方式 (火狐中的javascript偵錯) javascript 並不是很容易偵錯(debug)的語言,但那是以前,現在有很多瀏覽器支持很多的工具,此文以火狐為例談談偵錯...