php實(shí)現(xiàn)ip白名單黑名單功能
更新時(shí)間:2015年03月12日 11:16:52 投稿:hebedich
本文給大家分享了2個(gè)php用于實(shí)現(xiàn)黑白名單的實(shí)用函數(shù),分別是安全I(xiàn)P檢測函數(shù)和獲取客戶端IP函數(shù),注釋里解釋的非常清楚,這里我就不多廢話了。
這個(gè)是一個(gè)檢測ip是否非法的php函數(shù),適應(yīng)于白名單,黑名單功能開發(fā),主要場景應(yīng)用于:api來源限制,訪問限制等.
復(fù)制代碼 代碼如下:
/**
* 安全I(xiàn)P檢測,支持IP段檢測
* @param string $ip 要檢測的IP
* @param string|array $ips 白名單IP或者黑名單IP
* @return boolean true 在白名單或者黑名單中,否則不在
*/
function is_safe_ip($ip="",$ips=""){
if(!$ip) $ip = get_client_ip(); //獲取客戶端IP
if($ips){
if(is_string($ips)){ //ip用"," 例如白名單IP:192.168.1.13,123.23.23.44,193.134.*.*
$ips = explode(",", $ips);
}
}else{ //讀取后臺(tái)配置 白名單IP
$obj = new Setting();
$ips = explode(",", $obj->getConfig("whiteip"));
}
if(in_array($ip, $ips)){
return true;
}
$ipregexp = implode('|', str_replace( array('*','.'), array('\d+','\.') ,$ips));
$rs = preg_match("/^(".$ipregexp.")$/", $ip);
if($rs) return true;
return ;
}
獲取ip地址,這里引用thinkphp內(nèi)置函數(shù)
復(fù)制代碼 代碼如下:
//應(yīng)網(wǎng)友要求,貼出 get_client_ip() 函數(shù)
/**
* 獲取客戶端IP地址
* @param integer $type 返回類型 0 返回IP地址 1 返回IPV4地址數(shù)字
* @param boolean $adv 是否進(jìn)行高級模式獲?。ㄓ锌赡鼙粋窝b)
* @return mixed
*/
function get_client_ip($type = 0,$adv=false) {
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if($adv){
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown',$arr);
if(false !== $pos) unset($arr[$pos]);
$ip = trim($arr[0]);
}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法驗(yàn)證
$long = sprintf("%u",ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}
以上就是本文的全部內(nèi)容了,希望對大家理解php檢測IP有所幫助。
相關(guān)文章
PHP中call_user_func_array回調(diào)函數(shù)的用法示例
這篇文章主要給大家介紹了PHP中call_user_func_array回調(diào)函數(shù)的用法,文中給出了詳細(xì)的示例代碼,相信對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
PHP中信息格式化操作詳解(MessageFormatter類)
這篇文章主要給大家介紹了關(guān)于PHP中信息格式化操作的相關(guān)資料,主要運(yùn)用的是專門用于信息格式化的MessageFormatter類,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07
php啟用sphinx全文搜索的實(shí)現(xiàn)方法
這篇文章主要介紹了php啟用sphinx全文搜索的實(shí)現(xiàn)方法,詳細(xì)講述了sphinx相關(guān)的配置與使用技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
php magic_quotes_gpc的一點(diǎn)認(rèn)識(shí)與分析
最近一直在做一個(gè)文章發(fā)布系統(tǒng),做了改,改了做,一直到現(xiàn)在還沒竣工.... 為了達(dá)到更好的兼容性,其中的程序涉及到了magic_quotes_gpc,看了下手冊,又找了些資料,分析了下,分享給大家。2008-08-08
php實(shí)現(xiàn)的XML操作(讀取)封裝類完整實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)的XML操作(讀取)封裝類,給出了xml格式文件示例,并結(jié)合完整實(shí)例形式分析了php遍歷讀取xml格式數(shù)據(jù)節(jié)點(diǎn)的相關(guān)操作技巧,需要的朋友可以參考下2017-02-02

