您的位置:首页 > 其它

自己收集/编写的方法

2016-01-26 15:55 323 查看
//防盗链
function check_stop_link(){
$url = $_SERVER["HTTP_REFERER"];
$domain = reset(explode("/", str_replace("http://", "", $url)));
$tmp = explode('.', __HOME__);//__HOME__->服务器域名
if (strpos($domain, "{$tmp[1]}.{$tmp[2]}") === FALSE) exit('not found 404');
}


//判断运行环境,手机/电脑/IOS
function webType()
{
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match("/(iPod|iPad|iPhone)/", $userAgent)) {
$flag = 'ios'; //IOS客户端
} elseif (preg_match("/WP/", $userAgent)) {
$flag = 'wp'; //WinPhone客户端
} elseif (preg_match("/android/i", $userAgent)) {
$flag = 'android'; //android客户端
} elseif (preg_match("/Windows/i", $userAgent)){
$flag = 'win';
}
return $flag;
}


/**
* 计算几分钟前/几小时钱
* @param $time 时间搓
* @return string 返回几分/时/秒 前
*/
function calcTimeOut($time)
{
$t = time() - $time;
$f = array(
'31536000' => '年',
'2592000' => '个月',
'604800' => '星期',
'86400' => '天',
'3600' => '小时',
'60' => '分钟',
'1' => '秒'
);
foreach ($f as $k => $v) {
if (0 != $c = floor($t / (int)$k)) {
return $c . $v . '前';
}
}
}
/**
* 获取客户端IP地址
* @return string
*/
function get_client_ip()
{
if (!empty($_SERVER["HTTP_CLIENT_IP"]))
$cip = $_SERVER["HTTP_CLIENT_IP"];
else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if (!empty($_SERVER["REMOTE_ADDR"]))
$cip = $_SERVER["REMOTE_ADDR"];
else
$cip = "";
//无法获取
return $cip;
}


/**
 * 过滤参数
 * @param $string 过滤的字符串
 * @return array|mixed|string
 */
function format($string)
{
    if (is_array($string)) {
        foreach ($string as $key => $value) {
            $string[$key] = format($value);
        }
    } else {
        if (get_magic_quotes_gpc()) {
            $string = strip_tags((trim($string)));
        } else {
            $string = addslashes(strip_tags((trim($string))));
        }
        //过滤sql
        $string = preg_replace('/select( |%20)|delete( |%20)|update( |%20)|insert( |%20)/i', '', $string);
        $string = sacarXss($string);
    }
    return $string;
}


/**
* 过滤XSS攻击
* @param $val
* @return array|mixed|string
*/
function sacarXss($val)
{
if (is_array($val)) {
$val = array_map(array($this, 'sacarXss'), $val);
} else {
$val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
$val = preg_replace('/(&#[x|X]0{0,8}' . dechex(ord($search[$i])) . ';?)/i', $search[$i], $val); // with a ;
$val = preg_replace('/(�{0,8}' . ord($search[$i]) . ';?)/', $search[$i], $val); // with a ;
}
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true;
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|(�{0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2) . '<x>' . substr($ra[$i], 2);
$val = preg_replace($pattern, $replacement, $val);
if ($val_before == $val) {
$found = false;
} else {
$val = '';
break 2;
}
}
}
}
return $val;
}


/**
* 使用curl模拟,post/get请求
* @param $url  请求地址
* @param null $data 参数数组
* @return mixed
*/
function https_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}


//验证手机
function is_tel($tel)
{
$bool = preg_match("/^(13[0-9]|14[57]|15[012356789]|17[0678]|18[0-9])\\d{8}$/i", $tel) ? true : false;
return $bool;
}

//验证邮箱
function is_email($email)
{
$bool = preg_match("/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i", $email) ? true : false;
return $bool;
}

//生成memcache对象
function mem_return()
{
$mem = new Memcache;
$mem->connect('localhost', '11211') || die("memcache link fail!");
return $mem;
}

//mem设置键值对
function mem_set($key, $val, $time)
{
$mem = mem_return();
return $mem->set($key, $val, false, $time);
}

//mem获取值
function mem_get($key)
{
$mem = mem_return();
return $mem->get($key);
}

//mem删除值
function mem_del($key)
{
$mem = mem_return();
return $mem->delete($key);
}


//下载
function download($file, $down_name)
{
$suffix = substr($file, strrpos($file, '.')); //获取文件后缀
$down_name = $down_name . $suffix; //新文件名,就是下载后的名字
//判断给定的文件存在与否
if (strlen(file_get_contents($file)) == 0) {
die("您要下载的文件已不存在,可能是被删除");
}
$fp = fopen($file, "r");
$file_size = strlen(file_get_contents($file));
//下载文件需要用到的头
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length:" . $file_size);
header("Content-Disposition: attachment; filename=" . $down_name);
$buffer = 1024;
$file_count = 0;
//向浏览器返回数据
while (!feof($fp) && $file_count < $file_size) {
$file_con = fread($fp, $buffer);
$file_count += $buffer;
echo $file_con;
}
fclose($fp);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: