[精讚] [會員登入]
2704

[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

你可能感興趣的文章

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

[PHP] 使用FTP PHP 上使用 FTP 的寫法

PHP程式經驗 #2 -- print和echo的差異 常在寫php的人一定會想知道echo和print這兩個函數有什麼不一樣 驗證 1. 比較print 和echo 函式的執

[CI3] 使用和修改日曆類別 calendar library CI3有一個日曆圖書館 library,可以快速的建立一個日曆,但是想修改讓他更棒

[CodeIgniter 3] 取得controller和method的方法 CodeIgniter 3 取得controller和method的方法

[CodeIgniter 3] 自寫找不到頁面(page404)的方法 使用CI3框架中如果找不到頁面,就會導到一個自定的404頁面,該怎麼做?

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

[HP DL380G7] 生效啟動第3,4片網卡/開啟或關閉內建的網卡 HP DL380G7 預設第3,4片網卡裝完系統後找不到,難道是壞了?要怎麼辦?

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

[AS3] 物件加上超連結的方法 物件加上超連結,可讓使用者點擊的方法