公共函数

<?php

/**
 * +===================================================
 * 全局项目公共函数库
 * +===================================================
 */


function showzt($status)
{
    switch ($status) {
        case '1':
            return '未付款';
            break;
        case '2':
            return '免费';
            break;
        case '3':
            return '支付成功';
            break;
        case '5':
            return '已签到';
            break;
        case '7':
            return '退款中';
            break;
        case '10':
            return '交易关闭';
            break;
        default:
            return '交易无效';
            break;
    }
}
/**
 *
 * 加密解密方法,加密可逆
 * 加密     :encrypt('str','E','nowamagic');
 * 解密     :encrypt('被加密过的字符串','D','nowamagic');
 * @param $string    需要加密解密的字符串
 * @param $operation    判断是加密还是解密:E:加密   D:解密
 * @param $key    加密的钥匙(密匙);
 */

function encrypt($string,$operation='D',$key='')
{
    if(!isset($key)    ||    empty($key)){
        $key = C('ENCRYPTION_FACTOR');
        if(!isset($key)    ||    empty($key)){
            $config    =    include CONF_PATH.'generate.php';
            $key    =    $config['ENCRYPTION_FACTOR'];
        }
    }
    $key=md5($key);
    $key_length=strlen($key);
    $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;
    $string_length=strlen($string);
    $rndkey=$box=array();
    $result='';
    for($i=0;$i<=255;$i++)
    {
        $rndkey[$i]=ord($key[$i%$key_length]);
        $box[$i]=$i;
    }
    for($j=$i=0;$i<256;$i++)
    {
        $j=($j+$box[$i]+$rndkey[$i])%256;
        $tmp=$box[$i];
        $box[$i]=$box[$j];
        $box[$j]=$tmp;
    }
    for($a=$j=$i=0;$i<$string_length;$i++)
    {
        $a=($a+1)%256;
        $j=($j+$box[$a])%256;
        $tmp=$box[$a];
        $box[$a]=$box[$j];
        $box[$j]=$tmp;
        $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
    }
    if($operation=='D')
    {
        if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8))
        {
            return substr($result,8);
        }
        else
        {
            return'';
        }
    }
    else
    {
        return str_replace('=','',base64_encode($result));
    }
}



/**
 *
 * 获取web目录地址
 */

function get_webdir(){
    return __ROOT__;
}



/**

 *

 * 改造U函数,使其完美支持自定义的路由

 * @param $url

 * @param $vars

 * @param $suffix

 * @param $redirect

 * @param $domain

 */

function URL($url    =    '',    $vars    =    '',    $suffix    =    true,    $domain    =    false){

    // 解析URL

    $url_model = C('URL_MODEL');

    $info   =  parse_url($url);

    $MCA = explode('/', $info['path']);

    if(count($MCA)< 3 ){  //没有传递模块设置为当前模块

        array_unshift($MCA,MODULE_NAME);

    }

    if($MCA[0] !=='Admin'){ //注册URL模式

        C('URL_MODEL',2);

    }

    if(C('URL_ROUTER_ON') && C('URL_MODEL') > 0){  //开启了路由,URL模式也符合

        $info['path'] = implode('/', $MCA);



        // 解析参数

        if(is_string($vars)) { // aaa=1&bbb=2 转换成数组

            parse_str($vars,$vars);

        }elseif(!is_array($vars)){

            $vars = array();

        }

        if(isset($info['query'])) { // 解析地址里面参数 合并到vars

            parse_str($info['query'],$params);

            $vars = array_merge($params,$vars);

        }

        if($MCA[1] == 'Content' && isset($vars['module'])&& isset($vars['class'])&& isset($vars['action'])){  //内容模块的路由解析

            $content_module = $vars['module'];

            $content_class = $vars['class'];

            $content_action = $vars['action'];

            //获取配置

            $module_dir = COMMON_PATH.'Contentmodule/'.$content_module;

            if(file_exists($module_dir.'/Conf/config.php')){

                $module_config = include $module_dir.'/Conf/config.php';



                if(isset($module_config['LUYOU_URL'][$content_class.'_'.$content_action])){ //存在路由设置

                    $module_luyou = $module_config['LUYOU_URL'][$content_class.'_'.$content_action];

                    foreach ($vars as $k=>$v){  //循环参数根据路由替换

                        if(strpos($module_luyou, '{$'.$k.'}')){

                            $module_luyou = str_replace('{$'.$k.'}', C('URL_PATHINFO_DEPR').$v, $module_luyou);

                        }else{

                            if($v !==$content_module && $v !==$content_class && $v !==$content_action){

                                $module_luyou.=C('URL_PATHINFO_DEPR').$k.C('URL_PATHINFO_DEPR').$v;

                            }

                        }

                    }

                    $module_luyou =  preg_replace("/\{.*\}/U","",$module_luyou);

                    C('URL_MODEL',$url_model); //还原模式

                    return C('URL_HTML_SUFFIX') ? $module_luyou.'.'.C('URL_HTML_SUFFIX') : $module_luyou;

                }

            }



        }

        $webdir  = get_webdir();

        if(!empty($webdir)) $webdir =  $webdir.'/';

        $luyouRules = C('LUYOU_RULES');

        if(isset($luyouRules[$info['path']])){  //存在路由

            $luyou = $luyouRules[$info['path']];

            foreach ($vars as $k=>$v){  //循环参数根据路由替换

                if(strpos($luyou, '{$'.$k.'}')){

                    $luyou = str_replace('{$'.$k.'}', $v, $luyou);

                }else{

                    $luyou.=C('URL_PATHINFO_DEPR').$k.C('URL_PATHINFO_DEPR').$v;

                }



            }

            if($MCA[0]!== C('DEFAULT_MODULE')){ //如果不是默认模块,路由还要加上模块名

                if(C('URL_CASE_INSENSITIVE')){  //不检查大小写转换成小写

                    $luyou = strtolower($MCA[0]). (!empty($luyou) ? C('URL_PATHINFO_DEPR').$luyou : '');

                }else{

                    $luyou = $MCA[0].(!empty($luyou) ? C('URL_PATHINFO_DEPR').$luyou : '');

                }

                $luyou = C('URL_HTML_SUFFIX') ? $luyou.'.'.C('URL_HTML_SUFFIX') : $luyou;

            }else{



                if(empty($luyou)){

                    $luyou = (is_ssl()?'https://':'http://').$_SERVER['HTTP_HOST'].$webdir;

                    C('URL_MODEL',$url_model); //还原模式

                    return $luyou;

                }else{

                    $luyou = C('URL_HTML_SUFFIX') ? $luyou.'.'.C('URL_HTML_SUFFIX') : $luyou;

                }

            }

            C('URL_MODEL',$url_model); //还原模式

            return $webdir.$luyou;  //返回路由URL

        }



    }

    C('URL_MODEL',$url_model); //还原模式

    return U($url,    $vars,    $suffix,    $domain);

}





/**

 *

 * 判断是否启用验证码

 * @return bool true启用 false未启动

 */

function is_verify_start(){

    if(!C('IS_VERIFY')) return false; //关闭了验证直接返回不启用

    if(C('IS_OPEN_VERIFY_TYPE')==0) return true; //验证码一直启用

    return (int)session('error_verify_num')>=(int)C('IS_OPEN_VERIFY_TYPE') ? true : false;

}



/**

 *

 * 检测验证码是否正确

 * @param $code  输入的验证码字符串

 * @return bool  正确true 错误false

 */

function is_check_verify($code){

    return (session(C('VERIFY.verifyName'))== md5(strtolower($code)))  ?  true : false;

}





/**

 *

 * 获取时间戳,方便修正时间

 * @return int 时间戳

 */

function get_correction_time(){

    return time();

}



/**

 *

 * 密码格式检测

 * @param $password  检测的密码

 */

function is_format_password($password = ''){

    if(get_strlens($password) < (int)C('PASSWORD_MIN_LENGTH') || get_strlens($password) > (int)C('PASSWORD_MAX_LENGTH')){  //用户名长度不正确

        return array(0,L('PASSWORD_LEN_ERROR_TIP_A').C('PASSWORD_MIN_LENGTH').'-'.C('PASSWORD_MAX_LENGTH').L('LEN_ERROR_TIP_B'));

    }

    return array(1,'');

}



/**

 *

 * 获取字符长度

 * @param $str 传入字符串

 * @param $charset 编码

 * @return 返回该字符串的长度

 */

function get_strlens($str='', $charset='utf-8')

{

    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";

    preg_match_all($re[C('DEFAULT_CHARSET')], $str, $match);

    return count($match[0]);

}



/**

 * 全局加密规则

 * @$value string  要加密的变量

 * @return string 加密后的字符串

 */

function get_md5_rules($value=''){

    return md5(md5($value).md5(C('ENCRYPTION_FACTOR').md5($value.C('ENCRYPTION_FACTOR'))));

}



/**

 *

 * 字符串截取

 * @param $str  截取的字符串

 * @param $start  截取起始位置

 * @param $length  截取长度

 * @param $charset  字符编码

 * @param $suffix   是否添加省略号

 */

function msubstr($str='', $start=0, $length, $charset="utf-8", $suffix=true) {

    if(get_strlens($str)<=$length){

        return $str;

    }

    if(function_exists("mb_substr"))

    $slice = mb_substr($str, $start, $length, $charset);

    elseif(function_exists('iconv_substr')) {

        $slice = iconv_substr($str,$start,$length,$charset);

        if(false === $slice) {

            $slice = '';

        }

    }else{

        $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

        $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

        $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

        $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";

        preg_match_all($re[$charset], $str, $match);

        $slice = join("",array_slice($match[0], $start, $length));

    }

    return $suffix ? $slice.'...' : $slice;

}



/**

 *

 * 搜索字体匹配换色

 * @param $key 关键字

 * @param $color  换成的颜色

 * @param $con 匹配的内容

 * @return 返回替换好的字符串

 */

function get_searchreg($key,$color,$con){

    return preg_replace("/($key)/i","<font color=$color>\\1</font>",$con);

}



/**

 *

 * 名称格式检测,2~20位的中文字母数字不能输入特殊符号

 * @param $name  检测的字符串

 */

function is_format_name($name=""){

    return preg_match('/^[\x{4e00}-\x{9fa5}A-Za-z0-9]{1,16}+$/u', $name) ? true : false;

}



/**

 * 输出安全的HTML代码,过滤危险的HTML代码

 * @param $string 字符串

 * @return 返回过滤后的字符串

 */

function get_safe_html($string = ''){

    if(empty($string)) return '';

    return \Org\Util\Input::safeHtml($string);

}



/**

 *

 * 归递树,处理排序

 * @param $arr  传入的数据(数组)

 * @param $start  起始值,一般是0

 * @param $pidname  起始值的字段名称

 * @param $id  主键名称,用于判断起始字段和当前字段是否一致

 * @param $newarr  生成的新数组

 * @param $levle  动态生成的级别字段

 * @param $pname  动态生成的所有父级名称

 * @param $name  名称字段名

 */

function tree($arr=array(),$start=0,$pidname='pid',$id='id',$newarr=array(),$levle=0,$pname='',$name='name'){

    if(!is_array($arr)) return $arr;  //不是数组原样返回

    foreach ($arr as $k=>$v){

        if($v[$pidname]==$start){

            if(is_find($arr,$v[$id],$pidname)&&$v[$id]!=='0'){ //如果该菜单还存在子菜单

                $arr[$k]['find']=true;

            }else{

                $arr[$k]['find']=false;

            }

            $arr[$k]['level']=$levle;

            $arr[$k]['pname']=$pname.$v[$name];

            $newpname =$pname.$v[$name].'&nbsp>&nbsp';

            $newlevel=$levle+1;

            $newarr[count($newarr)]=$arr[$k];

            if($v[$id]!=='0'){

                $newarr = tree($arr,$v[$id],$pidname,$id,$newarr,$newlevel,$newpname,$name);

            }

        }

    }

    return $newarr;

}

//分类所有子类ID

function forLayer($cate,$status=1,$pidname='pid',$pidvalue=0,$idname='id'){

    $arr = array();

    foreach($cate as $v){

        if($v[$pidname]==$pidvalue && $v['status'] == $status){

            $v['child'] = forLayer($cate,$status,$pidname,$v[$idname],$idname);

            $arr[] = $v;

        }

    }

    return $arr;

}



//分类所有子类ID

function getChildsId($cate,$status=1,$pidname='pid',$pidvalue=0,$idname='id'){

    $arr = array();

    foreach($cate as $v){

        if($v[$pidname]==$pidvalue && $v['status'] == $status){

            $arr[] = (int)$v[$idname];

            $arr = array_merge($arr,getChildsId($cate,$status,$pidname,$v[$idname],$idname));

        }

    }

    return $arr;

}



/**

 *判断是否还存在子级

 * $arr 数组

 * $id 传入的父ID

 * $pidname 检测的字段名

 */

function is_find($arr,$id,$pidname){

    foreach ($arr as $k=>$v){

        if($v[$pidname]==$id){

            return true;

            break;

        }

    }

}



/**

 *

 * 清空目录

 * @param $dir 目录路径

 * @param $virtual  是否标准化一下目录路径

 */

function destroy_dir($dir, $virtual = false)

{

    if (is_dir($dir)) {

        $objects = scandir($dir);

        foreach ($objects as $object) {

            if ($object != "." && $object != "..") {

                if (filetype($dir."/".$object) == "dir") destroy_dir($dir."/".$object); else unlink($dir."/".$object);

            }

        }

        reset($objects);

        rmdir($dir);

    }

}

function checkdate1($date=''){

    if(empty($date)) return array(0,'截止日期不能为空');

    if(ereg("(19|20)[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",$date)){

        array(1,'日期正确');

    }else{

        array(0,'截止日期格式错误');

    }

}

/**

 *

 * 用户名格式检测

 * @param $user  检测的用户名

 */

function is_format_user($user=""){

    if(empty($user)) return  array(0,'用户名不能为空');

    if(get_strlens($user) < 4 || get_strlens($user) > 12){  //用户名长度不正确

        return array(0,'用户名应为4-12字符');

    }

    if(!preg_match('/^\\w+$/', $user)){  //格式错误

        return array(0, '用户名格式错误');

    }

    return array(1, '用户名可用');

}



/**

 *

 * 用户名注册合法性检查

 * @param $user  检测的用户名

 * @return array(状态, 提示信息)

 */

function is_username_regok($user = ''){

    $status =is_format_user($user);  //格式检查

    //检查用户名是否在禁用注册字段中

/*    $arr = explode(',', C('BAN_USER_NAME'));

    foreach ($arr as $k){  //包含铭感字符

        if(strpos(strtolower($user), strtolower($k))!==false){

            return array(0,L('USER_NO_STRING_TIP').$k);

            break;

        }

    }*/

    //唯一性检查

    $userModel = new \Admin\Model\AdminModel;

    return $userModel->get_info($user) ? array(0,'用户名已经存在') : array(1,'可用使用');

}



/**

 *

 * 注册邮箱合法性检查

 * @param $email  检测的邮箱

 * @return array(状态, 提示信息)

 */

function is_usermail_regok($email = ''){

    $status = is_format_email($email);  //格式检查

    if(!$status) return array(0,'邮箱格式错误');  //邮箱格式错误

    //唯一性检查

    $userModel = new \Admin\Model\AdminModel;

    return $userModel->get_info($email) ? array(0,'邮箱已经存在') : array(1,L('USER_IS_OK'));

}



/**

 *

 * 注册邮箱合法性检查

 * @param $email  检测的邮箱

 * @return array(状态, 提示信息)

 */

function is_mobilephone_regok($mobilephone=''){

    if(!is_format_mobilephone($mobilephone)) return array(0,L('MOBILEPHONE_FORMAT_ERROR_TIP'));

    //唯一性检查

    $userModel = new \Common\Model\UserModel;

    return $userModel->get_info($mobilephone) ? array(0,L('MOBILEPHONE_IS_IN')) : array(1,L('MOBILEPHONE_IS_OK'));

}



/**

 *

 * 邮箱格式验证函数

 * @param $email  验证的邮箱

 * @return 格式正确返回true 否则false

 */

function is_format_email($email=""){

    return preg_match('/^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/', $email) ? true : false;

}





/**

 *

 * 手机格式验证

 * @param $mobilephone  手机号

 */

function is_format_mobilephone($mobilephone=''){

    return preg_match('/^(13|15|18)[0-9]{9}$/', $mobilephone) ? true : false;

}



/**

 *

 *电话格式验证

 * @param $phone 电话号码

 */

function is_format_phone($phone=''){

    return preg_match('/^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$/', $phone) ? true : false;

}



/**

 *

 *qq格式验证

 * @param $qq qq号

 */

function is_format_qq($qq=''){

    return preg_match('/^[1-9]*[1-9][0-9]*$/', $qq) ? true : false;

}



/**

 *

 * 字母,数字,下划线组成不允许中文

 * @param $str  检测的字符串

 */

function format_name_nocn($str=""){

    return preg_match('/^\\w+$/', $str) ? true : false;

}





/**

 *

 * 检查文件或者目录是否可写,可写返回array(true,提示信息)

 * @param $file  检测路径

 */

function is_file_insert($file='')

{

    if(empty($file)) return array(0, '找不到文件');

    if (!file_exists($file)) return array(0, '找不到文件');  //路径存在问题

    if(is_dir($file)){  //如果是目录

        $folder = opendir($dir);

        while($file = readdir( $folder ))

        if($file != '.' && $file != '..' &&

        ( !is_writable(  $dir."/".$file  ) ||

        (  is_dir(   $dir."/".$file   ) && !is_removeable(   $dir."/".$file   )  ) ))

        {

            closedir($dir);

            return array(0, '目录不可写');

        }

        closedir($dir);

        return array(1, '目录可写');;

    }else{  //如果是文件

        if (is_writable($file)) {

            return array(1, '文件可写');;

        } else {

            return array(0, '文件不可写');;

        }

    }

}



/**

 *

 * 向文件写入内容,如果文件不存在会尝试创建

 * @param $con  要写入的内容

 * @param $path 写入的文件路径

 * @return array(状态1成功0失败, 返回提示信息)

 * @deleteCache 是否清空部分缓存,一般修改配置需要启用

 */

function insertFile($con = '', $path = '', $deleteCache = false){

    $msg = array(0,'写入失败');  //构建返回信息  0失败1成功   提示信息

    if(empty($path))  return $msg;  // 路径不能为空

    $isfileinsert  = is_file_insert($path);

    if(!$isfileinsert[0]) {$msg[1] = $is_file_insert[1]; return $msg;};

    $handle=fopen($path,"w");  //打开文件

    fwrite($handle,$con);  //写入文件

    fclose($handle); //关闭打开的文件

    if($deleteCache){

        file_exists(RUNTIME_PATH.'common~runtime.php') && unlink(RUNTIME_PATH.'common~runtime.php');  //更新编译缓存

    }

    $msg[0]=true;

    $msg[1] = '创建成功';

    return $msg;

}



/**

 *

 * 转换为int类型,方便数组 array_map批量更换

 * @param $str

 */

function set_int($str = ''){

    return (int)$str;

}



/**

 *

 * 拷贝目录函数

 * @param $src

 * @param $dst

 */

function rcopy($src, $dst) {

    if (is_dir($src)) {

        mkdir($dst);

        $files = scandir($src);

        foreach ($files as $file)

        if ($file != "." && $file != "..") rcopy("$src/$file", "$dst/$file");

    }

    else if (file_exists($src)) copy($src, $dst);

}



/**

 *

 * 文件大小单位转换

 * @size 大小,字节

 */

function formatBytes($size) {

    $units = array('B', 'KB', 'MB', 'GB', 'TB');

    for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;

    return round($size, 2).$units[$i];

}

function formatTime($time)

{

    if (!$time || $time==0) return '0时0分0秒';

    $time = $time/1000;

    if($time<60) return intval($time).'秒';

    if($time<60*60) return floor($time/60).'分'.floor(fmod($time,60)).'秒';

    return intval($time/3600).'时'.intval(fmod($time,3600)/60).'分'.intval(fmod(fmod($time,3600),60)).'秒';



}



function rmkdir($path, $mode = 0755) {

    $path = rtrim(preg_replace(array("/\\\\/", "/\/{2,}/"), "/", $path), "/");

    $e = explode("/", ltrim($path, "/"));

    if(substr($path, 0, 1) == "/") {

        $e[0] = "/".$e[0];

    }

    $c = count($e);

    $cp = $e[0];

    for($i = 1; $i < $c; $i++) {

        if(!is_dir($cp) && !@mkdir($cp, $mode)) {

            return false;

        }

        $cp .= "/".$e[$i];

    }

    return @mkdir($path, $mode);

}



/**
 * 获取用户名
 */

function username($uid){
    if(isset($uid)){
        $user = new \Member\Model\UserModel;
        $userinfo = $user->get_baseinfo($uid);
        if($userinfo){
            $userinfo = $userinfo['username'];
        }
        return $userinfo;
    }else{
        return session('member.username');
    }
}



/**

 *

 * 把处理成上下级树

 * @param $arr  数组

 * @param $pid  父级

 * @param $new_arr  新数组

 */

function levetree($arr=array(),$pid=0,$new_arr=array()){

    if(is_array($arr)){

        foreach($arr as $k=>$v){

            if($v['pid']==$pid){

                $new_arr[$k] = $arr[$k];

                $new_arr[$k]['items'] = levetree($arr,$v['id']);

            }

        }

    }

    return $new_arr ? $new_arr : array();

}

/**

 *

 * 过滤图片

 */

function remove_img($str = ''){

    return $str = preg_replace("/<img.*?>/si","",$str);

}



/**

 *

 * HTML代码截取

 * @param $str 截取的字符串

 * @param $length 长度

 * @param $suffixStr 后缀

 * @param $start 开始字符

 * @param $tags 可能包含的标签

 * @param $zhf 修复宽度

 * @param $charset 编码

 */

function html_substr($str, $length = 0, $suffixStr = "...", $start = 0, $tags = "div|span|p", $zhfw = 0.9, $charset = "utf-8"){

    //author: lael

    //blog: http://hi.baidu.com/lael80



    $re['utf-8']   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";

    $re['gbk']    = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";

    $re['big5']   = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";



    $zhre['utf-8']   = "/[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";

    $zhre['gb2312'] = "/[\xb0-\xf7][\xa0-\xfe]/";

    $zhre['gbk']    = "/[\x81-\xfe][\x40-\xfe]/";

    $zhre['big5']   = "/[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";



    //下面代码还可以应用到关键字加亮、加链接等,可以避免截断HTML标签发生

    //得到标签位置

    $tpos = array();

    preg_match_all("/<(".$tags.")([\s\S]*?)>|<\/(".$tags.")>/ism", $str, $match);

    $mpos = 0;

    for($j = 0; $j < count($match[0]); $j ++){

        $mpos = strpos($str, $match[0][$j], $mpos);

        $tpos[$mpos] = $match[0][$j];

        $mpos += strlen($match[0][$j]);

    }

    ksort($tpos);



    //根据标签位置解析整个字符

    $sarr = array();

    $bpos = 0;

    $epos = 0;

    foreach($tpos as $k => $v){

        $temp = substr($str, $bpos, $k - $epos);

        if(!empty($temp))array_push($sarr, $temp);

        array_push($sarr, $v);

        $bpos = ($k + strlen($v));

        $epos = $k + strlen($v);

    }

    $temp = substr($str, $bpos);

    if(!empty($temp))array_push($sarr, $temp);



    //忽略标签截取字符串

    $bpos = $start;

    $epos = $length;

    for($i = 0; $i < count($sarr); $i ++){

        if(preg_match("/^<([\s\S]*?)>$/i", $sarr[$i]))continue;//忽略标签



        preg_match_all($re[$charset], $sarr[$i], $match);



        for($j = $bpos; $j < min($epos, count($match[0])); $j ++){

            if(preg_match($zhre[$charset], $match[0][$j]))$epos -= $zhfw;//计算中文字符

        }



        $sarr[$i] = "";

        for($j = $bpos; $j < min($epos, count($match[0])); $j ++){//截取字符

            $sarr[$i] .= $match[0][$j];

        }

        $bpos -= count($match[0]);

        $bpos = max(0, $bpos);

        $epos -= count($match[0]);

        $epos = round($epos);

    }



    //返回结果

    $slice = join("", $sarr);//自己可以加个清除空html标签的东东

    if($slice != $str)return $slice.$suffixStr;

    return $slice;

}



/**

 *  发送短信 (同创凌凯接口)

 * @param  $content 短信内容

 * @param  $telphone  手机号码,多个号码中间用英文,隔开

 * @return int  大于等于0正常,否则错误

 */  

function sendsms($content='',$telphone='')  

{

    //短信接口用户名 通信商提供  

    $userid = 'TCLKJ02212';

    //短信接口密码 通信商提供  

    $passwd = '223311';

   // $content = urlencode(iconv('utf8', 'gbk//IGNORE',$content.'【17智汇网】'));

    $content = urlencode(mb_convert_encoding($content,"gbk","utf-8"));

    $gateway = "http://inolink.com/ws/BatchSend.aspx?CorpID={$userid}&Pwd={$passwd}&Mobile={$telphone}&Content={$content}&Cell=&SendTime=";

    $result = file_get_contents($gateway);

    if($result<0){//错误记录

        $fp = fopen(RUNTIME_PATH."/Temp/sms.txt","a");  

        flock($fp, LOCK_EX) ;  

        fwrite($fp,$result.",执行日期:".strftime("%Y-%m-%d %H:%I:%S",time())."\r\n");  

        flock($fp, LOCK_UN);  

        fclose($fp);

    }

    return $result;

}



/**

 *

 * 权限检查方法

 * @param $rules 规则,数组,支持多个规则

 * @param $type 验证类型 支持or 与and

 * @param $roleid 验证的角色id

 */

function rulesauth($rules = array(),$roleid=''){

    empty($roleid) && $roleid = session(C('USER_INFO').'.role_id');

    //超级管理不受任何限制

    if($roleid == C('ADMIN_ROLE_ID')) return true;

    if(empty($rules)) return false; //没有指定规则

    $role = new \Admin\Model\RoleModel;

    $verify = $role->verifyauth($rules,$roleid);

    if(!$verify) return false;

    return true;

}



/**

 *

 * 检测是否已经登录

 * @return true已登录 false 未登录

 */

function is_login(){

    $roleid = session(C('USER_INFO').'.role_id');    //获取角色id

    if(empty($roleid)) return false;

    return true;

}



function word_count($string) {

    $string = mb_convert_encoding($string,"gbk","utf8");

    

    $length = strlen($string);

    $count = 0;

    for($i = 0; $i < $length; $i++) {

        $t = ord($string[$i]);

        if($t > 127) $i++;

        $count++;

    }

    return $count;

}

//获取用户头像

function get_user_pic($username){

    $user = new \Member\Model\UserModel;

    $userphoto = $user->get_avatar($username,'username');

    return ($userphoto===false)?'./Public/Member/images/member/nophoto.gif':$userphoto;

}

//广告展示,广告位编号

function Ad($id)

{

    if(!$id) return false;

    return W('Common/Ad/adshow',array($id));

}



//返回联动菜单数据

function linkmenu($value=0,$topid=1,$type="show",$separate='-')

{

    if (!$value) return false;

    $values = explode(',',$value);

    $linkmenu = new \Common\Model\LinkmenuModel;

    if(count($values)>1){

        foreach ($linkmenu->all_list() as $key => $vv) {

            if(in_array($vv['id'], $values)){

                $k[] = $vv['id'];

                $kk[] = $vv['name'];

            }

        }

    }else{

        $links = $linkmenu->getParents($value);

        foreach ($links as $key=>$v) {

            if($v['id']>$topid){

                $k[] = $v;

                $kk[] = $v['name'];

            }    

        }

    }

    if($type=="show"){

        return implode($separate,$kk);

    }else{

        return $k;

    }

}



function showscore($value)

{

    for($n=0;$n<$value;$n++){

        echo '<img src="./Public/Home/images/icon_star_2.gif" align="absmiddle" />';

    }

}

//获取当前页面地址

function get_url() {

    $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';

    $php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];

    $path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';

    $relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : $path_info);

    return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;

}

function creat_url($name,$urls='',$kt='index.php?'){ //在当前URL增加或修改一个值

        if(!$urls)$urls= $_GET;

        if(is_array($name)){

            foreach ($name as $key => $value) {

                $aa=explode("=",$value);

                if(count($aa)==1 or $aa[1]==""){

                    $iss=array_key_exists($aa[0], $urls);

                    if($iss)unset($urls[$aa[0]]);

                }elseif(count($aa)==2){

                    $tjurl=array($aa[0]=>$aa[1]);

                    $urls = array_merge ($urls,$tjurl);

                }

            }

        }else{

            $aa=explode("=",$name);

            if(count($aa)==1 or $aa[1]==""){

                $iss=array_key_exists($aa[0], $urls);//查找某键名

                if($iss)unset($urls[$aa[0]]);    //删除某键名

            }elseif(count($aa)==2){

                $tjurl=array($aa[0]=>$aa[1]);

                $urls=array_merge ($urls,$tjurl);

            }

        }

        

        $names=array_keys($urls);

            $url=$kt;//初始URL

            foreach ($names as $key=>$value){

                if($key)$url=$url."&";

                $url=$url.$names[$key]."=".$urls[$value];

            }

return     $url;

}



//专门为菜单地图制作的,解决TP循环不过三

function forMapLayer($cate,$oldvalues=0,$pidvalue=0){

    $arr = $pidvalue==0 ? '<ul id="gray" class="treeview-gray">' : '<ul>';

    foreach($cate as $v){

        if($v['pid']==$pidvalue && $v['status'] == 1){

            $ischeck = $v['id']==$oldvalues ? ' checked' : '';

            $arr .= '<li id="c'.$v['id'].'" class="li'.$v['level'].'">';

            if($v['find']){

                $chackRadio = '';

            }else{

                $chackRadio = '<input type="radio" name="seltypeid" value="'.$v['id'].'|'.$v['name'].'" '.$ischeck.' />';

            }

            $arr .= '<label title="编号:'.$v['id'].'">'.$chackRadio.$v['name'].'</label>';

            if($v['find']) $arr .= forMapLayer($cate,$oldvalues,$v['id']);

            $arr .= '</li>';

        }

    }

    $arr .= '</ul>';

    return $arr;

}

posted @ 2014-12-22 10:48  cq351266168  阅读(171)  评论(0编辑  收藏  举报