$v) { if(preg_match($pattern,$k,$match)) { die("SQL Injection denied!"); } if(is_array($v)) { filter_injection($request[$k]); } else { if(preg_match($pattern,$v,$match)) { die("SQL Injection denied!"); } } } } function filter_ma_request(&$str){ $search = array("../","\n","\r","\t","\r\n","'","<",">","\"","%","\\",".","/"); return str_replace($search,"",$str); } //过滤请求 function filter_request(&$request) { if(MAGIC_QUOTES_GPC) { foreach($request as $k=>$v) { if(is_array($v)) { filter_request($v); } else { $request[$k] = stripslashes(trim($v)); } } } } function adddeepslashes(&$request) { foreach($request as $k=>$v) { if(is_array($v)) { adddeepslashes($v); } else { $request[$k] = addslashes(trim($v)); } } } function quotes($content) { //if $content is an array if (is_array($content)) { foreach ($content as $key=>$value) { //$content[$key] = mysql_real_escape_string($value); $content[$key] = addslashes($value); } } else { //if $content is not an array //$content=mysql_real_escape_string($content); $content=addslashes($content); } return $content; } //request转码 function convert_req(&$req) { foreach($req as $k=>$v) { if(is_array($v)) { convert_req($req[$k]); } else { if(!is_u8($v)) { $req[$k] = iconv("gbk","utf-8",$v); } } } } function is_u8($string) { return preg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] # ASCII | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 )*$%xs', $string); } //清除缓存 function clear_cache() { //系统后台缓存 clear_dir_file(get_real_path()."public/runtime/admin/Cache/"); clear_dir_file(get_real_path()."public/runtime/admin/Data/_fields/"); clear_dir_file(get_real_path()."public/runtime/admin/Temp/"); clear_dir_file(get_real_path()."public/runtime/admin/Logs/"); @unlink(get_real_path()."public/runtime/admin/~app.php"); @unlink(get_real_path()."public/runtime/admin/~runtime.php"); @unlink(get_real_path()."public/runtime/admin/lang.js"); @unlink(get_real_path()."public/runtime/app/config_cache.php"); //数据缓存 clear_dir_file(get_real_path()."public/runtime/app/data_caches/"); clear_dir_file(get_real_path()."public/runtime/app/db_caches/"); $GLOBALS['cache']->clear(); clear_dir_file(get_real_path()."public/runtime/data/"); //模板页面缓存 clear_dir_file(get_real_path()."public/runtime/app/tpl_caches/"); clear_dir_file(get_real_path()."public/runtime/app/tpl_compiled/"); @unlink(get_real_path()."public/runtime/app/lang.js"); //脚本缓存 clear_dir_file(get_real_path()."public/runtime/statics/"); } function clear_dir_file($path) { if ( $dir = opendir( $path ) ) { while ( $file = readdir( $dir ) ) { $check = is_dir( $path. $file ); if ( !$check ) { @unlink( $path . $file ); } else { if($file!='.'&&$file!='..') { clear_dir_file($path.$file."/"); } } } closedir( $dir ); rmdir($path); return true; } } function check_install() { if(!file_exists(get_real_path()."public/install.lock")) { clear_cache(); header('Location:'.APP_ROOT.'/install'); exit; } } //utf8 字符串截取 function msubstr($str, $start=0, $length=15, $charset="utf-8", $suffix=true) { if(function_exists("mb_substr")) { $slice = mb_substr($str, $start, $length, $charset); if($suffix&$slice!=$str) return $slice."…"; return $slice; } elseif(function_exists('iconv_substr')) { return iconv_substr($str,$start,$length,$charset); } $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)); if($suffix&&$slice!=$str) return $slice."…"; return $slice; } //字符编码转换 if(!function_exists("iconv")) { function iconv($in_charset,$out_charset,$str) { require 'libs/iconv.php'; $chinese = new Chinese(); return $chinese->Convert($in_charset,$out_charset,$str); } } //JSON兼容 if(!function_exists("json_encode")) { function json_encode($data) { require_once 'libs/json.php'; $JSON = new JSON(); return $JSON->encode($data); } } if(!function_exists("json_decode")) { function json_decode($data) { require_once 'libs/json.php'; $JSON = new JSON(); return $JSON->decode($data,1); } } //邮件格式验证的函数 function check_email($email) { if(!preg_match("/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/",$email)) { return false; } else return true; } /*显示隐藏中间的手机号码*/ function hideMobile($mobile){ if($mobile!="") return preg_replace('#(\d{3})\d{5}(\d{3})#', '${1}*****${2}',$mobile); else return ""; } /*显示隐藏中间的邮箱号*/ function hideEmail($email){ if($email!="") { return substr($email,0,-8)."*****".substr($email,-3); } else { return ""; } } //验证手机号码 function check_mobile($mobile) { if(!empty($mobile) && !preg_match("/^(1[0-9]{10})?$/",$mobile)) { return false; } else return true; } //验证邮编 function check_postcode($postcode) { if(!empty($postcode) && !preg_match("/^([0-9]{6})(-[0-9]{5})?$/",$postcode)) { return false; } else return true; } //验证验证码 function check_verify_coder($verify_coder){ if(!empty($verify_coder) && !preg_match("/^([0-9]{6})?$/",$verify_coder)) { return false; } else return true; } function get_verify_code($verify_coder){ $verify_coder_result = check_user("verify_coder",$verify_coder); //var_dump($verify_coder_result);exit; if($verify_coder_result['status']==0) { if($verify_coder_result['data']['error']==EMPTY_ERROR) { $error = "不能为空"; $type = "form_tip"; } if($verify_coder_result['data']['error']==EXIST_ERROR) { $error = "错误"; $type="form_error"; } return array("type"=>$type,"field"=>"verify_coder","info"=>"验证码".$error); } else { return array("type"=>"form_success","field"=>"verify_coder","info"=>""); } } //跳转 function app_redirect($url,$time=0,$msg='') { //多行URL地址支持 $url = str_replace(array("\n", "\r"), '', $url); if(empty($msg)) $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; if (!headers_sent()) { // redirect if(0===$time) { if(substr($url,0,1)=="/") { header("Location:".get_domain().$url); } else { header("Location:".$url); } }else { header("refresh:{$time};url={$url}"); echo($msg); } exit(); }else { $str = ""; if($time!=0) $str .= $msg; exit($str); } } /** * 验证访问IP的有效性 * @param ip地址 $ip_str * @param 访问页面 $module * @param 时间间隔 $time_span * @param 数据ID $id */ function check_ipop_limit($ip_str,$module,$time_span=0,$id=0) { if(intval(app_conf('USER_SUBMIT_TIME'))>0){ $time_span = intval(app_conf('USER_SUBMIT_TIME')); } $op = es_session::get($module."_".$id."_ip"); if(empty($op)) { $check['ip'] = get_client_ip(); $check['time'] = get_gmtime(); es_session::set($module."_".$id."_ip",$check); return true; //不存在session时验证通过 } else { $check['ip'] = get_client_ip(); $check['time'] = get_gmtime(); $origin = es_session::get($module."_".$id."_ip"); if($check['ip']==$origin['ip']) { if($check['time'] - $origin['time'] < $time_span) { return false; } else { es_session::set($module."_".$id."_ip",$check); return true; //不存在session时验证通过 } } else { es_session::set($module."_".$id."_ip",$check); return true; //不存在session时验证通过 } } } function gzip_out($content) { header("Content-type: text/html; charset=utf-8"); header("Cache-control: private"); //支持页面回跳 $gzip = app_conf("GZIP_ON"); if( intval($gzip)==1 ) { if(!headers_sent()&&extension_loaded("zlib")&&preg_match("/gzip/i",$_SERVER["HTTP_ACCEPT_ENCODING"])) { $content = gzencode($content,9); header("Content-Encoding: gzip"); header("Content-Length: ".strlen($content)); echo $content; } else echo $content; }else{ echo $content; } } /** * 保存图片 * @param array $upd_file 即上传的$_FILES数组 * @param array $key $_FILES 中的键名 为空则保存 $_FILES 中的所有图片 * @param string $dir 保存到的目录 * @param array $whs 可生成多个缩略图 数组 参数1 为宽度, 参数2为高度, 参数3为处理方式:0(缩放,默认),1(剪裁), 参数4为是否水印 默认为 0(不生成水印) array( 'thumb1'=>array(300,300,0,0), 'thumb2'=>array(100,100,0,0), 'origin'=>array(0,0,0,0), 宽与高为0为直接上传 ... ), * @param array $is_water 原图是否水印 * @return array array( 'key'=>array( 'name'=>图片名称, 'url'=>原图web路径, 'path'=>原图物理路径, 有略图时 'thumb'=>array( 'thumb1'=>array('url'=>web路径,'path'=>物理路径), 'thumb2'=>array('url'=>web路径,'path'=>物理路径), ... ) ) .... ) */ //$img = save_image_upload($_FILES,'avatar','temp',array('avatar'=>array(300,300,1,1)),1); function save_image_upload($upd_file, $key='',$dir='temp', $whs=array(),$is_water=false,$need_return = false) { require_once APP_ROOT_PATH."system/utils/es_imagecls.php"; $image = new es_imagecls(); $image->max_size = intval(app_conf("MAX_IMAGE_SIZE")); $list = array(); if(empty($key)) { foreach($upd_file as $fkey=>$file) { $list[$fkey] = false; $image->init($file,$dir); if($image->save()) { $list[$fkey] = array(); $list[$fkey]['url'] = $image->file['target']; $list[$fkey]['path'] = $image->file['local_target']; $list[$fkey]['name'] = $image->file['prefix']; } else { if($image->error_code==-105) { if($need_return) { return array('error'=>1,'message'=>'上传的图片太大'); } else echo "上传的图片太大"; } elseif($image->error_code==-104||$image->error_code==-103||$image->error_code==-102||$image->error_code==-101) { if($need_return) { return array('error'=>1,'message'=>'非法图像'.$image->error_code); } else echo "非法图像"; } exit; } } } else { $list[$key] = false; $image->init($upd_file[$key],$dir); if($image->save()) { $list[$key] = array(); $list[$key]['url'] = $image->file['target']; $list[$key]['path'] = $image->file['local_target']; $list[$key]['name'] = $image->file['prefix']; } else { if($image->error_code==-105) { if($need_return) { return array('error'=>1,'message'=>'上传的图片太大'); } else echo "上传的图片太大"; } elseif($image->error_code==-104||$image->error_code==-103||$image->error_code==-102||$image->error_code==-101) { if($need_return) { return array('error'=>1,'message'=>'非法图像'.$image->error_code); } else echo "非法图像"; } exit; } } $water_image = APP_ROOT_PATH.app_conf("WATER_MARK"); $alpha = app_conf("WATER_ALPHA"); $place = app_conf("WATER_POSITION"); foreach($list as $lkey=>$item) { //循环生成规格图 foreach($whs as $tkey=>$wh) { $list[$lkey]['thumb'][$tkey]['url'] = false; $list[$lkey]['thumb'][$tkey]['path'] = false; if($wh[0] > 0 || $wh[1] > 0) //有宽高度 { $thumb_type = isset($wh[2]) ? intval($wh[2]) : 0; //剪裁还是缩放, 0缩放 1剪裁 if($thumb = $image->thumb($item['path'],$wh[0],$wh[1],$thumb_type)) { $list[$lkey]['thumb'][$tkey]['url'] = $thumb['url']; $list[$lkey]['thumb'][$tkey]['path'] = $thumb['path']; if(isset($wh[3]) && intval($wh[3]) > 0)//需要水印 { $paths = pathinfo($list[$lkey]['thumb'][$tkey]['path']); $path = $paths['dirname']; $path = $path."/origin/"; if (!is_dir($path)) { @mkdir($path); @chmod($path, 0777); } $filename = $paths['basename']; @file_put_contents($path.$filename,@file_get_contents($list[$lkey]['thumb'][$tkey]['path'])); $image->water($list[$lkey]['thumb'][$tkey]['path'],$water_image,$alpha, $place); } } } } if($is_water) { $paths = pathinfo($item['path']); $path = $paths['dirname']; $path = $path."/origin/"; if (!is_dir($path)) { @mkdir($path); @chmod($path, 0777); } $filename = $paths['basename']; @file_put_contents($path.$filename,@file_get_contents($item['path'])); $image->water($item['path'],$water_image,$alpha, $place); } } return $list; } function empty_tag($string) { $string = preg_replace(array("/\[img\]\d+\[\/img\]/","/\[[^\]]+\]/"),array("",""),$string); if(trim($string)=='') return $GLOBALS['lang']['ONLY_IMG']; else return $string; //$string = str_replace(array("[img]","[/img]"),array("",""),$string); } /** * utf8字符转Unicode字符 * @param string $char 要转换的单字符 * @return void */ function utf8_to_unicode($char) { switch(strlen($char)) { case 1: return ord($char); case 2: $n = (ord($char[0]) & 0x3f) << 6; $n += ord($char[1]) & 0x3f; return $n; case 3: $n = (ord($char[0]) & 0x1f) << 12; $n += (ord($char[1]) & 0x3f) << 6; $n += ord($char[2]) & 0x3f; return $n; case 4: $n = (ord($char[0]) & 0x0f) << 18; $n += (ord($char[1]) & 0x3f) << 12; $n += (ord($char[2]) & 0x3f) << 6; $n += ord($char[3]) & 0x3f; return $n; } } /** * utf8字符串分隔为unicode字符串 * @param string $str 要转换的字符串 * @param string $depart 分隔,默认为空格为单字 * @return string */ function str_to_unicode_word($str,$depart=' ') { $arr = array(); $str_len = mb_strlen($str,'utf-8'); for($i = 0;$i < $str_len;$i++) { $s = mb_substr($str,$i,1,'utf-8'); if($s != ' ' && $s != ' ') { $arr[] = 'ux'.utf8_to_unicode($s); } } return implode($depart,$arr); } /** * utf8字符串分隔为unicode字符串 * @param string $str 要转换的字符串 * @return string */ function str_to_unicode_string($str) { $string = str_to_unicode_word($str,''); return $string; } //分词 function div_str($str) { require_once APP_ROOT_PATH."system/libs/words.php"; $words = words::segment($str); $words[] = $str; return $words; } /** * * @param $tag //要插入的关键词 * @param $table //表名 * @param $id //数据ID * @param $field // tag_match/name_match/cate_match/locate_match */ function insert_match_item($tag,$table,$id,$field) { if($tag=='') return; $unicode_tag = str_to_unicode_string($tag); $sql = "select count(*) from ".DB_PREFIX.$table." where match(".$field.") against ('".$unicode_tag."' IN BOOLEAN MODE) and id = ".$id; $rs = $GLOBALS['db']->getOne($sql); if(intval($rs) == 0) { $match_row = $GLOBALS['db']->getRow("select * from ".DB_PREFIX.$table." where id = ".$id); if($match_row[$field]=="") { $match_row[$field] = $unicode_tag; $match_row[$field."_row"] = $tag; } else { $match_row[$field] = $match_row[$field].",".$unicode_tag; $match_row[$field."_row"] = $match_row[$field."_row"].",".$tag; } $GLOBALS['db']->autoExecute(DB_PREFIX.$table, $match_row, $mode = 'UPDATE', "id=".$id, $querymode = 'SILENT'); } } //封装url function url($route="index",$param=array()) { $key = md5("URL_KEY_".$route.serialize($param)); if(isset($GLOBALS[$key])) { $url = $GLOBALS[$key]; return $url; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $route_array = explode("#",$route); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } $module = strtolower(trim($route_array[0])); $action = strtolower(trim($route_array[1])); if(!$module||$module=='index')$module=""; if(!$action||$action=='index')$action=""; if(true ) { //原始模式 $url = APP_ROOT."/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= CTL."=".$module."&"; if($action&&$action!='') $url .= ACT."=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } else { //重写的默认 $url = APP_ROOT; if($module==''&&$action==''){ $url .='/index'; }else{ if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "-".$action; } if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; switch ($route) { case "xxx": break; default: break; } // if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-'){ // $url.='index'; // } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); $url=trim($url); if($url==''){ $url="/index.html"; }else{ if($module=='article_cate'){ if($param['id']){ if($GLOBALS['article_cates'][$param['id']]['seo_title']){ if($param['p']){ $url=APP_ROOT."/".$GLOBALS['article_cates'][$param['id']]['seo_title']."?p=".$param['p']; }else{ $url=APP_ROOT."/".$GLOBALS['article_cates'][$param['id']]['seo_title']; } }else{ $url.='.html'; } }elseif($param['p']){ $url=APP_ROOT."/article_cate?p=".$param['p']; }elseif($param['tag']){ $url=APP_ROOT."/article_cate?tag=".$param['tag']; } else{ $url=APP_ROOT."/article_cate"; } }elseif($module=='article'){ if($param['id']){ if($GLOBALS['article_cates'][$GLOBALS['articles'][$param['id']]['cate_id']]['seo_title']){ $url=APP_ROOT."/".$GLOBALS['article_cates'][$GLOBALS['articles'][$param['id']]['cate_id']]['seo_title']."/".$param['id'].".html"; }else{ $url.='.html'; } }else{ $url=APP_ROOT."/article_cate"; } }else{ $url.='.html'; } } if($url=='')$url="/"; $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } } function url_wap($route="index",$param=array()) { if($GLOBALS['is_app']){ $param['from_type'] = $GLOBALS['is_app']; } $key = md5("URL_WAP_KEY_".$route.serialize($param)); if(isset($GLOBALS[$key])) { $url = $GLOBALS[$key]; return $url; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $route_array = explode("#",$route); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } $module = strtolower(trim($route_array[0])); $action = strtolower(trim($route_array[1])); if(!$module||$module=='index')$module=""; if(!$action||$action=='index')$action=""; if(true) { //原始模式 $url = APP_ROOT."/wap/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= "ctl=".$module."&"; if($action&&$action!='') $url .= "act=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } else { //重写的默认 $url = APP_ROOT."/wap"; if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "-".$action; if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; switch ($route) { case "xxx": break; default: break; } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); if($url=='')$url="/"; $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } } //封装url function url_mapi($route="index",$param=array()) { $key = md5("URL_APP_KEY_".$route.serialize($param)); if(isset($GLOBALS[$key])) { $url = $GLOBALS[$key]; return $url; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $route_array = explode("#",$route); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } $module = strtolower(trim($route_array[0])); $action = strtolower(trim($route_array[1])); if(!$module||$module=='index')$module=""; if(!$action||$action=='index')$action=""; if(app_conf("URL_MODEL")==0) { //原始模式 $url = APP_ROOT."/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= "ctl=".$module."&"; if($action&&$action!='') $url .= "act=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } else { //重写的默认 $url = APP_ROOT; if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "-".$action; if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; switch ($route) { case "xxx": break; default: break; } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); if($url=='')$url="/"; $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } } //封装app_url function url_app($route="index",$param=array()) { $route_array = explode("#",$route); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } if(isset($route_array[0])){ $module = strtolower(trim($route_array[0])); }else{ $module = ""; } if(isset($route_array[1])){ $action = strtolower(trim($route_array[1])); }else{ $action = ""; } if(!$module||$module=='index')$module=""; if(!$action||$action=='index')$action=""; if(true ) { //原始模式 $url = APP_ROOT."/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= CTL."=".$module."&"; if($action&&$action!='') $url .= ACT."=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); return $url; } else { //重写的默认 $url = APP_ROOT; if($module==''&&$action==''){ $url .='/index'; }else{ if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "-".$action; } if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; switch ($route) { case "xxx": break; default: break; } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); $url=trim($url); if($url==''){ $url="/index.html"; }else{ if($module=='article_cate'){ if($param['id']){ if($GLOBALS['article_cates'][$param['id']]['seo_title']){ if($param['p']){ $url=APP_ROOT."/".$GLOBALS['article_cates'][$param['id']]['seo_title']."?p=".$param['p']; }else{ $url=APP_ROOT."/".$GLOBALS['article_cates'][$param['id']]['seo_title']; } }else{ $url.='.html'; } }elseif($param['p']){ $url=APP_ROOT."/article_cate?p=".$param['p']; }elseif($param['tag']){ $url=APP_ROOT."/article_cate?tag=".$param['tag']; } else{ $url=APP_ROOT."/article_cate"; } }elseif($module=='article'){ if($param['id']){ if($GLOBALS['article_cates'][$GLOBALS['articles'][$param['id']]['cate_id']]['seo_title']){ $url=APP_ROOT."/".$GLOBALS['article_cates'][$GLOBALS['articles'][$param['id']]['cate_id']]['seo_title']."/".$param['id'].".html"; }else{ $url.='.html'; } }else{ $url=APP_ROOT."/article_cate"; } }else{ $url.='.html'; } } if($url=='')$url="/"; return $url; } } //PC端 封装url function url_pc($route="index",$act="action",$param=array()) { $route_array = explode("#",$route); $act_array = explode("#",$act); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } if(isset($route_array[0])){ $module = strtolower(trim($route_array[0])); }else{ $module = ""; } if(isset($act_array[0])){ $action = strtolower(trim($act_array[0])); }else{ $action = ""; } if(!$module||$module=='index')$module=""; if(!$action||$action=='action')$action=""; if(true ) { //原始模式 $url = APP_ROOT."/app/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= 'ctl'."=".$module."&"; if($action&&$action!='') $url .= 'act'."=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); return $url; } else { //重写的默认 $url = APP_ROOT; if($module==''&&$action==''){ $url .='/index'; }else{ if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "/".$action; } if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; $cat = $module."#".$action; switch ($route) { case "xxx": break; default: break; } switch ($cat) { case "xxx": break; default: break; } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); $url=trim($url); if($url==''){ $url="/index.html"; }else{ if($module=='article_cate'){ if($param['id']){ if($GLOBALS['article_cates'][$param['id']]['seo_title']){ if($param['p']){ $url=APP_ROOT."/".$GLOBALS['article_cates'][$param['id']]['seo_title']."?p=".$param['p']; }else{ $url=APP_ROOT."/".$GLOBALS['article_cates'][$param['id']]['seo_title']; } }else{ $url.='.html'; } }elseif($param['p']){ $url=APP_ROOT."/article_cate?p=".$param['p']; }elseif($param['tag']){ $url=APP_ROOT."/article_cate?tag=".$param['tag']; } else{ $url=APP_ROOT."/article_cate"; } }elseif($module=='article'){ if($param['id']){ if($GLOBALS['article_cates'][$GLOBALS['articles'][$param['id']]['cate_id']]['seo_title']){ $url=APP_ROOT."/".$GLOBALS['article_cates'][$GLOBALS['articles'][$param['id']]['cate_id']]['seo_title']."/".$param['id'].".html"; }else{ $url.='.html'; } }else{ $url=APP_ROOT."/article_cate"; } }else{ $url.='.html'; } } if($url=='')$url="/"; return $url; } } //微信端 封装url function url_wx($route="index",$act="action",$param=array()) { if($GLOBALS['is_app']){ $param['from_type'] = $GLOBALS['is_app']; } $key = md5("URL_WAP_KEY_".$route.serialize($param)); if(isset($GLOBALS[$key])) { $url = $GLOBALS[$key]; return $url; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $route_array = explode("#",$route); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } $module = strtolower(trim($route_array[0])); $action = strtolower(trim($route_array[1])); if(!$module||$module=='index')$module=""; if(!$action||$action=='index')$action=""; if(true) { //原始模式 $url = APP_ROOT."/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= "ctl=".$module."&"; if($action&&$action!='') $url .= "act=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } else { //重写的默认 $url = APP_ROOT; if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "-".$action; if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; switch ($route) { case "xxx": break; default: break; } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); if($url=='')$url="/"; $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } } //手机端 访问根目录的url function url_root($route="index",$param=array()) { $key = md5("URL_KEY_".$route.serialize($param)); if(isset($GLOBALS[$key])) { $url = $GLOBALS[$key]; return $url; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $route_array = explode("#",$route); if(isset($param)&&$param!=''&&!is_array($param)) { $param['id'] = $param; } $module = strtolower(trim($route_array[0])); $action = strtolower(trim($route_array[1])); if(!$module||$module=='index')$module=""; if(!$action||$action=='index')$action=""; if(app_conf("URL_MODEL")==0) { //原始模式 $url = get_domain().REAL_APP_ROOT."/index.php"; if($module!=''||$action!=''||count($param)>0) //有后缀参数 { $url.="?"; } if($module&&$module!='') $url .= "ctl=".$module."&"; if($action&&$action!='') $url .= "act=".$action."&"; if(count($param)>0) { foreach($param as $k=>$v) { if($k&&$v) $url =$url.$k."=".urlencode($v)."&"; } } if(substr($url,-1,1)=='&'||substr($url,-1,1)=='?') $url = substr($url,0,-1); $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } else { //重写的默认 $url = get_domain().REAL_APP_ROOT; if($module&&$module!='') $url .= "/".$module; if($action&&$action!='') $url .= "-".$action; if(count($param)>0) { $url.="/"; foreach($param as $k=>$v) { $url =$url.$k."-".urlencode($v)."-"; } } $route = $module."#".$action; switch ($route) { case "xxx": break; default: break; } if(substr($url,-1,1)=='/'||substr($url,-1,1)=='-') $url = substr($url,0,-1); if($url=='')$url="/"; $GLOBALS[$key] = $url; set_dynamic_cache($key,$url); return $url; } } function unicode_encode($name) {//to Unicode $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($name); $str = ''; for($i = 0; $i < $len - 1; $i = $i + 2) { $c = $name[$i]; $c2 = $name[$i + 1]; if (ord($c) > 0) {// 两个字节的字 $cn_word = '\\'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16); $str .= strtoupper($cn_word); } else { $str .= $c2; } } return $str; } function unicode_decode($name) {//Unicode to $pattern = '/([\w]+)|(\\\u([\w]{4}))/i'; preg_match_all($pattern, $name, $matches); if (!empty($matches)) { $name = ''; for ($j = 0; $j < count($matches[0]); $j++) { $str = $matches[0][$j]; if (strpos($str, '\\u') === 0) { $code = base_convert(substr($str, 2, 2), 16, 10); $code2 = base_convert(substr($str, 4), 16, 10); $c = chr($code).chr($code2); $c = iconv('UCS-2', 'UTF-8', $c); $name .= $c; } else { $name .= $str; } } } return $name; } //载入动态缓存数据 function load_dynamic_cache($name) { if(isset($GLOBALS['dynamic_cache'][$name])) { return $GLOBALS['dynamic_cache'][$name]; } else { return false; } } function set_dynamic_cache($name,$value) { if(!isset($GLOBALS['dynamic_cache'][$name])) { if(count($GLOBALS['dynamic_cache'])>MAX_DYNAMIC_CACHE_SIZE) { array_shift($GLOBALS['dynamic_cache']); } $GLOBALS['dynamic_cache'][$name] = $value; } } function load_auto_cache($key,$param=array(),$is_real=true) { $keys = array('admin_nav','admin_role','api_list','article','article_agreement','article_cates','article_cates_bs','article_notice','article_privacy','banner_list', 'cache_nav_list','cate_id','cate_top','index_image','lottery_luckyers','m_config','message_cate','mobile_code','new_hepls','page_image', 'pay_list','prop_id','prop_list','region_list','rule_list','score_cates','tipoff_type_list','user_carry_config','user_level','usersig' ); fanwe_require(APP_ROOT_PATH."system/libs/auto_cache.php"); //if(!in_array($key,$keys)){ // return false; //} $file = APP_ROOT_PATH."system/auto_cache/".$key.".auto_cache.php"; // if(file_exists($file)) // { fanwe_require($file); $class = $key."_auto_cache"; $obj = new $class; $result = $obj->load($param,$is_real); // } // else // $result = false; return $result; } function rm_auto_cache($key,$param=array()) { fanwe_require(APP_ROOT_PATH."system/libs/auto_cache.php"); $file = APP_ROOT_PATH."system/auto_cache/".$key.".auto_cache.php"; if(file_exists($file)) { fanwe_require($file); $class = $key."_auto_cache"; $obj = new $class; $obj->rm($param); } } function clear_auto_cache($key,$param=array()) { fanwe_require(APP_ROOT_PATH."system/libs/auto_cache.php"); $file = APP_ROOT_PATH."system/auto_cache/".$key.".auto_cache.php"; if(file_exists($file)) { fanwe_require($file); $class = $key."_auto_cache"; $obj = new $class; $obj->clear_all($param); } } function app_login(){ $agentArr = agentArr(); $user_info = es_session::get("user_info"); if(!$user_info){ $data['is_login'] = 0; $data['user_id'] = ''; $data['nick_name'] = ''; $data['mobile'] = ''; }else{ $data['is_login'] = 1; $data['user_id'] = $user_info['id']; $data['nick_name'] = $user_info['nick_name']; $data['mobile'] = $user_info['mobile']; $data['head_image'] = add_domain_url($user_info['head_image']); } if($agentArr['sdk_type']=="ios"){ $data['sdk_data']= "weixin://"; } else{ $data['sdk_data']= "com.tencent.mm"; } return $data; } /*ajax返回*/ function ajax_return($data,$r_type=4,$is_debug=false) { if(!$is_debug){ header("Content-Type:text/html; charset=utf-8"); header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); filter_null($data);//过滤null //过滤false $data = filter_all_false($data); $encrypt = $GLOBALS['encrypt']; $data['act'] = $encrypt['act']; $data['ctl'] = $encrypt['ctl']; if($encrypt['i_type']){ ajax_return_aes($data,$r_type); }else{ echo(json_encode($data)); } exit; }else{ var_export($data); echo "
"; exit; } } /*admin 后台 ajax返回*/ function admin_ajax_return($data,$is_debug=false) { if(!$is_debug){ header("Content-Type:text/html; charset=utf-8"); header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); filter_null($data);//过滤null //过滤false echo(json_encode($data)); exit; }else{ var_export($data); echo "
"; exit; } } //过滤null 把null改为空; function filter_null(&$request) { foreach($request as $k=>$v) { if(is_array($v)) { filter_null($request[$k]); } else { if(is_null($v)) { $request[$k] = ''; } } } } /*ajax返回*/ function ajax_file_return($data,$is_debug=false) { if(!$is_debug){ header("Content-Type:text/html; charset=utf-8"); echo(json_encode($data)); exit; }else{ if($data['status']==0){ var_export($data); echo "
"; exit; } } } /** * 过滤绑定用户名中的奇葩字符:替换成可以存入的3字节 */ function filterEmoji($string){ return preg_replace('/[\x{10000}-\x{10FFFF}]/u', '',$string); } /** * 屏蔽Emoji表情:去除4字节的表情 */ /*function filterEmoji1($string){ $str = preg_replace_callback( '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; }*/ function is_animated_gif($filename){ $fp=fopen($filename, 'rb'); $filecontent=fread($fp, filesize($filename)); fclose($fp); return strpos($filecontent,chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0')===FALSE?0:1; } function gen_qrcode($str,$size = 5) { require_once APP_ROOT_PATH."system/phpqrcode/qrlib.php"; $root_dir = APP_ROOT_PATH."public/images/qrcode/"; if (!is_dir($root_dir)) { @mkdir($root_dir); @chmod($root_dir, 0777); } $filename = md5($str."|".$size); $hash_dir = $root_dir. '/c' . substr(md5($filename), 0, 1)."/"; if (!is_dir($hash_dir)) { @mkdir($hash_dir); @chmod($hash_dir, 0777); } $filesave = $hash_dir.$filename.'.png'; if(!file_exists($filesave)) { QRcode::png($str, $filesave, 'Q', $size, 2); } return APP_ROOT."/public/images/qrcode/c". substr(md5($filename), 0, 1)."/".$filename.".png"; } function format_price($v) { if(!$v){$v = 0;} return "¥".number_format($v,2); } //发密码验证邮件 function send_user_password_mail($user_id) { $verify_code = rand(111111,999999); $GLOBALS['db']->query("update ".DB_PREFIX."user set password_verify = '".$verify_code."' where id = ".$user_id); $user_info = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user where id = ".$user_id); if($user_info) { $tmpl = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."msg_template where name = 'TPL_MAIL_USER_PASSWORD'"); $tmpl_content= $tmpl['content']; $user_info['logo']=app_conf("SITE_LOGO"); $user_info['site_name']=app_conf("SITE_NAME"); $time=get_gmtime(); $user_info['send_time']=to_date($time,'Y年m月d日'); $user_info['send_time_ms']=to_date($time,'Y年m月d日 H时i分'); $user_info['password_url'] = get_domain().url("settings#password", array("code"=>$user_info['password_verify'],"id"=>$user_info['id'])); $GLOBALS['tmpl']->assign("user",$user_info); $msg = $GLOBALS['tmpl']->fetch("str:".$tmpl_content); $msg_data['dest'] = $user_info['email']; $msg_data['send_type'] = 1; $msg_data['title'] = "重置密码"; $msg_data['content'] = addslashes($msg); $msg_data['send_time'] = 0; $msg_data['is_send'] = 0; $msg_data['create_time'] = get_gmtime(); $msg_data['user_id'] = $user_info['id']; $msg_data['is_html'] = $tmpl['is_html']; $GLOBALS['db']->autoExecute(DB_PREFIX."deal_msg_list",$msg_data); //插入 } } function strim($str) { return quotes(htmlspecialchars(trim($str))); } function btrim($str) { return quotes(trim($str)); } function valid_tag($str) { return preg_replace("/<(?!div|ol|ul|li|sup|sub|span|br|img|p|h1|h2|h3|h4|h5|h6|\/div|\/ol|\/ul|\/li|\/sup|\/sub|\/span|\/br|\/img|\/p|\/h1|\/h2|\/h3|\/h4|\/h5|\/h6|blockquote|\/blockquote|strike|\/strike|b|\/b|i|\/i|u|\/u)[^>]*>/i","",$str); } //$type = 1(添加) 2(删除) function update_user_weibo($user_id,$weibo_url,$type=1) { if($weibo_url!="") { if($type==1) { if($GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."user_weibo where weibo_url = '".$weibo_url."' and user_id = ".$user_id)==0) { $weibo_data['user_id'] = $user_id; $weibo_data['weibo_url'] = $weibo_url; $GLOBALS['db']->autoExecute(DB_PREFIX."user_weibo",$weibo_data); } } if($type==2) { $GLOBALS['db']->query("delete from ".DB_PREFIX."user_weibo where user_id = ".$user_id." and weibo_url = '".$weibo_url."'"); } } } //同步到微博 function syn_weibo($data) { $api_list = $GLOBALS['db']->getAllCached("select * from ".DB_PREFIX."api_login where is_weibo = 1"); foreach($api_list as $k=>$v) { if($GLOBALS['user_info'][strtolower($v['class_name'])."_id"]==""||$GLOBALS['user_info'][strtolower($v['class_name'])."_token"]=="") { unset($api_list[$k]); } else { $class_name = $v['class_name']."_api"; require_once APP_ROOT_PATH."system/api_login/".$class_name.".php"; $o = new $class_name($v); $o->send_message($data); } } } function check_sms_send($mobile){ $data = array(); $data['status'] = 1; $data['error'] = "未定义限制"; /* if(!SMS_MOBILE_SEND_COUNT&&!SMS_IP_SEND_COUNT){ //return false; $data['status'] = 1; $data['error'] = "未定义限制"; }*/ $now_ip = get_client_ip(); $now_date = to_date(get_gmtime(),'Y-m-d'); //$now_date = to_timespan($now_date); //$to_date = $now_date + 24*3600; if (defined('SMS_MOBILE_SEND_COUNT') && SMS_MOBILE_SEND_COUNT > 0){ $mobile_sql = "select count(*) from ".DB_PREFIX."deal_msg_list where send_type = 0 and dest = '".$mobile."' and send_date ='".$now_date."'"; $mobile_count = $GLOBALS['db']->getOne($mobile_sql); $mobile_count = intval($mobile_count); if($mobile_count>SMS_MOBILE_SEND_COUNT){ $data['status'] = 0; $data['error'] = "验证码发送失败,当前手机号已超过今天限额"; } } if ($data['status'] == 1 && defined('SMS_IP_SEND_COUNT') && SMS_IP_SEND_COUNT > 0){ $date_h = to_date(get_gmtime(),'H'); $ip_sql = "select count(*) from ".DB_PREFIX."deal_msg_list where send_type = 0 and client_ip ='".$now_ip."' and send_h = ".$date_h." and send_date ='".$now_date."'"; $ip_count = $GLOBALS['db']->getOne($ip_sql); $ip_count = intval($ip_count); if($ip_count>SMS_IP_SEND_COUNT){ $data['status'] = 0; $data['error'] = "验证码发送失败,当前ip已超过今天限额"; } } return $data; } //发短信验证码 function send_verify_sms($mobile,$code,$type="") { $type ='sms'; $dest = $mobile; $title=''; /* * 发送验证码 */ $user_info = array(); if(!empty($dest)){ $user_info = $GLOBALS['db']->getRow("select *,id as user_id from ".DB_PREFIX."user where mobile='".$dest."'"); $user_info['mobile'] = $dest; $user_info['code'] = $code; $user_info['tmpl_sms_name'] = 'verify'; if($title){ $msg_data['title'] = $title; }else{ $msg_data['title'] = "短信验证码"; } $msg_data['dest'] = $user_info['mobile']; $msg_data['user_id'] = $user_info['user_id']; $msg_data['is_html'] = 0; $msg_data['send_type'] = 0; $msg_data['code'] =$code; if(app_conf("SMS_ON")!=1&&$type=='sms'){ return false; } $tmpl = $GLOBALS['db']->getRowCached("select * from ".DB_PREFIX."msg_template where name = 'TPL_SMS_VERIFY_CODE'"); //$tmpl = str_replace('{$verify.mobile}',$dest,$tmpl); //补充 替换verify.mobile $tmpl = str_replace('你的手机号为{$verify.mobile},','',$tmpl); $tmpl['content'] = str_replace('{$verify.code}',$code,$tmpl); $msg= $tmpl['content']; $msg_data['send_type'] = 0; $msg_data['content'] = addslashes($msg['content']); $msg_data['send_time'] = 0; $msg_data['is_send'] = 0; $msg_data['create_time'] = get_gmtime(); $msg_data['is_html'] = 1; $msg_data['client_ip'] = get_client_ip(); $msg_data['send_date'] = to_date(get_gmtime(),'Y-m-d'); $msg_data['send_h'] = to_date(get_gmtime(),'H'); if($msg_data){ $data = $msg_data; if(app_conf('IS_SMS_DIRECT')==1){ if($data['send_type']==0){ require_once APP_ROOT_PATH."system/utils/es_sms.php"; $sms = new sms_sender(); $result = $sms->sendSms($data['dest'],$data['content']); $data['is_success'] = intval($result['status']); $data['result'] = $result['msg']; } $data['is_send'] = 1; $data['send_time'] = get_gmtime(); } return $GLOBALS['db']->autoExecute(DB_PREFIX."deal_msg_list",$data); //插入 } } } /** * 发送投资通短信验证码 * @param $mobile 手机号 * @param $code 验证码 */ function send_tzt_verify_sms($mobile, $code){ $GLOBALS['msg']->manage_msg('TPL_SMS_TZT_VERIFY_CODE',$mobile,array('code'=>$code,'user_id'=>$GLOBALS['user_info']['id'])); } //发邮件验证码 function send_verify_email($email,$code,$title="") { $GLOBALS['msg']->manage_msg('TPL_MAIL_USER_VERIFY',$email,array('code'=>$code,'title'=>$title)); } //获取系统运行上传的值 function get_max_file_size(){ $system_size=intval(ini_get("post_max_size"))$config_size?$config_size:$system_size; //number_format($system_size/(1024*1024),1) if($max_size>=1024*1024){ return number_format($max_size/(1024*1024),1).'MB'; }elseif($max_size>=1024){ return number_format($max_size/(1024),1).'KB'; }else{ return $max_size.'B'; } } //获取系统运行上传的值 function get_max_file_size_byte(){ $system_size=intval(ini_get("post_max_size"))$config_size?$config_size:$system_size; return $max_size; } function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){ return true; } //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息 if (isset ($_SERVER['HTTP_VIA'])) { //找不到为flase,否则为true return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false; } //判断手机发送的客户端标志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array ( 'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile' ); // 从HTTP_USER_AGENT中查找手机浏览器的关键字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } //协议法,因为有可能不准确,放到最后判断 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移动设备 // 如果支持wml和html但是wml在html之前则是移动设备 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } } //发起通知用户审核通过或者失败 function send_investor_status($user_info){ if($user_info['id']){ $GLOBALS['msg']->manage_msg("MSG_INVEST_STATUS",$user_info['id'],array('user_info'=>$user_info)); } } function get_investor($is_investor){ switch($is_investor){ case 0: return '普通会员'; break; case 1: return '企业会员'; break; /*case 2: return '投资机构'; break;*/ } } function get_investor_status($investor_status){ switch($investor_status){ case 0: return '未审核'; break; case 1: return '待审核'; break; case 2: return '审核通过'; break; case 3: return '审核未通过'; break; } } function LOGIN_DES_KEY(){ if(!es_session::is_set("DES_KEY")){ require_once APP_ROOT_PATH."system/utils/es_string.php"; es_session::set("DES_KEY",es_string::rand_string(50)); } return es_session::get("DES_KEY"); } //检测手机是否可以绑定 function check_registor_mobile($check_mobile_info,$ajax=1){ $mobile = $check_mobile_info['mobile']; $login_type = $check_mobile_info['login_type']; if(strlen($mobile)< 0 || strlen($mobile)== 0){ $data['status'] = 0; $data['info'] = '请输入手机号码'; ajax_return($data); } if(!check_mobile($mobile)) { $data['status'] = 0; $data['info'] = '请填写正确的手机号码'; ajax_return($data); } if(strlen($mobile)>11){ $data['status'] = 0; $data['info'] = '"手机号码长度不能超过11位'; ajax_return($data); } $condition=" mobile ='".$mobile."' and login_type=".$login_type; $num=$GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."user where $condition"); if($num>0){ $data['status'] = 0; $data['info'] = '手机已存在,请重新输入'; ajax_return($data); } } //检测手机是否可以绑定 function check_registor_email($email,$ajax=1){ if(strlen($email)<=0 ){ showErr("请输入邮箱",$ajax,""); } if(!check_email($email)) { showErr("请填写正确的邮箱",$ajax,""); } $condition=" email='$email'"; $num=$GLOBALS['db']->getOne("select count(*) from ".DB_PREFIX."user where $condition"); if($num>0){ showErr("邮箱已存在,请重新输入",$ajax,""); } } /** * 验证身份证号 * @param $vStr * @return bool */ function isCreditNo($vStr) { $vCity = array( '11','12','13','14','15','21','22', '23','31','32','33','34','35','36', '37','41','42','43','44','45','46', '50','51','52','53','54','61','62', '63','64','65','71','81','82','91' ); if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) return false; if (!in_array(substr($vStr, 0, 2), $vCity)) return false; $vStr = preg_replace('/[xX]$/i', 'a', $vStr); $vLength = strlen($vStr); if ($vLength == 18) { $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2); } else { $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2); } if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) return false; if ($vLength == 18) { $vSum = 0; for ($i = 17 ; $i >= 0 ; $i--) { $vSubStr = substr($vStr, 17 - $i, 1); $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11)); } if($vSum % 11 != 1) return false; } return true; } //获取来源网站 function set_source_url(){ if(!es_session::get("source_url")&&!$GLOBALS['user_info']){ if($_SERVER['HTTP_REFERER']){ $source_url=$_SERVER['HTTP_REFERER']; $url=parse_url($source_url); if($url['host']!=$_SERVER['HTTP_HOST']){ es_session::set("source_url",$url['host']); } } } } function get_http() { return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'https://' : 'http://'; } function get_domain() { /* 协议 */ $protocol = get_http(); if(app_conf("SITE_DOMAIN")!="") { return $protocol.app_conf("SITE_DOMAIN"); } /* 域名或IP地址 */ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $host = $_SERVER['HTTP_X_FORWARDED_HOST']; } elseif (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; } else { /* 端口 */ if (isset($_SERVER['SERVER_PORT'])) { $port = ':' . $_SERVER['SERVER_PORT']; if ((':80' == $port && 'http://' == $protocol) || (':443' == $port && 'https://' == $protocol)) { $port = ''; } } else { $port = ''; } if (isset($_SERVER['SERVER_NAME'])) { $host = $_SERVER['SERVER_NAME'] . $port; } elseif (isset($_SERVER['SERVER_ADDR'])) { $host = $_SERVER['SERVER_ADDR'] . $port; } } return $protocol . $host; } function get_host() { /* 域名或IP地址 */ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $host = $_SERVER['HTTP_X_FORWARDED_HOST']; } elseif (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; } else { if (isset($_SERVER['SERVER_NAME'])) { $host = $_SERVER['SERVER_NAME']; } elseif (isset($_SERVER['SERVER_ADDR'])) { $host = $_SERVER['SERVER_ADDR']; } } return $host; } /** * 将单个图片同步到远程的图片服务器 * @param string $url 本地的图片地址,"./public/......" */ function syn_to_remote_image_server($url,$is_unlink=true) { if($GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!="NONE") { if($GLOBALS['distribution_cfg']['OSS_TYPE']=="ES_FILE") { $pathinfo = pathinfo($url); $file = $pathinfo['basename']; $dir = $pathinfo['dirname']; $dir = str_replace("./public/", "", $dir); $filefull = SITE_DOMAIN.APP_ROOT."/public/".$dir."/".$file; $syn_url = $GLOBALS['distribution_cfg']['OSS_DOMAIN']."/es_file.php?username=".$GLOBALS['distribution_cfg']['OSS_ACCESS_ID']."&password=".$GLOBALS['distribution_cfg']['OSS_ACCESS_KEY']."&file=". $filefull."&path=".$dir."/&name=".$file."&act=0"; @file_get_contents($syn_url); } elseif($GLOBALS['distribution_cfg']['OSS_TYPE']=="ALI_OSS") { $pathinfo = pathinfo($url); $file = $pathinfo['basename']; $dir = $pathinfo['dirname']; $dir = str_replace("./public/", "public/", $dir); require_once APP_ROOT_PATH."system/alioss/sdk.class.php"; $oss_sdk_service = new ALIOSS(); //设置是否打开curl调试模式 $oss_sdk_service->set_debug_mode(FALSE); $bucket = $GLOBALS['distribution_cfg']['OSS_BUCKET_NAME']; $object = $dir."/".$file; $file_path = APP_ROOT_PATH.$dir."/".$file; $oss_sdk_service->upload_file_by_file($bucket,$object,$file_path); if($is_unlink&&intval($GLOBALS['distribution_cfg']['OSS_NO_SAVE_LOCALHOST'])==0){ $info = (array)$oss_sdk_service->is_object_exist($bucket,$object); if(file_exists($file_path)&&$info['status']==200)unlink($file_path); } } } } function format_image_path($out) { //对图片路径的修复 if($GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!="NONE") { $domain = $GLOBALS['distribution_cfg']['OSS_DOMAIN']; } else { $domain = SITE_DOMAIN.APP_ROOT; } $out = str_replace(APP_ROOT."./public/",$domain."/public/",$out); $out = str_replace("./public/",$domain."/public/",$out); return $out; } function replace_public($str){ //对图片路径的修复 if($GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!="NONE") { $domain = $GLOBALS['distribution_cfg']['OSS_DOMAIN']; } else { $domain = SITE_DOMAIN.APP_ROOT; } return str_replace($domain."/public/","./public/",$str); } /** * 同步脚本样式缓存 $url:'public/runtime/statics/biz/'.$url.'.css'; * @param unknown_type $url */ function syn_to_remote_file_server($url) { if($GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!="NONE") { if($GLOBALS['distribution_cfg']['OSS_TYPE']=="ES_FILE") { $pathinfo = pathinfo($url); $file = $pathinfo['basename']; $dir = $pathinfo['dirname']; $dir = str_replace("public/", "", $dir); $filefull = SITE_DOMAIN.APP_ROOT."/public/".$dir."/".$file; $syn_url = $GLOBALS['distribution_cfg']['OSS_DOMAIN']."/es_file.php?username=".$GLOBALS['distribution_cfg']['OSS_ACCESS_ID']."&password=".$GLOBALS['distribution_cfg']['OSS_ACCESS_KEY']."&file=". $filefull."&path=".$dir."/&name=".$file."&act=0"; @file_get_contents($syn_url); } elseif($GLOBALS['distribution_cfg']['OSS_TYPE']=="ALI_OSS") { $pathinfo = pathinfo($url); $file = $pathinfo['basename']; $dir = $pathinfo['dirname']; require_once APP_ROOT_PATH."system/alioss/sdk.class.php"; $oss_sdk_service = new ALIOSS(); //设置是否打开curl调试模式 $oss_sdk_service->set_debug_mode(FALSE); $bucket = $GLOBALS['distribution_cfg']['OSS_BUCKET_NAME']; $object = $dir."/".$file; $file_path = APP_ROOT_PATH.$dir."/".$file; $oss_sdk_service->upload_file_by_file($bucket,$object,$file_path); } } } function isWeixin(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']); $is_weixin = strpos($agent, 'micromessenger') ? true : false ; if($is_weixin){ return true; }else{ return false; } } function isios() { //判断手机发送的客户端标志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array ( 'iphone', 'ipod', 'mac', ); // 从HTTP_USER_AGENT中查找手机浏览器的关键字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } } //显示成功 function showIpsInfo($msg,$jump='') { $GLOBALS['tmpl']->assign('msg',$msg); $GLOBALS['tmpl']->assign('jump',$jump); $GLOBALS['tmpl']->display("ips_show.html"); exit; } //日期加减 function dec_date($date,$dec){ //$sysc_start_time = to_timespan(to_date(to_timespan($date),'Y-m-d')) - $dec * 86400; return to_date(to_timespan($date) - $dec * 86400,'Y-m-d'); } /** * 作用:将xml转为array */ function xmlToArray($xml) { //将XML转为array $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $array_data; } /** * 作用:array转xml */ function arrayToXml($arr) { $xml = ""; foreach ($arr as $key=>$val) { if (is_numeric($val)) { $xml.="<".$key.">".$val.""; } else $xml.="<".$key.">"; } $xml.=""; return $xml; } function log_result($word) { if (is_array($word)) $word = var_export($word,true); $file = APP_ROOT_PATH."/public/notify_url.log"; $fp = fopen($file,"a"); flock($fp, LOCK_EX) ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n"); flock($fp, LOCK_UN); fclose($fp); } function log_result_wx($word) { if (is_array($word)) $word = var_export($word,true); $file = APP_ROOT_PATH."/public/notify_url_wx.log"; $fp = fopen($file,"a"); flock($fp, LOCK_EX) ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n"); flock($fp, LOCK_UN); fclose($fp); } function log_result_wx_pay_log($word) { if (!is_dir(APP_ROOT_PATH."public/wx_pay_log")) { @mkdir(APP_ROOT_PATH."public/wx_pay_log"); } $file = APP_ROOT_PATH."/public/wx_pay_log/".to_date(get_gmtime()-604800,"Ymd").".log"; if(file_exists($file)){ unlink($file); } $filename = to_date(get_gmtime(),"Ymd"); if (is_array($word)) $word = var_export($word,true); $file = APP_ROOT_PATH."/public/wx_pay_log/".$filename.".log"; $fp = fopen($file,"a"); flock($fp, LOCK_EX) ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n"); flock($fp, LOCK_UN); fclose($fp); } /** * 分页处理 * @param string $type 所在页面 * @param array $args 参数 * @param int $total_count 总数 * @param int $page 当前页 * @param int $page_size 分页大小 * @param string $url 自定义路径 * @param int $offset 偏移量 * @return array */ function buildPage($type,$args,$total_count,$page = 1,$page_size = 0,$url='',$offset = 5){ $pager['total_count'] = intval($total_count); $pager['page'] = $page; $pager['page_size'] = ($page_size == 0) ? 20 : $page_size; /* page 总数 */ $pager['page_count'] = ($pager['total_count'] > 0) ? ceil($pager['total_count'] / $pager['page_size']) : 1; /* 边界处理 */ if ($pager['page'] > $pager['page_count']) $pager['page'] = $pager['page_count']; $pager['limit'] = ($pager['page'] - 1) * $pager['page_size'] . "," . $pager['page_size']; $page_prev = ($pager['page'] > 1) ? $pager['page'] - 1 : 1; $page_next = ($pager['page'] < $pager['page_count']) ? $pager['page'] + 1 : $pager['page_count']; $pager['prev_page'] = $page_prev; $pager['next_page'] = $page_next; if (!empty($url)){ $pager['page_first'] = $url . 1; $pager['page_prev'] = $url . $page_prev; $pager['page_next'] = $url . $page_next; $pager['page_last'] = $url . $pager['page_count']; } else{ $args['page'] = '_page_'; if(!empty($type)){ if(strpos($type,'javascript:') === false){ //$page_url = JKU($type,$args); $page_url = u($type,$args); }else{ $page_url = $type; } }else{ $page_url = 'javascript:;'; } $pager['page_first'] = str_replace('_page_',1,$page_url); $pager['page_prev'] = str_replace('_page_',$page_prev,$page_url); $pager['page_next'] = str_replace('_page_',$page_next,$page_url); $pager['page_last'] = str_replace('_page_',$pager['page_count'],$page_url); } $pager['page_nums'] = array(); if($pager['page_count'] <= $offset * 2){ for ($i=1; $i <= $pager['page_count']; $i++){ $pager['page_nums'][] = array('name' => $i,'url' => empty($url) ? str_replace('_page_',$i,$page_url) : $url . $i); } }else{ if($pager['page'] - $offset < 2){ $temp = $offset * 2; for ($i=1; $i<=$temp; $i++){ $pager['page_nums'][] = array('name' => $i,'url' => empty($url) ? str_replace('_page_',$i,$page_url) : $url . $i); } $pager['page_nums'][] = array('name'=>'...'); $pager['page_nums'][] = array('name' => $pager['page_count'],'url' => empty($url) ? str_replace('_page_',$pager['page_count'],$page_url) : $url . $pager['page_count']); }else{ $pager['page_nums'][] = array('name' => 1,'url' => empty($url) ? str_replace('_page_',1,$page_url) : $url . 1); $pager['page_nums'][] = array('name'=>'...'); $start = $pager['page'] - $offset + 1; $end = $pager['page'] + $offset - 1; if($pager['page_count'] - $end > 1){ for ($i=$start;$i<=$end;$i++){ $pager['page_nums'][] = array('name' => $i,'url' => empty($url) ? str_replace('_page_',$i,$page_url) : $url . $i); } $pager['page_nums'][] = array('name'=>'...'); $pager['page_nums'][] = array('name' => $pager['page_count'],'url' => empty($url) ? str_replace('_page_',$pager['page_count'],$page_url) : $url . $pager['page_count']); }else{ $start = $pager['page_count'] - $offset * 2 + 1; $end = $pager['page_count']; for ($i=$start;$i<=$end;$i++){ $pager['page_nums'][] = array('name' => $i,'url' => empty($url) ? str_replace('_page_',$i,$page_url) : $url . $i); } } } } return $pager; } function parse_url_tag_coomon($str) { $str = substr($str,2); $str_array = explode("|",$str); $route = $str_array[0]; $param_tmp = explode("&",$str_array[1]); $param = array(); foreach($param_tmp as $item) { if($item!='') $item_arr = explode("=",$item); if($item_arr[0]&&$item_arr[1]) $param[$item_arr[0]] = $item_arr[1]; } return url($route,$param); } //解析URL标签 // $str = u:acate#index|id=10&name=abc function parse_url_tag($str) { $key = md5("URL_TAG_".$str); if(isset($GLOBALS[$key])) { return $GLOBALS[$key]; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $str = substr($str,2); $str_array = explode("|",$str); $route = $str_array[0]; $param_tmp = explode("&",$str_array[1]); $param = array(); foreach($param_tmp as $item) { if($item!='') $item_arr = explode("=",$item); if($item_arr[0]&&$item_arr[1]) $param[$item_arr[0]] = $item_arr[1]; } $GLOBALS[$key]= url($route,$param); set_dynamic_cache($key,$GLOBALS[$key]); return $GLOBALS[$key]; } function parse_url_tag_wap($str) { $key = md5("URL_TAG_".$str); if(isset($GLOBALS[$key])) { return $GLOBALS[$key]; } $url = load_dynamic_cache($key); if($url!==false) { $GLOBALS[$key] = $url; return $url; } $str = substr($str,2); $str_array = explode("|",$str); $route = $str_array[0]; $param_tmp = explode("&",$str_array[1]); $param = array(); foreach($param_tmp as $item) { if($item!='') $item_arr = explode("=",$item); if($item_arr[0]&&$item_arr[1]) $param[$item_arr[0]] = $item_arr[1]; } $GLOBALS[$key]= url_wap($route,$param); set_dynamic_cache($key,$GLOBALS[$key]); return $GLOBALS[$key]; } function HASH_KEY(){ if(!es_session::is_set("HASH_KEY")){ require_once APP_ROOT_PATH."system/utils/es_string.php"; es_session::set("HASH_KEY",es_string::rand_string(50)); } return es_session::get("HASH_KEY"); } function check_hash_key(){ if(strim($_REQUEST['fhash'])!="" && md5(HASH_KEY())==md5($_REQUEST['fhash'])){ return true; } else return false; } function number_price_format($price) { if($price*100%100==0) $price= number_format(round($price,2)); else $price = number_format(round($price,2),2); return $price; } /** 获取当前时间戳,精确到毫秒 */ function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec-date('Z')); } /** 格式化时间戳,精确到毫秒,x代表毫秒 */ function microtime_format($utc_time, $format = 'H:i:s.x') { if (empty ( $utc_time )) { return ''; } $timezone = intval(app_conf('TIME_ZONE')); $time = $utc_time + $timezone * 3600; list($usec, $sec) = explode(".", $time); $date = date($format,$usec); return str_replace('x', $sec, $date); } function trim_utf8mb4($str){ return preg_replace('/[\x{10000}-\x{10FFFF}]/u', '',$str); } /** * 只保留字符串首尾字符,隐藏中间用*代替(两个字符时只显示第一个) * @param string $user_name 姓名 * @return string 格式化后的姓名 */ function substr_cut($user_name){ $strlen = mb_strlen($user_name, 'utf-8'); $firstStr = mb_substr($user_name, 0, 1, 'utf-8'); $lastStr = mb_substr($user_name, -1, 1, 'utf-8'); return $strlen == 2 ? $firstStr . str_repeat('*', mb_strlen($user_name, 'utf-8') - 1) : $firstStr . str_repeat("*", $strlen - 2) . $lastStr; } /* * is_wap 0 表示wep 1表示wap 2表示APP */ function create_target_url($target,$is_wap = 0,$cart_id=''){ $return_url = ""; if(strpos($target,'URL-dealID-')!==FALSE){ $deal_id = trim($target,'URL-dealID-'); if($cart_id!=''){ $id = trim($cart_id,'URL-cartID-'); } if($is_wap==0){ $return_url = url("deal#show",array('id'=>$deal_id)); }elseif($is_wap==1){ if($id){ $return_url = url_wap("cart#index",array('id'=>$id,'deal_id'=>$deal_id)); }else{ $return_url = url_wap("deal#show",array('id'=>$deal_id)); } } } return $return_url; } //验证网址 function check_url($url) { $patern ='/^http[s]?:\/\/'. '(([0-9]{1,3}\.){3}[0-9]{1,3}'. // IP形式的URL- 199.194.52.184 '|'. // 允许IP和DOMAIN(域名) '([0-9a-z_!~*\'()-]+\.)*'. // 域名- www. '([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.'. // 二级域名 '[a-z]{2,6})'. // first level domain- .com or .museum '(:[0-9]{1,4})?'. // 端口- :80 '((\/\?)|'. // a slash isn't required if there is no file name '(\/[0-9a-zA-Z_!~\'\(\)\[\]\.;\?:@&=\+\$,%#-\/^\*\|]*)?)$/'; if(!empty($url) && !preg_match($patern,$url)) { return false; } else return true; } /* * 转成元 * $money 金额 */ function transform_yuan($money){ $money =intval($money); if($money){ return $money * 10000; } } /* * 元转成逆转万元 * $money 金额 */ function transform_wan($money){ $money =intval($money); if($money){ return $money/10000; } } function create_app_js($app_conf){ $node_app=APP_ROOT_PATH."public/node_app.js"; if(is_file($node_app)){ $content=file_get_contents($node_app); $url = get_domain().APP_ROOT; $content=str_replace("{domain}",$url,$content); if($app_conf['IS_SMS_DIRECT']==0){ $deal_msg_list= 'true'; }else{ $deal_msg_list= 'false'; } $content=str_replace("{deal_msg_list}",$deal_msg_list,$content); $time = $app_conf['SEND_SPAN']?$app_conf['SEND_SPAN']*1000:500; $content=str_replace("{time}",$time,$content); $app=APP_ROOT_PATH."public/app.js"; file_put_contents($app,$content); } } /* 微信提现 * */ function wx_withdraw_cash($refund_id){ $msg_item = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user_refund where id = ".$refund_id." and is_pay =1 "); $order_id = $msg_item['id']; $user_info = $GLOBALS['db']->getRow("select gz_openid,nick_name from ".DB_PREFIX."user where id=".$msg_item['user_id']); $open_id = $user_info['gz_openid']; //过滤中文支付 防止微信发送红包失败 //@、#、【】、 $user_name = strFilter($user_info['nick_name']); $ticket = $msg_item['ticket']; if($msg_item) { $payment_info = $GLOBALS['db']->getRow("select id,config,logo from ".DB_PREFIX."payment where class_name='Wwxjspay'"); $payment_info['config'] = unserialize($payment_info['config']); $wx_config=$payment_info['config']; $mch_appid=$wx_config['appid']; $mchid=$wx_config['mchid'];//商户号 $nonce_str='qyzf'.rand(100000, 999999);//随机数 $partner_trade_no='wx'.$order_id.time().rand(10000, 99999);;//商户订单号 $openid=$open_id;//用户唯一标识 $check_name='NO_CHECK';//校验用户姓名选项,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功) $re_user_name=$user_name;//用户姓名 $m_config = load_auto_cache("m_config");//初始化手机端配置 //$amount=intval(floatval($ticket*$m_config['exchange_rate'])*100);//金额(以分为单位,必须大于100) $amount = floatval($msg_item['money']*100); $desc='红包';//描述 require_once APP_ROOT_PATH.'system/extend/ip.php'; $iplocation = new iplocate(); $spbill_create_ip = $iplocation->getIP(); //封装成数据 $dataArr=array(); $dataArr['amount']=$amount; $dataArr['check_name']=$check_name; $dataArr['desc']=$desc; $dataArr['mch_appid']=$mch_appid; $dataArr['mchid']=$mchid; $dataArr['nonce_str']=$nonce_str; $dataArr['openid']=$openid; $dataArr['partner_trade_no']=$partner_trade_no; $dataArr['re_user_name']=$re_user_name; $dataArr['spbill_create_ip']=$spbill_create_ip; $sign=getSign($dataArr,$wx_config['key']); $data=" ".$mch_appid." ".$mchid." ".$nonce_str." ".$partner_trade_no." ".$openid." ".$check_name." ".$re_user_name." ".$amount." ".$desc." ".$spbill_create_ip." ".$sign." "; $ch = curl_init (); $MENU_URL="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; curl_setopt ( $ch, CURLOPT_URL, $MENU_URL ); curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE ); // $zs1=APP_ROOT_PATH."public/weixin/apiclient_cert.pem"; // $zs2=APP_ROOT_PATH."public/weixin/apiclient_key.pem"; $zs1=APP_ROOT_PATH.$wx_config['sslcert']; $zs2=APP_ROOT_PATH.$wx_config['sslkey']; curl_setopt($ch,CURLOPT_SSLCERT,$zs1); curl_setopt($ch,CURLOPT_SSLKEY,$zs2); // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; // Windows NT 5.0)'); curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 ); curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); $info = curl_exec ( $ch ); if (curl_errno ( $ch )) { log_result_wx('Errno' . curl_error ( $ch )); } curl_close ( $ch ); $return = (array)simplexml_load_string($info, 'SimpleXMLElement', LIBXML_NOCDATA); if($return['return_code']=='SUCCESS'&&$return['result_code']=='SUCCESS'){ $refund_data = array(); $refund_data = M("UserRefund")->getById($refund_id); $refund_data['pay_log'] ='已付款'; $refund_data['is_pay'] =3; $refund_data['partner_trade_no'] =$partner_trade_no; $refund_data['ybdrawflowid'] =$return['payment_no']; $refund_data['pay_time'] =NOW_TIME; $refund_data['confirm_cash_ip'] = get_client_ip(); M("UserRefund")->save($refund_data); $res_up_m = M("UserRefund")->save($refund_data); if(!$res_up_m){ $sql = "update ".DB_PREFIX."user_refund set pay_log='已付款',is_pay = 3,partner_trade_no = '".$partner_trade_no."',ybdrawflowid='".$return['payment_no']."',pay_time = ".NOW_TIME.",confirm_cash_ip = '".get_client_ip()."' where id = ".$order_id; $res = $GLOBALS['db']->query($sql); } $payment_data = array(); $payment_data = M("Payment")->getById($payment_info['id']); $payment_data['total_amount'] =$payment_data['total_amount']+$msg_item['money']; $res_p_m = M("Payment")->save($payment_data); if(!$res_p_m){ $sql = "update ".DB_PREFIX."payment set total_amount = total_amount + ".$msg_item['money']." where id = ".$payment_info['id']; $res = $GLOBALS['db']->query($sql); } return true; }else{ $refund_data = array(); $refund_data = M("UserRefund")->getById($order_id); $refund_data['pay_log'] =$return['return_msg'].$return['err_code_des']; $refund_data['partner_trade_no'] =$partner_trade_no; $refund_data['is_pay'] = 4; $refund_data['confirm_cash_ip'] = get_client_ip(); $res_up_m = M("UserRefund")->save($refund_data); if(!$res_up_m){ $GLOBALS['db']->query("update ".DB_PREFIX."user_refund set confirm_cash_ip = '".get_client_ip()."' is_pay=4,pay_log = '".$return['return_msg']."',partner_trade_no = '".$partner_trade_no."' where id = ".$order_id); } return false; } } } /** * 作用:生成签名 */ function getSign($Obj,$key) { //var_dump($Obj);//die; foreach ($Obj as $k => $v) { $Parameters[$k] = $v; } //签名步骤一:按字典序排序参数 ksort($Parameters); $String = formatBizQueryParaMap($Parameters, false); //echo '【string1】'.$String.'
'; //签名步骤二:在string后加入KEY $String = $String."&key=".$key; //echo "【string2】".$String."
"; //签名步骤三:MD5加密 $String = md5($String); //echo "【string3】 ".$String."
"; //签名步骤四:所有字符转为大写 $result_ = strtoupper($String); //echo "【result】 ".$result_."
"; return $result_; } /** * 作用:格式化参数,签名过程需要使用 */ function formatBizQueryParaMap($paraMap, $urlencode) { $buff = ""; ksort($paraMap); foreach ($paraMap as $k => $v) { if($urlencode) { $v = urlencode($v); } //$buff .= strtolower($k) . "=" . $v . "&"; $buff .= $k . "=" . $v . "&"; } //$reqPar; if (strlen($buff) > 0) { $reqPar = substr($buff, 0, strlen($buff)-1); } return $reqPar; } /** * 获得查询次数以及查询时间 * * @access public * @return string */ function run_info() { if(!SHOW_DEBUG)return ""; $query_time = number_format($GLOBALS['db']->queryTime,6); if($GLOBALS['begin_run_time']==''||$GLOBALS['begin_run_time']==0) { $run_time = 0; } else { if (PHP_VERSION >= '5.0.0') { $run_time = number_format(microtime(true) - $GLOBALS['begin_run_time'], 6); } else { list($now_usec, $now_sec) = explode(' ', microtime()); list($start_usec, $start_sec) = explode(' ', $GLOBALS['begin_run_time']); $run_time = number_format(($now_sec - $start_sec) + ($now_usec - $start_usec), 6); } } /* 内存占用情况 */ if (function_exists('memory_get_usage')) { $unit=array('B','KB','MB','GB'); $size = memory_get_usage(); $used = @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; $memory_usage = "占用内存 ".$used; } else { $memory_usage = ''; } /* 是否启用了 gzip */ $enabled_gzip = (app_conf("GZIP_ON") && function_exists('ob_gzhandler')); $gzip_enabled = $enabled_gzip ? "gzip开启" : "gzip关闭"; $str = '共执行 '.$GLOBALS['db']->queryCount.' 个查询,用时 '.$query_time.' 秒,'.$gzip_enabled.','.$memory_usage.',程序执行时间 '.$run_time.' 秒'; foreach($GLOBALS['db']->queryLog as $K=>$sql) { if($K==0)$str.="
SQL语句列表:"; $str.="
行".($K+1).":".$sql; } return "
".$str."
"; } function update_sys_config() { $filename = APP_ROOT_PATH."public/sys_config.php"; if(!file_exists($filename)) { //定义DB require APP_ROOT_PATH.'system/db/db.php'; $dbcfg = require APP_ROOT_PATH."public/db_config.php"; define('DB_PREFIX', $dbcfg['DB_PREFIX']); if(!file_exists(APP_ROOT_PATH.'public/runtime/app/db_caches/')) mkdir(APP_ROOT_PATH.'public/runtime/app/db_caches/',0777); $pconnect = false; $db = new mysql_db($dbcfg['DB_HOST'].":".$dbcfg['DB_PORT'], $dbcfg['DB_USER'],$dbcfg['DB_PWD'],$dbcfg['DB_NAME'],'utf8',$pconnect); //end 定义DB $sys_configs = $db->getAll("select * from ".DB_PREFIX."conf"); $config_str = "$v) { $config_str.="'".$v['name']."'=>'".addslashes($v['value'])."',\n"; } $config_str.=");\n ?>"; file_put_contents($filename,$config_str); $url = APP_ROOT."/"; app_redirect($url); } } function get_admin_nav($role_id,$adm_name){ if(CHANGE_NAV=='default'||!defined('CHANGE_NAV')){ if($adm_name == app_conf('DEFAULT_ADMIN')){ if(defined("MODULE_ADMIN")&&MODULE_ADMIN==1){ $navs = require_once APP_ROOT_PATH."system/admnav_cfg_pc.php"; }else{ $navs = require_once APP_ROOT_PATH."system/admnav_cfg.php"; } }else{ $navs = load_auto_cache("admin_nav",array('id'=>$role_id)); } if($_REQUEST['change_nav']){ $navs = require_once APP_ROOT_PATH."system/admnav_cfg_".$_REQUEST['change_nav'].".php"; } }else{ $navs = require_once APP_ROOT_PATH."system/admnav_cfg_".CHANGE_NAV.".php"; } return deal_admin_nav($navs); } function deal_admin_nav($navs){ if(!defined("OPEN_FAMILY_MODULE")||OPEN_FAMILY_MODULE==0){ unset($navs['user']['groups']['family']); unset($navs['payment']['groups']['cash']['nodes'][2]); } $m_config = load_auto_cache("m_config");//初始化手机端配置 ljz if(!defined("OPEN_SOCIETY_MODULE")||OPEN_SOCIETY_MODULE==0||$m_config['society_pattern']==0){//添加公会模式开关 unset($navs['user']['groups']['society']); //unset($navs['user']['groups']['society']['nodes'][1]); //unset($navs['payment']['groups']['cash']['nodes'][1]); }else{ unset($navs['user']['groups']['family']); unset($navs['payment']['groups']['cash']['nodes'][2]); } if($m_config['society_pattern']!=2){//非无抽成模式下关闭公会收益列表、公会提现列表 unset($navs['user']['groups']['society']['nodes'][1]); unset($navs['payment']['groups']['cash']['nodes'][1]); } if(!defined("OPEN_LUCK_NUM")||OPEN_LUCK_NUM==0){ unset($navs['system']['groups']['lucknum']); } if(!defined("OPEN_ADS")||OPEN_ADS==0){ unset($navs['system']['groups']['ads']); } if(intval(OPEN_SLBGROUP)==0){ unset($navs['system']['groups']['slbgroupconf']); } if (!defined("OPEN_GAME_MODULE")||OPEN_GAME_MODULE==0) { unset($navs['PlugIn']['groups']['gameconf']); } else { if (!defined("OPEN_BANKER_MODULE")||OPEN_BANKER_MODULE==0) { foreach ($navs['PlugIn']['groups']['gameconf']['nodes'] as $key => $value) { if ($value['action']=='bankerLog') { unset($navs['PlugIn']['groups']['gameconf']['nodes'][$key]); } } } if (defined('OPEN_DIAMOND_GAME_MODULE') && OPEN_DIAMOND_GAME_MODULE == 1) { foreach ($navs['PlugIn']['groups']['gameconf']['nodes'] as $key => $value) { $navs['PlugIn']['groups']['gameconf']['nodes'][$key]['name'] = str_replace('金币', '钻石', $value['name']); } } } if (!defined("SHOPPING_GOODS")||SHOPPING_GOODS==0) { unset($navs['PlugIn']['groups']['goodsconf']); unset($navs['PlugIn']['groups']['user_goodsconf']); } if((!defined("OPEN_PAI_MODULE")||OPEN_PAI_MODULE==0) && (!defined("SHOPPING_GOODS")||SHOPPING_GOODS==0)){ unset($navs['PlugIn']['groups']['goods_complaint']); } if (!defined("OPEN_PAI_MODULE")||OPEN_PAI_MODULE==0) { unset($navs['PlugIn']['groups']['pai_goods']); unset($navs['PlugIn']['groups']['goods_order']); } if(!defined("OPEN_PODCAST_GOODS")||OPEN_PODCAST_GOODS==0){ foreach ($navs['PlugIn']['groups']['user_goodsconf']['nodes'] as $key => $value) { if ($value['module']=='PodcastGoods') { unset($navs['PlugIn']['groups']['user_goodsconf']['nodes'][$key]); } } } if(!defined("PAI_VIRTUAL_BTN")||PAI_VIRTUAL_BTN==0){ foreach ($navs['PlugIn']['groups']['goods_order']['nodes'] as $key => $value) { if ($value['module']=='PaiTags') { unset($navs['PlugIn']['groups']['goods_order']['nodes'][$key]); } } } if (!defined("OPEN_EDU_MODULE")||OPEN_EDU_MODULE==0) { unset($navs['edu_courses']); } $m_config = load_auto_cache("m_config");//初始化手机端配置 if($m_config['name_limit']==0){ unset($navs['system']['groups']['mobile']['nodes'][2]); } if($m_config['has_dirty_words']==0){ unset($navs['system']['groups']['mobile']['nodes'][1]); } if(!defined("OPEN_VIP")||OPEN_VIP==0){ unset($navs['system']['groups']['sysconf']['nodes'][4]); } if(!defined("OPEN_DISTRIBUTION")||OPEN_DISTRIBUTION==0){ unset($navs['user']['groups']['distribution']); } if(!defined("CHECK_VIDEO")||CHECK_VIDEO==0){ unset($navs['dealcate']['groups']['video']['nodes'][5]); } //微信分销 if (!defined('WEIXIN_DISTRIBUTION') || WEIXIN_DISTRIBUTION==0) { unset($navs['user']['groups']['wx_distribution']); } //推广分销 if (!defined('GAME_DISTRIBUTION_TOP') || GAME_DISTRIBUTION_TOP==0) { unset($navs['user']['groups']['tg_distribution']); } //子房间 if(!defined('CHILD_ROOM') || CHILD_ROOM == 0){ unset($navs['dealcate']['groups']['childroom']); } //西藏青稞 if(!defined('QK_TREE') || QK_TREE == 0){ unset($navs['qk_tree']['groups']['qk_tree']); } return $navs; } /* * @return 删除过期的验证码 */ function delete_mobile_verify_code(){ $time=app_conf("USER_SEND_VERIFY_TIME")?app_conf("USER_SEND_VERIFY_TIME"):300; $n_time=get_gmtime()-$time; //删除超过时间的验证码 $GLOBALS['db']->query("DELETE FROM ".DB_PREFIX."mobile_verify_code WHERE create_time <=".$n_time); } function theme_parse_css($urls) { $url = md5(implode(',',$urls)); $css_url = 'public/runtime/statics/'.$url.'.css'; $url_path = APP_ROOT_PATH.$css_url; if(!file_exists($url_path)) { if(!file_exists(APP_ROOT_PATH.'public/runtime/statics/')) mkdir(APP_ROOT_PATH.'public/runtime/statics/',0777); $tmpl_path = get_domain().APP_ROOT."/theme"; $css_content = ''; foreach($urls as $url) { $css_content .= @file_get_contents($url); } $css_content = preg_replace("/[\r\n]/",'',$css_content); $css_content = str_replace("../../images",$tmpl_path."/images/",$css_content); $css_content = str_replace("../images/",$tmpl_path."/images/",$css_content); // @file_put_contents($url_path, unicode_encode($css_content)); @file_put_contents($url_path, $css_content); } return get_domain().APP_ROOT."/".$css_url."?v=1.0"; } //添加图片前缀 function add_domain_url($image){ if(strpos($image, 'http://')===false){ $image = str_replace('images/',file_domain().'/theme/images/',$image); $image = str_replace('./public/',file_domain().'/public/',$image); } return $image; } //删除图片前缀 function del_domain_url($image){ if(strchr($image,'http://')!==false){ $image = str_replace(file_domain().'/public/','/public/',$image); /*$index = strpos($image,'/public'); $image = '.'.substr($image,$index);*/ } return $image; } //检查会员等级 /*function chack_grade($user_id){ //$user_info= $GLOBALS['db']->getRow("select u.score,u.online_time,u.user_level from ".DB_PREFIX."user as u where u.id=".$user_id); //redis 读取 require_once(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php'); require_once(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php'); $user_redis = new UserRedisService(); $user_info = $user_redis->getRow_db($user_id,array('score','online_time','user_level')); $up_score = $user_info['score']+floor($user_info['online_time']/app_conf('ONLINETIME_TO_EXPERIENCE')); $level_info = $GLOBALS['db']->getRow("select ul.name as level_name,ul.level as level,ul.icon as icon from ".DB_PREFIX."user_level as ul where ul.score<=".$up_score." ORDER BY ul.id DESC limit 0,1"); if(intval($user_id)>0&&$user_info['user_level']<$level_info['level']){ $status =$GLOBALS['db']->query("update ".DB_PREFIX."user set user_level=".$level_info['level']." where id=".$user_id); //redis 更新 $user['user_level'] = $level_info['level']; $status = $user_redis->update_db($user_id,$user); } }*/ function agentArr(){ $agent = $_SERVER['HTTP_USER_AGENT']; $agent_array = array(); if($agent){ $agent_arr = explode(" ",$agent); foreach($agent_arr as $k=>$v){ $kkv = explode("/",$v); $agent_array[$kkv[0]] = strim($kkv[1]); } } return $agent_array; } /** * 散列算法 * @param unknown_type $value 计算散列的基础值 * @param unknown_type $count 散列的总基数 * @return number */ function hash_table($value,$count) { $pid = intval(round(hexdec(md5($value))/pow(10,32))%$count); return $pid; } function file_domain(){ if($GLOBALS['distribution_cfg']['CSS_JS_OSS']&&$GLOBALS['distribution_cfg']['OSS_TYPE']&&$GLOBALS['distribution_cfg']['OSS_TYPE']!="NONE") { $domain = $GLOBALS['distribution_cfg']['OSS_FILE_DOMAIN']; } else { $domain = get_domain().APP_ROOT; } return $domain; } //发登录超时短信 function send_tips_sms($mobile,$overtime) { return $GLOBALS['msg']->sms_tips($mobile,$overtime); } //获取一个新的用户号,同时记录分配给那个系统使用 function get_max_user_id($sysid=0){ $user_id = get_max_user_id_fun($sysid); if (OPEN_LUCK_NUM == 1){//如果开启了新版靓号功能 if(check_luck_num($user_id)){ //重新生成 $user_id = get_max_user_id($sysid); } }else {//没开启靓号,继续使用最初版幸运号逻辑 if (chack_lucky_num($user_id)) { $data=array(); $data['id'] = $user_id ; $data['nick_name']= "系统保留吉祥号"; $data['is_effect'] = 1; $data['sex']= 1; $data['create_time']= NOW_TIME; $data['user_pwd']= md5(rand(100000,999999)); $data['login_ip'] = CLIENT_IP; $data['login_time'] = to_date(NOW_TIME); $data['synchronize'] = 0; $data['emotional_state'] ='保密'; if($data['city']==''&&$data['province']==''){ $data['province'] = '火星'; } $data['job'] = '主播'; $data['user_level'] = 1; $GLOBALS['db']->autoExecute(DB_PREFIX."user",$data); $user_info = $data; // ===========add start =========== fanwe_require (APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php'); $user_redis = new UserRedisService(); $ridis_data = $user_redis->reg_data($data); $user_redis->insert_db($user_id,$ridis_data); $user_info = $data; // 登录成功 同步信息 accountimport($user_info); } } return $user_id; } //获取一个新的用户号,同时记录分配给那个系统使用 function get_max_user_id_fun($sysid=0){ $sql = "insert into ".DB_PREFIX."user_id (id,sysid) values(0,$sysid)"; $GLOBALS['db']->query($sql); $user_id = $GLOBALS['db']->insert_id(); return $user_id; } //判断 吉祥号 function chack_lucky_num($user_id=0){ $m_config = load_auto_cache("m_config"); $lucky_num = explode(",",$m_config['lucky_num']); return in_array($user_id, $lucky_num); } //判断id是否是靓号 function check_luck_num($user_id=0){ $sql = "SELECT * FROM ".DB_PREFIX."luck_num where luck_num = ".$user_id; $result = array(); $result = $GLOBALS['db']->getRow($sql,true,true); return $result; } function log_file($word,$file_name='log_file') { if(!IS_DEBUG){ return false; } $file = APP_ROOT_PATH."/public/".$file_name.".log"; if (is_array($word)) $word = var_export($word,true); $fp = fopen($file,"a"); flock($fp, LOCK_EX) ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n"); flock($fp, LOCK_UN); fclose($fp); } function get_abs_img_root($content) { return str_replace("./public/",file_domain()."/public/",$content); //return str_replace('/mapi/','/',$str); } /** *更新会员等 *$user_data 要包括会员id,会员等级,会员信用值 * */ function user_leverl_syn($user_data) { fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php'); fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php'); //$user_redis = new UserRedisService($user_data['id']); $user_redis = new UserRedisService(); $m_config = load_auto_cache("m_config"); //合并等级 判断,用户当前等级积分 $ote = floatval($m_config['onlinetime_to_experience']); if ($ote > 0){ $user_score = $user_data['score']+floor($user_data['online_time']*$ote); }else{ $user_score = $user_data['score']; } //$user_score = $user_data['score']+floor($user_data['online_time']/app_conf('ONLINETIME_TO_EXPERIENCE')); //$user_score = $user_data['score']; //用户获取当前等级 //旧的,获取等级 // $user_current_level = $GLOBALS['db']->getRow("select point from ".DB_PREFIX."user_level where `level` = ".intval($user_data['user_level']),true,true); //$user_current_level = load_auto_cache("user_level_lv",array('lv'=>intval($user_data['user_level']))); //新的,通过redis获取等级 $user_level_info = load_auto_cache("user_level"); $user_level = null; foreach($user_level_info as $v){ // 两层关系即可 unset($user_level['next_level']); $v['next_level'] = $user_level; $user_level = $v; if($v['point']<=intval($user_score)){ break; } } //旧的,获取最高等级积分信息 //$user_level = $GLOBALS['db']->getRow("select point,level from ".DB_PREFIX."user_level where point <=".intval($user_score)." order by point desc",true,true); if(intval($user_data['user_level'])<$user_level['level']) { //$user_data['user_level'] = intval($user_level['level']); $GLOBALS['db']->query("update ".DB_PREFIX."user set user_level = ".$user_level['level']." where id = ".$user_data['id']); $data = array(); $data['user_level'] = $user_level['level']; $user_redis->update_db($user_data['id'],$data); //$pm_content = "恭喜您,您已经成为".$user_level['name']."等级的会员!"; //send_notify($user_data['id'], $pm_content, "account#point"); } /* if($user_current_level['point']>$user_level['point']) { $user_data['user_level'] = intval($user_level['level']); $GLOBALS['db']->query("update ".DB_PREFIX."user set user_level = ".$user_data['user_level']." where id = ".$user_data['id']); $data = array(); $data['user_level'] = $user_data['user_level']; $user_redis->update_db($user_data['id'],$user_data); //$pm_content = "很报歉,您的会员等级已经降为".$user_level['name']."!"; //send_notify($user_data['id'], $pm_content, "account#point"); } */ $user_level['u_score'] = $user_score; return $user_level; } /** *更新会员等 *$user_data 要包括会员id,会员等级,会员信用值 * */ function family_level_syn($family_info) { $family_score = $family_info['score']; $family_level_info = load_auto_cache("family_level"); $family_level = null; foreach($family_level_info as $v) { // 两层关系即可 unset($family_level['next_level']); $v['next_level'] = $family_level; $family_level = $v; if ($v['point'] <= intval($family_score)) { break; } } if($family_level && intval($family_info['family_level']) < $family_level['level']) { $GLOBALS['db']->query("update ".DB_PREFIX."family set family_level = ".$family_level['level']." where id = ".$family_info['family_id']); // $data = array(); // $data['family_level'] = $family_level['level']; // $$family_redis->update_db($family_info['id'],$data); } return $family_level; } function fanwe_require($file){ static $_importFile = array(); $filename = realpath($file); if(!isset($_importFile[$filename])){ //做兼容性,只有强制定义了 FANWE_REQUIRE 常量后,才使用 后台用require,否则使用:require_once if(defined('FANWE_REQUIRE')){ $_importFile[$filename] = require $file; }else{ $_importFile[$filename] = require_once $file; } } return $_importFile[$filename]; } function FanweServiceCall($class='index',$act='index',$data=array()) { if(file_exists(APP_ROOT_PATH."service/config.php")){ $config = fanwe_require(APP_ROOT_PATH."service/config.php"); } if(!isset($config[$class])){ $config[$class] = "fanwe"; } @fanwe_require(APP_ROOT_PATH."service/".$config[$class]."/".$class.".service.php"); $objClass = $class."Service"; if(class_exists($objClass)){ $obj=new $objClass; if(method_exists($obj, $act)){ return $obj->$act($data); } else{ $error["status"] = 10006; $error["error"] = "接口方法不存在"; ajax_return($error); } } else{ $error["status"] = 10005; $error["error"] = "接口不存在"; ajax_return($error); } } /** * 获取毫秒 */ function get_microtime(){ list($usec, $sec) = explode(" ", microtime()); $microtime = ((int)($usec * 1000) + (float)$sec * 1000); return $microtime; } /* * 获取不在 $array_2数组中的值 */ function array_diff_info($array_2,$array_1 ) { $array_2 = array_flip($array_2); foreach ($array_1 as $key => $item) { if (isset($array_2[$item])) { unset($array_1[$key]); } } return $array_1; } /** * TimApi推送 * 'MsgType' => 'TIMCustomElem', */ function get_tim_api($data){ #构造高级接口所需参数 $msg_content = array(); //创建array 所需元素 $msg_content_elem = array( 'MsgType' => 'TIMCustomElem', //自定义类型 'MsgContent' => array( 'Data' => json_encode($data['ext']), 'Desc' => '', ) ); //将创建的元素$msg_content_elem, 加入array $msg_content array_push($msg_content, $msg_content_elem); fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php'); $api = createTimAPI(); return $api->group_send_group_msg2(trim($data['podcast_id']), $data['group_id'], $msg_content); } function timSystemNotify($group_id,$msg,$to = array()){ fanwe_require(APP_ROOT_PATH.'system/tim/TimApi.php'); $msg['timestamp'] = microtime(1); $msg['user_id'] = sizeof($to) == 1 ? intval($to[0]) : 0; $api = createTimAPI(); return $api->group_send_group_system_notification2($group_id,json_encode($msg),$to); } function isApp(){ $agent = strtolower($_SERVER['HTTP_USER_AGENT']); $is_app = strpos($agent, 'fanwe_app_sdk') ? true : false ; if($is_app){ return true; }else{ return false; } } /** * 将 diamonds,use_diamonds,score,ticket,user_level,refund_ticket 几个字段值,同步到redis * @param array $user_ids */ function user_deal_to_reids($user_ids) { fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php'); fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php'); $user_redis = new UserRedisService(); $m_config = load_auto_cache("m_config");//初始化手机端配置 /*$fields = 'id,nick_name,head_image,sex,diamonds,use_diamonds,score,ticket,user_level,refund_ticket,is_authentication,v_icon,v_explain,v_type,emotional_state,province,city,job,signature,birthday,video_count'; if(defined('OPEN_VIP')&&OPEN_VIP==1){ $fields.=',is_vip,vip_expire_time'; } if((defined('OPEN_GAME_MODULE')&&OPEN_GAME_MODULE==1)){ $fields.=',coin'; }*/ $fields = ' * '; foreach ($user_ids as $user_id) { $sql = "select ".$fields." from ".DB_PREFIX."user where id = ".$user_id; //echo $sql."
"; $user_data = $GLOBALS['db']->getRow($sql); //print_r($user_data); $user_redis->update_db($user_id, $user_data); } } //将机器人同步到IM function accountimport_robots($user_id){ fanwe_require(APP_ROOT_PATH."system/libs/user.php"); $user_data = $GLOBALS['db']->getRow("SELECT id,nick_name,head_image,synchronize FROM ".DB_PREFIX."user where id=".$user_id." and is_robot=1 "); accountimport($user_data); } function account_log_com($data,$user_id,$log_msg='',$param=array()) { fanwe_require(APP_ROOT_PATH."system/libs/user.php"); account_log($data,$user_id,$log_msg,$param); } function origin_image_info($img_path) { if (!isset($GLOBALS['distribution_cfg']['OSS_TYPE']) || $GLOBALS['distribution_cfg']['OSS_TYPE'] != "ALI_OSS") { return array('file_name' => $img_path); } $i = strrpos($img_path, '@'); if ($i === false) { return array('file_name' => $img_path); } $result = array('file_name' => substr($img_path, 0, $i)); foreach (explode('_', substr($img_path, $i + 1, strrpos($img_path, '.') - $i - 1)) as $str) { $key = substr($str, -1); if (strpos($str, '-') === false) { $result[$key] = substr($str, 0, -1); } else { $result[$key] = explode('-', substr($str, 0, -1)); } } return $result; } /* * 获取裁剪规格的图片地址(https://help.aliyun.com/document_detail/32228.html?spm=5176.doc32228.6.558.59iwnS) * @param string $img_path 图片地址,只支持阿里云oss图片地址 * @param int $x ===》x轴起始坐标 * @param int $y===》y轴起始坐标 * @param int $width ===》高 * @param int $height===》宽 * @param int $rotate ===》旋转角度 * @return String 返回格式化后的图片地址 * *图片旋转, https://help.aliyun.com/document_detail/32230.html?spm=5176.doc32228.6.560.R1A6Ki */ function get_cut_image($img_path,$x=0, $y=0, $width=0,$height=0,$rotate=0) { if (!isset($GLOBALS['distribution_cfg']['OSS_TYPE']) || $GLOBALS['distribution_cfg']['OSS_TYPE'] != "ALI_OSS") { return $img_path; } $pos = strpos($img_path, $GLOBALS['distribution_cfg']['OSS_DOMAIN']); $httppos = strpos($img_path, 'http'); $pathinfo = pathinfo($img_path); if ($pos === false && $httppos === false) { //未定位到 $file = $pathinfo['basename']; $dir = $pathinfo['dirname']; $dir = str_replace("./public/", "/public/", $dir); $file_name = $GLOBALS['distribution_cfg']['OSS_DOMAIN'] . $dir . "/" . $file; $pos = 0; } else { $file_name = $img_path; } if ($pos === 0) { if($rotate < 0){ $rotate = 360 + $rotate; } if ($GLOBALS['distribution_cfg']['NEW_OSS']) { $file_name .= "?x-oss-process=image/crop,x_{$x},y_{$y},w_{$width},h_{$height}/rotate,{$rotate}"; } else { $format = "@{$x}-{$y}-{$width}-{$height}a_{$rotate}r."; if (isset($pathinfo['extension'])) { $extension = strtolower($pathinfo['extension']); } else { $extension = "jpg"; } $file_name .= $format . $extension; } } return $file_name; } /* * 获取相应规格的图片地址(https://help.aliyun.com/document_detail/32206.html?spm=5176.doc32206.6.488.Y4uU6M) * @param string $img_path 图片地址,只支持阿里云oss图片地址 * @param int $width ===》高 * @param int $height===》宽 * @param int $gen gen=0:保持比例缩放,不剪裁,如高为0,则保证宽度按比例缩放 gen=1:保证长宽,剪裁 * * @param int $radius ===》模糊效果,取值在 [1,50], radius越大,越模糊 * @param int $sigma===》模糊效果 ,取值 [1,50],越大,越模糊 * @return String 返回格式化后的图片地址 * *模糊效果, https://help.aliyun.com/document_detail/32234.html?spm=5176.doc32233.6.516.zuzpF7 */ function get_spec_image($img_path,$width=0,$height=0,$gen=0, $radius=0,$sigma=0) { if($img_path==''){ return ; } //关于ALIOSS的生成 if ($GLOBALS['distribution_cfg']['OSS_TYPE'] && $GLOBALS['distribution_cfg']['OSS_TYPE'] == "ALI_OSS") { $pos = strpos($img_path, $GLOBALS['distribution_cfg']['OSS_DOMAIN']); $httppos = strpos($img_path, 'http'); if ($pos === false && $httppos === false) { //未定位到 $pathinfo = pathinfo($img_path); $file = $pathinfo['basename']; $dir = $pathinfo['dirname']; $dir = str_replace("./public/", "/public/", $dir); $allow_extension = array('mp4','flv','m3u8'); $extension = pathinfo($file, PATHINFO_EXTENSION); $is_allow = in_array($extension,$allow_extension); if($width!=0||$height!=0||$gen!=0||$radius!=0||$sigma!=0||$GLOBALS['distribution_cfg']['OSS_DOMAIN_HTTPS']==''||$is_allow){ $file_name = $GLOBALS['distribution_cfg']['OSS_DOMAIN'] . $dir . "/" . $file; }else{ $file_name = $GLOBALS['distribution_cfg']['OSS_DOMAIN_HTTPS'] . $dir . "/" . $file; return $file_name; } $pos = 0; } else { $file_name = $img_path; } if ($GLOBALS['distribution_cfg']['NEW_OSS']) { if ($pos === 0) { $format = ""; if ($width == 0 && $height > 0) { $format = "/resize,h_".$height; //高固定,宽按图片大小等比缩放 } else if ($height == 0 && $width > 0) { $format = "/resize,w_".$width;//宽固定,高按图片大小等比缩放 } else if ($width > 0 && $height > 0) { if ($gen == 0) $format = "/resize,m_mfit,h_" . $height . ",w_". $width;//宽,高固定,以短边缩放 1e 不剪裁 else $format = "/resize,m_fill,m_mfit,h_" . $height . ",w_". $width;//宽,高固定,以短边缩放 1e 剪裁 } if ($radius > 0 && $sigma > 0) { if ($format == '') $format = "/blur,r_" . $radius . ",s_" . $sigma; else $format = $format."/blur,r_" . $radius . ",s_" . $sigma; } if ($format != '') { $i = strrpos($file_name, '?x-oss-process=image'); if ($i === false) { $file_name = $file_name . '?x-oss-process=image' . $format; } else { $file_name .= $format; } } } }else{ if ($pos === 0) { $format = ""; if ($width == 0 && $height > 0) { $format = $height . "h_1l_1x"; //高固定,宽按图片大小等比缩放 } else if ($height == 0 && $width > 0) { $format = $width . "w_1l_1x";//宽固定,高按图片大小等比缩放 } else if ($width > 0 && $height > 0) { if ($gen == 0) $format = $width . "w_" . $height . "h_0c_1e_1x"; //宽,高固定,以短边缩放 1e 不剪裁 else $format = $width . "w_" . $height . "h_1c_1e_1x"; //宽,高固定,以短边缩放 1e 剪裁 } if ($radius > 0 && $sigma > 0) { if ($format == '') $format = $radius . "-" . $sigma . "bl"; else $format = "_" . $radius . "-" . $sigma . "bl"; } if ($format != '') { $i = strrpos($file_name, '@'); if ($i === false) { $file_name = $file_name . '@' . $format . ".jpg"; } else { $i = strrpos($file_name, '.'); $file_name = substr($file_name, 0, $i) . '_' . $format . substr($file_name, $i); } } } } return $file_name; } else { $domain = get_domain(); if($GLOBALS['distribution_cfg']['LOCAL_IMAGE_URL'] != "") { $domain = $GLOBALS['distribution_cfg']['LOCAL_IMAGE_URL']; } $img_path = str_replace("./public/",$domain.APP_ROOT."/public/",$img_path); return $img_path; } } //登录提示 function login_prompt($user_id){ $root = array('first_login'=>0,'new_level'=>0); $m_config = load_auto_cache("m_config");//初始化手机端配置 $login_send_score = intval($m_config['login_send_score']);//每日首次登录赠送积分数 $upgrade_level = intval($m_config['upgrade_level']);//首次登录升级提示等级 fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php'); fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/UserRedisService.php'); $user_redis = new UserRedisService($user_id); //每日首次登录赠送积分 if(defined("OPEN_LOGIN_SEND_SCORE")&&OPEN_LOGIN_SEND_SCORE == 1){ if($login_send_score>0){ $now_time = NOW_TIME; /*$now_time = to_date($now_time,"Y-m-d 00:00:00"); $timezone = intval(app_conf('TIME_ZONE')) * 3600; $user_log_id = $GLOBALS['db']->getOne("select id from " . DB_PREFIX . "user_log where user_id = ".intval($user_id)." and type = 5 and FROM_UNIXTIME(log_time+".$timezone.",'%Y-%m-%d')='".to_date(NOW_TIME,'Y-m-d')."'"); */ $s_now_time = to_timespan(to_date($now_time,"Y-m-d 00:00:00")); $e_now_time = to_timespan(to_date($now_time,"Y-m-d 23:59:59")); $user_log_id = $GLOBALS['db']->getOne("select id from " . DB_PREFIX . "user_log where " . "user_id = ".intval($user_id)." and type = 5 and log_time>".$s_now_time." and log_time<".$e_now_time); if(intval($user_log_id)==0){ $user = $user_redis->getRow_db($user_id,array("login_time")); if($user['login_time']<$now_time){ $GLOBALS['db']->query("update ".DB_PREFIX."user set score = score+".$login_send_score." where id =".$user_id); user_deal_to_reids(array($user_id)); $user = $user_redis->getRow_db($user_id,array('id','score','online_time','user_level')); user_leverl_syn($user); $root['first_login'] = 1; //写入用户日志 $data = array(); $data['score'] = $login_send_score; $data['log_admin_id'] = 0; $param['type'] = 5;//类型 0表示充值 1表示提现 2赠送道具 3 兑换印票 4 分享获得印票 5 登录赠送积分 $log_msg ='每日首次登录获得'.$login_send_score.'积分'; account_log_com($data,$user_id,$log_msg,$param); } } } } //每次登录等级提示 if(defined("OPEN_UPGRADE_PROMPT")&&OPEN_UPGRADE_PROMPT == 1){ if($upgrade_level){ $user = $user_redis->getRow_db($user_id,array("user_level","last_login_level")); if($user['user_level']>=$upgrade_level && $user["last_login_level"]<$user['user_level']){//等级大于等于升级提示并且上一次登录时的等级小于现在的等级 $root['new_level'] = $user['user_level']; //修改上一次登录时的等级 $GLOBALS['db']->query("update ".DB_PREFIX."user set last_login_level = ".$user['user_level']." where id =".$user_id); $user_redis->update_db($user_id,array("last_login_level"=>$user['user_level'])); } } } return $root; } //管理员结束直播 function admin_do_end_video($video,$video_vid,$is_aborted = 0,$cate_id = 0){ fanwe_require(APP_ROOT_PATH.'mapi/lib/core/common.php'); fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/BaseRedisService.php'); //请求同步redis数据到mysql,防止结束时候mysql数据未同步导致的当前处理的数据错误; $sql = "SELECT id FROM " . DB_PREFIX . "video"; $list = $GLOBALS['db']->getAll($sql, true, true); if (count($list) > 0) { fanwe_require(APP_ROOT_PATH.'mapi/lib/redis/VideoRedisService.php'); $video_redis_syn = new VideoRedisService(); foreach ($list as $k => $v) { $video_id_syn = $v['id']; //计算权重 $video_redis_syn ->syn_sort_num($video_id_syn); $fields = array('share_count','like_count','fans_count', 'sort_num', 'vote_number', 'robot_num','watch_number', 'virtual_watch_number', 'max_watch_number'); $video_syn = $video_redis_syn->getRow_db($video_id_syn, $fields); $GLOBALS['db']->autoExecute(DB_PREFIX . "video", $video_syn, "UPDATE", "id=" . $video_id_syn); } } $result = do_end_video($video,$video_vid,$is_aborted,$cate_id); return $result; } //获取后台地址 function get_manage_url_name(){ $url_name = "m.php"; $urlname = app_conf("URL_NAME"); if($urlname!=$url_name&&$urlname!=''){ $url_name = $urlname; } return $url_name; } function strFilter($str){ $str = str_replace('`', '', $str); $str = str_replace('·', '', $str); $str = str_replace('~', '', $str); $str = str_replace('!', '', $str); $str = str_replace('!', '', $str); $str = str_replace('@', '', $str); $str = str_replace('#', '', $str); $str = str_replace('$', '', $str); $str = str_replace('¥', '', $str); $str = str_replace('%', '', $str); $str = str_replace('^', '', $str); $str = str_replace('……', '', $str); $str = str_replace('&', '', $str); $str = str_replace('*', '', $str); $str = str_replace('(', '', $str); $str = str_replace(')', '', $str); $str = str_replace('(', '', $str); $str = str_replace(')', '', $str); $str = str_replace('-', '', $str); $str = str_replace('_', '', $str); $str = str_replace('——', '', $str); $str = str_replace('+', '', $str); $str = str_replace('=', '', $str); $str = str_replace('|', '', $str); $str = str_replace('\\', '', $str); $str = str_replace('[', '', $str); $str = str_replace(']', '', $str); $str = str_replace('【', '', $str); $str = str_replace('】', '', $str); $str = str_replace('{', '', $str); $str = str_replace('}', '', $str); $str = str_replace(';', '', $str); $str = str_replace(';', '', $str); $str = str_replace(':', '', $str); $str = str_replace(':', '', $str); $str = str_replace('\'', '', $str); $str = str_replace('"', '', $str); $str = str_replace('“', '', $str); $str = str_replace('”', '', $str); $str = str_replace(',', '', $str); $str = str_replace(',', '', $str); $str = str_replace('<', '', $str); $str = str_replace('>', '', $str); $str = str_replace('《', '', $str); $str = str_replace('》', '', $str); $str = str_replace('.', '', $str); $str = str_replace('。', '', $str); $str = str_replace('/', '', $str); $str = str_replace('、', '', $str); $str = str_replace('?', '', $str); $str = str_replace('?', '', $str); return trim($str); } //系统错误日志 function log_err_file($word,$file_name='error_file') { //log_err_file(array(__FILE__,__LINE__,__METHOD__,$data)); if (!is_dir(APP_ROOT_PATH."public/sys_error/")) { @mkdir(APP_ROOT_PATH."public/sys_error/"); @chmod(APP_ROOT_PATH."public/sys_error/", 0777); } $file = APP_ROOT_PATH."/public/sys_error/".$file_name."_".date('Ymd').".log"; if (is_array($word)) $word = var_export($word,true); $fp = fopen($file,"a"); flock($fp, LOCK_EX) ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n"); flock($fp, LOCK_UN); fclose($fp); //删除大于一个月的日志文件 $file_time = getlastMonthDays();//获取上个月时间 $file_name_old = $file_name."_".$file_time; $file_old = APP_ROOT_PATH."public/sys_error/".$file_name_old.".log"; if (file_exists($file_old)) { @unlink ($file_old); } } //获取直播信息 function c_get_vodset_by_video_id($video_id){ fanwe_require(APP_ROOT_PATH.'mapi/lib/core/common.php'); $result = get_vodset_by_video_id($video_id); return $result; } /* * $url 文件地址 * $qrcode_name 生成的源文件 * $qrcode_dir_logo 带logo的源文件 */ function get_qrcode_png($url,$qrcode_name,$qrcode_dir_logo){ require_once APP_ROOT_PATH.'system/utils/phpqrcode.php'; $value = $url; //二维码内容 $errorCorrectionLevel = 'L';//容错级别 $matrixPointSize = 6;//生成图片大小 //生成二维码图片 QRcode::png($value, $qrcode_name, $errorCorrectionLevel, $matrixPointSize, 2); $m_config = load_auto_cache("m_config");//初始化手机端配置 $logo = $m_config['app_logo'];//准备好的logo图片 $QR = $qrcode_name;//已经生成的原始二维码图 if ($logo !== FALSE) { $QR = imagecreatefromstring(file_get_contents($QR)); $logo = imagecreatefromstring(file_get_contents($logo)); $QR_width = imagesx($QR);//二维码图片宽度 $QR_height = imagesy($QR);//二维码图片高度 $logo_width = imagesx($logo);//logo图片宽度 $logo_height = imagesy($logo);//logo图片高度 $logo_qr_width = $QR_width / 5; $scale = $logo_width/$logo_qr_width; $logo_qr_height = $logo_height/$scale; $from_width = ($QR_width - $logo_qr_width) / 2; //重新组合图片并调整大小 imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); } //输出图片 imagepng($QR, $qrcode_dir_logo); } /* * 数据传输加密 * @param array $date 输出的数组 * @param int $r_type 0=>base64;1=>json_encode;2=>array; 4=>aec */ function ajax_return_aes($data,$r_type=1,$is_debug=0){ header("Content-Type:text/html; charset=utf-8"); filter_null($data);//过滤null //过滤false $data = filter_all_false($data); $encrypt = $GLOBALS['encrypt']; //if(strstr($encrypt['sdk_version_name'],'2.4')||floatval($encrypt['sdk_version_name'])>=2.5||floatval($encrypt['sdk_version_name'])==0){ $aes_key_list = get_privatekey(); if(is_array($aes_key_list[0]['aes_key'])){ $privatekey = $aes_key_list[0]['aes_key'][0]; }else{ $privatekey = $aes_key_list[0]['aes_key']; } $is_aes_extra = get_aes_extra(); if($encrypt['now_aes_key']!=''&&$is_aes_extra){ $privatekey = $encrypt['now_aes_key']; } /*}else{ $m_config = load_auto_cache("m_config");//初始化手机端配置 $privatekey = $m_config['tim_sdkappid'];//对称加密KEY if(trim($privatekey)==''){ $ret = array('error'=>'tim_sdkappid为空'); log_err_file(array(__FILE__,__LINE__,__METHOD__,$ret)); } //判断KEY是否16位,如果不是自动填充0,进行16位截取 //$privatekey = str_pad($privatekey,16,"0",STR_PAD_RIGHT); if(strlen(trim($privatekey))<16){ $privatekey = trim($privatekey).'0000000000000000'; } }*/ $privatekey = substr($privatekey,0,16); $r_type = intval($r_type);//返回数据格式类型; ob_start(); ob_end_clean(); if ($r_type == 0) { echo base64_encode(json_encode($data)); }else if ($r_type == 1) { echo json_encode($data); }else if ($r_type == 2) { print_r($data); }else if($r_type == 4){ require_once APP_ROOT_PATH.'system/libs/crypt_aes.php'; $aes = new CryptAES(); $aes->set_key($privatekey); $aes->require_pkcs5(); $encText = array(); $encText['output'] = $aes->encrypt(json_encode($data)); if(intval(DE_BUGE)){ $encText['output_debug']['sdk_version_name'] = $encrypt['sdk_version_name']; $encText['output_debug']['privatekey'] = $privatekey; $encText['output_debug']['data'] = $data; $encText['output_debug']['request'] = $_REQUEST; } echo json_encode($encText); }; exit; } /* * 接收的数据解密 * @param array $_REQUEST['requestData'] 接收的数据集 */ function aes_request_decode(){ $encrypt = $GLOBALS['encrypt']; if($encrypt['i_type']){ $request = get_aes_decstring(); $_REQUEST = array_merge($_REQUEST,$request); } } //获得时间时长 function time_len($time){ $total_time_format = ''; if($time/3600>=1){ $total_time_format.=intval($time/3600).'小时'; $time = $time%3600; } if($time/60>=1){ $total_time_format.=intval($time/60).'分钟'; $time = $time%60; } if($time){ $total_time_format.=intval($time).'秒'; } return $total_time_format; } //登录日志 function log_login($date) { $login_log = array(); $now_time = get_gmtime(); $login_log['create_time'] = $now_time; $login_log['ip'] = get_client_ip(); $login_log['login_date'] = to_date($now_time); $login_log['login_time'] = $now_time; $login_log['user_id'] = $date['user_id']; $login_log['login_type'] = $date['login_type']; $login_log['request'] = $date['request']; $login_log['ctl_act'] =$GLOBALS['encrypt']['ctl'].'#'.$GLOBALS['encrypt']['act']; $GLOBALS['db']->autoExecute(DB_PREFIX."login_log", $login_log,'INSERT'); } //处理解密 function get_aes_decstring(){ require_once APP_ROOT_PATH.'system/libs/crypt_aes.php'; //获取aes_key $is_aes_extra = get_aes_extra(); $aes_key_list = get_privatekey(); //获取aes_key if($aes_key_list) { if(count($aes_key_list)>1){ foreach($aes_key_list as $k=>$v){ $privatekey = $v['aes_key']; if(count($privatekey)>1){ foreach($privatekey as $v){ $request = get_aes_request($v); if($request!=''){ $privatekey = $v; break; } } }else{ $request = get_aes_request($privatekey[0]); } if($request&&$is_aes_extra){ $privatekey = $privatekey[0]; $GLOBALS['encrypt']['now_aes_key'] = $privatekey; break; }else{ $GLOBALS['encrypt']['now_aes_key'] = ''; } } }else{ $privatekey = $aes_key_list[0]['aes_key']; if(count($privatekey)>1){ foreach($privatekey as $v){ $request = get_aes_request($v); if($request!=''){ $privatekey = $v; break; } } }else{ if($privatekey) { $privatekey = $privatekey[0]; $request = get_aes_request($privatekey); } } if($request&&$is_aes_extra){ $GLOBALS['encrypt']['now_aes_key'] = $privatekey; }else{ $GLOBALS['encrypt']['now_aes_key'] = ''; } } }else{ $m_config = load_auto_cache("m_config");//初始化手机端配置 $privatekey = $m_config['tim_sdkappid'];//对称加密KEY $request = get_aes_request($privatekey); if($request!=''&&$is_aes_extra){ $GLOBALS['encrypt']['now_aes_key'] = $privatekey; }else{ $GLOBALS['encrypt']['now_aes_key'] = ''; } } return $request; } //获取动态秘钥 function get_privatekey(){ $is_aes_extra = get_aes_extra(); if(intval($is_aes_extra)){ $sql = "SELECT * from ".DB_PREFIX."key_list where is_effect=1 and is_delete=0 order by id desc "; }else{ $sql = "SELECT * from ".DB_PREFIX."key_list where is_effect=1 and is_delete=0 order by id desc limit 1 "; } $aes_key_list = $GLOBALS['db']->getAll($sql); if($aes_key_list){ foreach($aes_key_list as $k=>$v){ $aes_key_arr = explode("
",nl2br($v['aes_key'])); if($aes_key_arr){ foreach($aes_key_arr as &$item){ $item = trim($item); } $aes_key_list[$k]['aes_key']=$aes_key_arr; } } }else{ $aes_key_list = array(); } if($GLOBALS['encrypt']['now_aes_key']){ $aes_key_list[0]['aes_key'] = $GLOBALS['encrypt']['now_aes_key']; } return $aes_key_list; } //解密 function get_aes_request($privatekey){ //判断KEY是否16位,如果不是自动填充0,进行16位截取 $privatekey = trim($privatekey); if(trim($privatekey)==''){ $ret = array('error'=>'tim_sdkappid为空'); log_err_file(array(__FILE__,__LINE__,__METHOD__,$ret)); } if(strlen(trim($privatekey))<16){ $privatekey = trim($privatekey).'0000000000000000'; } $privatekey = substr($privatekey,0,16); $aes = new CryptAES(); $aes->set_key($privatekey); $aes->require_pkcs5(); $decString = $aes->decrypt(trim($_REQUEST['requestData'])); $request = json_decode($decString, 1); return $request; } //判断是否要循环解密 function get_aes_extra(){ $encrypt = $GLOBALS['encrypt']; $is_aes_extra = 0; $ctl_act = $encrypt['ctl']."#".$encrypt['act']; if(count($GLOBALS['distribution_cfg']['AES_EXTRA_FUN'])>0&&in_array($ctl_act,$GLOBALS['distribution_cfg']['AES_EXTRA_FUN'])){ $is_aes_extra = 1;//需要循环解密 } return $is_aes_extra; } //对emoji表情转义 function emoji_encode($str){ $strEncode = ''; $length = mb_strlen($str,'utf-8'); for ($i=0; $i < $length; $i++) { $_tmpStr = mb_substr($str,$i,1,'utf-8'); if(strlen($_tmpStr) >= 4){ $strEncode .= '[[EMOJI:'.rawurlencode($_tmpStr).']]'; }else{ $strEncode .= $_tmpStr; } } return $strEncode; } //对emoji表情转反义 function emoji_decode($str){ $strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function($matches){ return rawurldecode($matches[1]); }, $str); return $strDecode; } //日志输出 function log_ljz($word) { if (is_array($word)) $word = var_export($word,true); $file = APP_ROOT_PATH."/public/log_ljz.log"; $fp = fopen($file,"a"); flock($fp, LOCK_EX) ; $res = debug_backtrace();//回溯跟踪 fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n 文件所在位置:".$res[0]['file'].",位于第".$res[0]['line']."行\n".$word."\n\n"); flock($fp, LOCK_UN); fclose($fp); } //获取上个月时间 function getlastMonthDays($date=0){ if(!$date){ $date = date('Ymd',time()); }else{ $date = date('Ymd',$date); } $lastday=date('Ymd',strtotime("$date -1 month ")); return $lastday; } //删除文件 function clear_file($path){ $result = false; if(is_file($path)){ $result = @unlink($path); if(!$result){ log_err_file(array(__FILE__,__LINE__,__METHOD__,'删除文件 '.$path.' 失败'),'clear_file_error'); } } return $result; } ?>