這個(gè)是一個(gè)檢測(cè)ip是否非法的php函數(shù),適應(yīng)于白名單,黑名單功能開發(fā),主要場(chǎng)景應(yīng)用于:api來源限制,訪問限制等.
代碼如下:
/** * 安全I(xiàn)P檢測(cè),支持IP段檢測(cè) * @param string $ip 要檢測(cè)的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ù)
代碼如下:
//應(yīng)網(wǎng)友要求,貼出 get_client_ip() 函數(shù) * 獲取客戶端IP地址 * @param integer $type 返回類型 0 返回IP地址 1 返回IPV4地址數(shù)字 * @param boolean $adv 是否進(jìn)行高級(jí)模式獲取(有可能被偽裝) * @return mixedfunction get_client_ip($type = 0,$adv=false) { $type = $type ? 1 : 0; html' target='_blank'>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];}
總結(jié):以上就是本篇文的全部?jī)?nèi)容,希望能對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)推薦:
PHP中流的基本知識(shí)
PHP輸出緩沖的簡(jiǎn)介及作用
php基于socket實(shí)現(xiàn)UDP通信的方法
以上就是php用于實(shí)現(xiàn)黑白名單的實(shí)用函數(shù)的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選