首页 > 代码库 > 公共函数
公共函数
<?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=http://www.mamicode.com/‘‘){
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].‘ > ‘;
$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=http://www.mamicode.com/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=http://www.mamicode.com/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=http://www.mamicode.com/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="http://www.mamicode.com/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=http://www.mamicode.com/0){
$arr = $pidvalue=http://www.mamicode.com/=0 ? ‘
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="http://www.mamicode.com/‘.$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;
}
公共函数