Discuz_X中比较实用的函数【转载】

转载自http://blog.panzhibiao.com/index.php/archives/331
 

版本:x2_Beta

判断是否为机器人、判断是否为移动设备

这个自己收集比较麻烦

//判断是否为机器人、爬虫
function checkrobot($useragent = '') {
static $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
static $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';

$useragent = empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent;

if(!strexists($useragent, 'http://') && preg_match("/($kw_browsers)/i", $useragent)) {
return false;
} elseif(preg_match("/($kw_spiders)/i", $useragent)) {
return true;
} else {
return false;
}
}

//判断是否为移动设备
function checkmobile() {
global $_G;
$mobile = array();
static $mobilebrowser_list ='iPhone|Android|phone|WAP|NetFront|JAVA|Opera\sMini|UCWEB|Windows\sCE|Symbian|Series|webOS|SonyEricsson|Sony|BlackBerry|IEMobile|dopod|Nokia|samsung|PalmSource|Xda|PIEPlus|MEIZU|MIDP|CLDC';
if(preg_match("/$mobilebrowser_list/i", $_SERVER['HTTP_USER_AGENT'], $mobile)) {
$_G['mobile'] = $mobile[0];
return true;
} else {
if(preg_match('/(mozilla|chrome|safari|opera|m3gate|winwap|openwave|myop)/i', $_SERVER['HTTP_USER_AGENT'])) {
return false;
} else {
$_G['mobile'] = 'unknown';
if($_GET['mobile'] === 'yes') {
return true;
} else {
return false;
}
}
}
}

 

防止XSS跨站点注入

通过检测是否含有左尖括号’<'、双引号来判断,发现此类字符,立即exit。Beta版小bug

function _xss_check() {
$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));
if(strpos($temp, '<') !== false || strpos($temp, '"') !== false || strpos($temp,'CONTENT-TRANSFER-ENCODING')!==false) {
system_error('request_tainting');
}
return true;
}

 

获取客户端IP地址

使用正则/^([0-9]{1,3}\.){3}[0-9]{1,3}$/判断是否合法,但不够严格。直接使用函数ip2long()即可。这里都是IPV4.

function _get_client_ip() {
$ip = $_SERVER['REMOTE_ADDR'];
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
foreach ($matches[0] AS $xip) {
if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
$ip = $xip;
break;
}
}
}
return $ip;
}

 

 

你可能感兴趣的:(PHP,职场,休闲)