海南七星彩网站源码结算功能开发
发布于: 2020 年 07 月 14 日
这个是海南七星彩网站源码结算功能开发,我把代码直接上去吧。
有疑问的可以找我,我q:3053723033
此功能只做为学习和研究使用,不得用于其他用途,谢谢。
<?phpfunction usertablejl($id){ $isTable = M()->query('SHOW TABLES LIKE "jz_userbet'.$id.'"'); if(!$isTable){ $sql="CREATE TABLE IF NOT EXISTS `jz_userbet".$id."` ( `id` int(11) NOT NULL AUTO_INCREMENT, `BetNumber` char(10) NOT NULL, `BetInfoID` int(11) NOT NULL, `playedId` int(11) NOT NULL, `Odds` float(18,4) NOT NULL, `zt` int(11) NOT NULL DEFAULT '0', `sftm` int(11) NOT NULL DEFAULT '0', `leftzt` int(11) NOT NULL DEFAULT '0', `WinLoss` float(18,4) NOT NULL DEFAULT '0.0000', `BetAmount` float(18,4) NOT NULL, `BackComm` float(18,4) NOT NULL, `ProfitAndLoss` float(18,4) NOT NULL, `PeriodsNumber` text NOT NULL, `BetDt` datetime NOT NULL, `fsxx` text, `lhxx` text, PRIMARY KEY (`id`), KEY `BetNumber` (`BetNumber`), KEY `BetInfoID` (`BetInfoID`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;"; M()->execute($sql,true); }}function add($id,$bet){ M("userbet".$id)->addAll($bet);}function bet3add($bet5){ $sql = "UPDATE jz_bet3 SET BetAmount = CASE id "; $sql1= "Odds = CASE id "; foreach ($bet5 as $key => $value) { if($value['id']){ $idss[]=$value['id']; $sql.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['BetAmount']); $sql1.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['Odds']); $t=1; }else{ $bet3add[]=$value; } } $ids = implode(',',$idss); $sql .= "END,".$sql1."END WHERE id IN ($ids)"; if(isset($bet3add)){ M('bet3')->addAll($bet3add); } if($t==1){ M()->execute($sql); }}function bet4add($bet6){ $sql = "UPDATE jz_bet4 SET BetAmount = CASE id "; $sql1= "lhmoney = CASE id "; foreach ($bet6 as $key => $value) { if($value['id']){ $idss[]=$value['id']; $sql.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['BetAmount']); $sql1.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['lhmoney']); //$sql1.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['Odds']); $t=1; }else{ $bet4add[]=$value; } } $ids = implode(',',$idss); $sql .= "END,".$sql1."END WHERE id IN ($ids)"; if(isset($bet4add)){ M('bet4')->addAll($bet4add); } if($t==1){ M()->execute($sql); }}function bet5add($bet7){ $sql = "UPDATE jz_bet5 SET money = CASE id "; //$sql1= "money = CASE id "; foreach ($bet7 as $key => $value) { if($value['id']){ $idss[]=$value['id']; $sql.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['money']); //$sql1.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['money']); //$sql1.=sprintf("WHEN %d THEN %2\$.2f ",$value['id'],$value['Odds']); $t=1; }else{ $bet5add[]=$value; } } $ids = implode(',',$idss); $sql .="END WHERE id IN ($ids)"; if(isset($bet5add)){ M('bet5')->addAll($bet5add); } if($t==1){ M()->execute($sql); }}function parentxx($id){ $parent=M('agent')->find($id); if($parent){ return $parent['user_login'].'('.levelxx($parent['agentlevel']).')'; } else{ return '无'; }}function levelxx($id){ $level=M('agent_level')->where(array('level'=>$id))->find(); return $level['title'];}function getqihao($id,$time=0){ $type=M('type')->where(array('id'=>'1'))->find(); $data['PeriodsStatus']=(int)$type['enable']; $timelist=explode(',', $type[data]); $num=1; $day=0; foreach ($timelist as $key => $value) { if(time()>strtotime(date('Y-m-d '.$value,time()))-$time){ $num=$key+2; } } if($num>count($timelist)){ $day=1; $num=1; } $hm=$num; if($num<100){ $hm='0'.$hm; } if($num<10){ $hm='0'.$hm; } $result['now']=$timelist[$num-1]; $result['hm']=$hm+$time; $result['day']=$day; return $result;}function gettime($time,$endtime){ //计算出本月所有的期数 for($i=$time;$i<$endtime;$i){ $da = date("w",$i); if($da==0||$da==2||$da==5){ $qishu=getnows($i)['hm']+1; $res['time'][$qishu]=date('Y-m-d',$i); $res['qishu'][]=$qishu; } $i=$i+86400; } return $res;}function getnows($time){ $type=M('type')->where(array('id'=>'1'))->find(); $data['PeriodsStatus']=(int)$type['enable']; $timelist=explode(',',$type[data]); $days=$timelist[2]; $chunjie=$timelist[3]; $week = date('W',$time)*3-3; $da = date("w",$time); if((time()-$days*24*3600)<=$chunjie){ $num=$week; }else{ $num=$week-3; } if($da==0||$da>5){ $num=$num+2; }elseif($da<=2){ $num=$num; }elseif($da<=5){ $num=$num+1; } if(($da==0||$da==2||$da==5)&&time()>=strtotime(date('Y-m-d 20:30:00'))){ $num=$num; } $hm=$num; if($num<100){ $hm='0'.$hm; } if($num<10){ $hm='0'.$hm; } $result['hm']=date('y').$hm; return $result;}function getnow($id,$dd=0){ $type=M('type')->where(array('id'=>'1'))->find(); $data['PeriodsStatus']=(int)$type['enable']; $timelist=explode(',',$type['data']); $days=$timelist[2]; $chunjie=$timelist[3]; $time=time();//strtotime(date('2018-05-31')) $week = date('W',$time)*3-3; $da = date("w",$time); if((time()-$days*24*3600)<=strtotime($chunjie)){ $num=$week; //exit(var_dump(strtotime($chunjie))); }else{ $num=$week-3; //exit(var_dump(strtotime($chunjie))); } if($da==0||$da>5){ $num=$num+2; }elseif($da<=2){ $num=$num; }elseif($da<=5){ $num=$num+1; } if(($da==0||$da==2||$da==5)&&time()>=strtotime(date('Y-m-d 20:30:00'))){ $num=$num+1; } $week1=date('Y-m-d',strtotime("-".($da?$da -1 : 6).' days')); $week0=strtotime(date('Y-m-d 20:30:00',strtotime("$week1 +6 days"))); $weeks0=strtotime(date('Y-m-d 20:30:00',strtotime("$week1 -1 days")));//上周日 $week2=strtotime(date('Y-m-d 20:30:00',strtotime("$week1 +1 days"))); $weeks2=strtotime(date('Y-m-d 20:30:00',strtotime("$week1 +8 days")));//下周二 $week5=strtotime(date('Y-m-d 20:30:00',strtotime("$week1 +4 days"))); if(time()>=strtotime(date('Y-m-d 20:30:00'))){ if($da>=5){ $result['OpenDt']=$week5+$timelist[1]; $result['DrawDt']=$week5-$timelist[0]; $result['CloseDt']=$week0-$timelist[0]; }elseif($da>=2){ $result['OpenDt']=$week2+$timelist[1]; $result['DrawDt']=$week2-$timelist[0]; $result['CloseDt']=$week5-$timelist[0]; }elseif($da==0){ $result['OpenDt']=$week0+$timelist[1]; $result['DrawDt']=$week0-$timelist[0]; $result['CloseDt']=$weeks2-$timelist[0]; }elseif($da==1){ $result['OpenDt']=$weeks0+$timelist[1]; $result['DrawDt']=$weeks0-$timelist[0]; $result['CloseDt']=$week2-$timelist[0]; } }else{ if($da==5){ $result['OpenDt']=$week2+$timelist[1]; $result['DrawDt']=$week2-$timelist[0]; $result['CloseDt']=$week5-$timelist[0]; }elseif($da==2){ $result['OpenDt']=$weeks0+$timelist[1]; $result['DrawDt']=$weeks0-$timelist[0]; $result['CloseDt']=$week2-$timelist[0]; }elseif($da==0){ $result['OpenDt']=$week5+$timelist[1]; $result['DrawDt']=$week5-$timelist[0]; $result['CloseDt']=$week0-$timelist[0]; }elseif($da>5){ $result['OpenDt']=$week5+$timelist[1]; $result['DrawDt']=$week5-$timelist[0]; $result['CloseDt']=$week0-$timelist[0]; }elseif($da>2){ $result['OpenDt']=$week2+$timelist[1]; $result['DrawDt']=$week2-$timelist[0]; $result['CloseDt']=$week5-$timelist[0]; }else{ $result['OpenDt']=$weeks0+$timelist[1]; $result['DrawDt']=$weeks0-$timelist[0]; $result['CloseDt']=$week2-$timelist[0]; } } $result['OpenDt']=date('Y-m-d H:i:s',$result['OpenDt']); $result['DrawDt']=date('Y-m-d H:i:s',$result['DrawDt']); $result['CloseDt']=date('Y-m-d 20:20:00',time()); $hm=$num+$dd;$hm='41';$date='2020-03-31 00:00:00';$nowdate=date('Y-m-d 00:00:00');$add= (strtotime($nowdate) - strtotime($date) )/(3600*24);$hm=$hm+$add;if(date('His')>203010){ //$hm=$hm+1;} if($hm<100){ $hm='0'.$hm; } if($hm<10){ $hm='0'.$hm; } $result['now']=time(); $result['hm']=date('y').$hm; $result['day']=0; return $result; }function storexx($id,$BetNumber,$PeriodsNumber){ $map2['uid']=$id; $map2['BetNumber']=$BetNumber; $map2['PeriodsNumber']=$PeriodsNumber; $store=M('bets')->where($map2)->sum('BetAmount'); return $store+0;}function storexx2($id,$playid,$PeriodsNumber){ $map2['uid']=$id; $map2['playedId']=$playid; $map2['PeriodsNumber']=$PeriodsNumber; $store=M('bets')->where($map2)->sum('BetAmount'); return $store+0;}function getodds2($played,$number=0){ $list=explode('/',$played); if(count($list)==1){ $bonusprop=$list[0]; } else{ $number=$number; $nlist=str_split($number); $c=array_count_values($nlist); $cfnum=count($nlist)-count($c); $bonusprop=$list[$cfnum]; $cbonusprop=$clist[$cfnum]; } return (float)($bonusprop);}function getodds1($played,$number=0){ $list=explode('/',$played['bonusprop']); if(count($list)==1){ $bonusprop=$list[0]; $cbonusprop=$clist[0]; } else{ $number=$number; $nlist=str_split($number); $c=array_count_values($nlist); $cfnum=count($nlist)-count($c); $bonusprop=$list[$cfnum]; $cbonusprop=$clist[$cfnum]; } return (float)($bonusprop);}function getodds($played,$user,$number=0){ $commission=json_decode($user['commission'],true); $sjcommission=json_decode($user['sjcommission'],true); $list=explode('/',$played['bonusprop']); $clist=explode('/',$played['cbonusprop']); if(count($list)==1){ $bonusprop=$list[0]; $cbonusprop=$clist[0]; } else{ $number=$number; $nlist=str_split($number); $c=array_count_values($nlist); $cfnum=count($nlist)-count($c); $bonusprop=$list[$cfnum]; $cbonusprop=$clist[$cfnum]; } return (float)($bonusprop-$cbonusprop*$sjcommission[$played['bettypeid']]['Commission']);}function getoddsup($played,$user,$number=0){ $commission=json_decode($user['commission'],true); $sjcommission=json_decode($user['sjcommission'],true); $list=explode('/',$played['bonusprop']); $clist=explode('/',$played['cbonusprop']); if(count($list)==1){ $bonusprop=$list[0]; $cbonusprop=$clist[0]; } else{ $number=$number; $nlist=str_split($number); $c=array_count_values($nlist); $cfnum=count($nlist)-count($c); $bonusprop=$list[$cfnum]; $cbonusprop=$clist[$cfnum]; } return (float)($cbonusprop*$sjcommission[$played['bettypeid']]['Commission']);}function bettype($number){ $numlist=str_split($number); $result=array(); if($numlist[0]=='a'){ if(count($numlist)==5){ $result['betTypeId']=16; $result['number']=$numlist[1].$numlist[2].$numlist[3].$numlist[4]; } if(count($numlist)==4){ $result['betTypeId']=15; $result['number']=$numlist[1].$numlist[2].$numlist[3]; } if(count($numlist)==3){ $result['betTypeId']=14; $result['number']=$numlist[1].$numlist[2]; } } elseif(count($numlist)==4){ $result['number']=$number; $c=array_count_values($numlist); if($c['X']==0){ $result['betTypeId']=13; } if($c['X']==1){ if($numlist[0]=='X'){ $result['betTypeId']=12; } if($numlist[1]=='X'){ $result['betTypeId']=11; } if($numlist[2]=='X'){ $result['betTypeId']=10; } if($numlist[3]=='X'){ $result['betTypeId']=9; } } if($c['X']==2){ if($numlist[0]=='X' && $numlist[1]=='X'){ $result['betTypeId']=7; } if($numlist[0]=='X' && $numlist[2]=='X'){ $result['betTypeId']=5; } if($numlist[1]=='X' && $numlist[2]=='X'){ $result['betTypeId']=4; } if($numlist[1]=='X' && $numlist[3]=='X'){ $result['betTypeId']=3; } if($numlist[0]=='X' && $numlist[3]=='X'){ $result['betTypeId']=6; } if($numlist[3]=='X' && $numlist[2]=='X'){ $result['betTypeId']=2; } } } return $result;}/** * 获取当前登录的管事员id * @return int */function xjnum($id){ $map['parent_user']=$id; $xjrs=M('user')->where($map)->count(); return $xjrs+0;}//整数保留两位小数function sprintfs($su){ return sprintf('%.4f', $su);}//时间类function timelx($id,$day=0,$oncs){ $cs=explode(',',$oncs); $id=$id-$cs[2]; if($id<=0){ $id=$id+$cs[3]; $day=$day-1; } if($cs[1]){ $ws=1; for($i=0;$i<$cs[1]-1;$i++){ $ws=$ws*10; if($id<$ws){ $id='0'.$id; } } } $no=date($cs[0],time()+$day*24*3600).$id; return $no;}//时间类function addlx($id,$day=0,$oncs){ $cs=explode(',',$oncs); $sjday=(strtotime(date('Y-m-d 00:00:00',time()))-strtotime($cs[0].' 00:00:00'))/3600/24; $no=$cs[1]+$sjday*$cs[2]+$day*$cs[2]+$id; return $no;}function tjzjje($uid){ if($_SESSION[end]){ $where=" and actionTime<=".strtotime($_SESSION[end]); } if($_SESSION[start]){ $where=" and actionTime>=".strtotime($_SESSION[start]); } $money=M('coin_log')->where('uid='.$uid.' and liqtype=2 '.$where )->sum('coin'); return $money+0;}function tjzjfd($uid){ if($_SESSION[end]){ $where=" and actionTime<=".strtotime($_SESSION[end]); } if($_SESSION[start]){ $where=" and actionTime>=".strtotime($_SESSION[start]); } $money=M('coin_log')->where('uid='.$uid.' and liqtype=5 '.$where )->sum('coin'); return $money+0;}function tjyxtz($uid){ if($_SESSION[end]){ $where=" and actionTime<=".strtotime($_SESSION[end]); } if($_SESSION[start]){ $where=" and actionTime>=".strtotime($_SESSION[start]); } $money1=M('coin_log')->where('uid='.$uid.' and liqtype=4 '.$where )->sum('coin'); $money2=M('coin_log')->where('uid='.$uid.' and liqtype=17 '.$where )->sum('coin'); $money3=M('coin_log')->where('uid='.$uid.' and liqtype=8 '.$where )->sum('coin'); return -$money1+$money2+$money3+0;}function tjwin($uid){ if($_SESSION[end]){ $where=" and actionTime<=".strtotime($_SESSION[end]); } if($_SESSION[start]){ $where=" and actionTime>=".strtotime($_SESSION[start]); } $money1=M('coin_log')->where('uid='.$uid.' and liqtype=4 '.$where )->sum('coin'); $money2=M('coin_log')->where('uid='.$uid.' and liqtype=17 '.$where )->sum('coin'); $money3=M('coin_log')->where('uid='.$uid.' and liqtype=8 '.$where )->sum('coin'); $money4=M('coin_log')->where('uid='.$uid.' and liqtype=2 '.$where )->sum('coin'); $money5=M('coin_log')->where('uid='.$uid.' and liqtype=6 '.$where )->sum('coin'); $money6=M('coin_log')->where('uid='.$uid.' and liqtype=7 '.$where )->sum('coin'); return $money4+$money5+$money1-$money2-$money3+0+$money6;}function liqtype($id){ if($id==1){ return '充值入款'; }elseif ($id==2) { return '奖金派送'; }elseif ($id==3) { return '提现扣款'; }elseif ($id==4) { return '投注扣款'; }elseif ($id==5) { return '投注返点'; }elseif ($id==6) { return '奖金派送'; }elseif ($id==7) { return '活动礼金'; }elseif ($id==8) { return '追号停止'; }elseif ($id==9) { return '误存提出'; }elseif ($id==11) { return '人工存入'; }elseif ($id==12) { return '其他优惠'; }elseif ($id==17) { return '投注撤单'; }elseif ($id==30) { return '代理明细'; }}function sex($id){ if($id=='0'){ return '保密'; } if($id=='1'){ return '男'; } if($id=='2'){ return '女'; }}function type_img($id){ $type=M('type')->where(array('id'=>$id))->find(); return "/public/images/cp{$type['type']}.png";}function avatar($id){ $avatar=M('user')->where(array('id'=>$id))->find(); return $avatar['avatar'];}function level($id){ $level = M('user_level')->where(array('level'=>$id))->find(); return $level['title'];}function tdlist($id){ $list=M('user')->where(array('parent_user'=>$id))->select(); $userlist[]=$id; if($list){ foreach ($list as $key => $value) { $userlist=array_merge($userlist,tdlist($value['id'])); } } return $userlist;}function tdlist2($id){ $list=M('user')->where(array('parent_user'=>$id))->select(); $userlist=array(); if($list){ foreach ($list as $key => $value) { $userlist=array_merge($userlist,tdlist($value['id'])); } } return $userlist;}function intercept_num_right($num,$sun){ $dd= substr($num,0,1); $sun=$dd.'...'.substr($num,-$sun); return $sun;}function user_login($id){ $user=M('user')->find($id); return $user['user_login'];}function get_current_admin_id(){ return session('ADMIN_ID');}function type($id){ $type=M('type')->find($id); return $type[title];}function played($id){ $played=M('played')->find($id); return $played[name];}function group($id){ $group=M('played_group')->find($id); return $group[groupname];}function datatime($time){ $data=date('Y-m-d H:i:s',$time); return $data;}function moneybh($id,$money,$yuan,$data=array(),$lx='user'){ $user=M('user')->find($id); if($money>0){ if($data['liqtype']==5){ M($lx)->where('id='.$id)->setDec('yymoney',$money); }else{ M($lx)->where('id='.$id)->setInc('money',$money); } } else{ if($data['liqtype']==4){ M($lx)->where('id='.$id)->setInc('yymoney',0-$money); }else{ M($lx)->where('id='.$id)->setDec('money',0-$money); } } $save=$data; $save[uid]=$id; $save[coin]=$money; $save[userCoin]=$user['money']+$money; $save[actionTime]=time(); $save[info]=$yuan; M('coin_log')->add($save);}function pay_mode_name($id){ $data=M('pay_mode')->where('id='.$id)->find(); return $data['name'];}/** * 获取当前登录的管事员id * @return int */function sp_get_current_admin_id(){ return session('ADMIN_ID');}/** * 判断前台用户是否登录 * @return boolean */function sp_is_user_login(){ $session_user=session('user_login'); return !empty($session_user);}/** * 获取当前登录的前台用户的信息,未登录时,返回false * @return array|boolean */function sp_get_current_user(){ $session_user=session('user'); if(!empty($session_user)){ return $session_user; }else{ return false; }}/** * 更新当前登录前台用户的信息 * @param array $user 前台用户的信息 */function sp_update_current_user($user){ session('user',$user);}/** * 获取当前登录前台用户id,推荐使用sp_get_current_userid * @return int */function get_current_userid(){ $session_user_id=session('user.id'); if(!empty($session_user_id)){ return $session_user_id; }else{ return 0; }}/** * 获取当前登录前台用户id * @return int */function sp_get_current_userid(){ return get_current_userid();}/** * 返回带协议的域名 */function sp_get_host(){ $host=$_SERVER["HTTP_HOST"]; $protocol=is_ssl()?"https://":"http://"; return $protocol.$host;}/** * 获取前台模板根目录 */function sp_get_theme_path(){ // 获取当前主题名称 $tmpl_path=C("SP_TMPL_PATH"); $theme = C('SP_DEFAULT_THEME'); if(C('TMPL_DETECT_THEME')) {// 自动侦测模板主题 $t = C('VAR_TEMPLATE'); if (isset($_GET[$t])){ $theme = $_GET[$t]; }elseif(cookie('think_template')){ $theme = cookie('think_template'); } if(!file_exists($tmpl_path."/".$theme)){ $theme = C('SP_DEFAULT_THEME'); } cookie('think_template',$theme,864000); } return __ROOT__.'/'.$tmpl_path.$theme."/";}/** * 获取用户头像相对网站根目录的地址 */function sp_get_user_avatar_url($avatar){ if($avatar){ if(strpos($avatar, "http")===0){ return $avatar; }else { if(strpos($avatar, 'avatar/')===false){ $avatar='avatar/'.$avatar; } $url = sp_get_asset_upload_path($avatar,false); if(C('FILE_UPLOAD_TYPE')=='Qiniu'){ $storage_setting=sp_get_cmf_settings('storage'); $qiniu_setting=$storage_setting['Qiniu']['setting']; $filepath=$qiniu_setting['protocol'].'://'.$storage_setting['Qiniu']['domain']."/".$avatar; if($qiniu_setting['enable_picture_protect']){ $url = $url.$qiniu_setting['style_separator'].$qiniu_setting['styles']['avatar']; } } return $url; } }else{ return $avatar; }}/** * CMF密码加密方法 * @param string $pw 要加密的字符串 * @return string */function sp_password($pw,$authcode=''){ if(empty($authcode)){ $authcode=C("AUTHCODE"); } $result="###".md5(md5($authcode.$pw)); return $result;}/** * CMF密码加密方法 (X2.0.0以前的方法) * @param string $pw 要加密的字符串 * @return string */function sp_password_old($pw){ $decor=md5(C('DB_PREFIX')); $mi=md5($pw); return substr($decor,0,12).$mi.substr($decor,-4,4);}/** * CMF密码比较方法,所有涉及密码比较的地方都用这个方法 * @param string $password 要比较的密码 * @param string $password_in_db 数据库保存的已经加密过的密码 * @return boolean 密码相同,返回true */function sp_compare_password($password,$password_in_db){ if(strpos($password_in_db, "###")===0){ return sp_password($password)==$password_in_db; }else{ return sp_password_old($password)==$password_in_db; }}function sp_log($content,$file="log.txt"){ file_put_contents($file, $content,FILE_APPEND);}/** * 随机字符串生成 * @param int $len 生成的字符串长度 * @return string */function sp_random_string($len = 6) { $chars = array( "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ); $charsLen = count($chars) - 1; shuffle($chars); // 将数组打乱 $output = ""; for ($i = 0; $i < $len; $i++) { $output .= $chars[mt_rand(0, $charsLen)]; } return $output;}/** * 清空系统缓存,兼容sae */function sp_clear_cache(){ import ( "ORG.Util.Dir" ); $dirs = array (); // runtime/ $rootdirs = sp_scan_dir( RUNTIME_PATH."*" ); //$noneed_clear=array(".","..","Data"); $noneed_clear=array(".",".."); $rootdirs=array_diff($rootdirs, $noneed_clear); foreach ( $rootdirs as $dir ) { if ($dir != "." && $dir != "..") { $dir = RUNTIME_PATH . $dir; if (is_dir ( $dir )) { //array_push ( $dirs, $dir ); $tmprootdirs = sp_scan_dir ( $dir."/*" ); foreach ( $tmprootdirs as $tdir ) { if ($tdir != "." && $tdir != "..") { $tdir = $dir . '/' . $tdir; if (is_dir ( $tdir )) { array_push ( $dirs, $tdir ); }else{ @unlink($tdir); } } } }else{ @unlink($dir); } } } $dirtool=new \Dir(""); foreach ( $dirs as $dir ) { $dirtool->delDir ( $dir ); } if(sp_is_sae()){ $global_mc=@memcache_init(); if($global_mc){ $global_mc->flush(); } $no_need_delete=array("THINKCMF_DYNAMIC_CONFIG"); $kv = new SaeKV(); // 初始化KVClient对象 $ret = $kv->init(); // 循环获取所有key-values $ret = $kv->pkrget('', 100); while (true) { foreach($ret as $key =>$value){ if(!in_array($key, $no_need_delete)){ $kv->delete($key); } } end($ret); $start_key = key($ret); $i = count($ret); if ($i < 100) break; $ret = $kv->pkrget('', 100, $start_key); } }}/** * 保存数组变量到php文件 */function sp_save_var($path,$value){ $ret = file_put_contents($path, "<?php\treturn " . var_export($value, true) . ";?>"); return $ret;}/** * 更新系统配置文件 * @param array $data <br>如:array("URL_MODEL"=>0); * @return boolean */function sp_set_dynamic_config($data){ if(!is_array($data)){ return false; } if(sp_is_sae()){ $kv = new SaeKV(); $ret = $kv->init(); $configs=$kv->get("THINKCMF_DYNAMIC_CONFIG"); $configs=empty($configs)?array():unserialize($configs); $configs=array_merge($configs,$data); $result = $kv->set('THINKCMF_DYNAMIC_CONFIG', serialize($configs)); }elseif(defined('IS_BAE') && IS_BAE){ $bae_mc=new BaeMemcache(); $configs=$bae_mc->get("THINKCMF_DYNAMIC_CONFIG"); $configs=empty($configs)?array():unserialize($configs); $configs=array_merge($configs,$data); $result = $bae_mc->set("THINKCMF_DYNAMIC_CONFIG",serialize($configs),MEMCACHE_COMPRESSED,0); }else{ $config_file="./data/conf/config.php"; if(file_exists($config_file)){ $configs=include $config_file; }else { $configs=array(); } $configs=array_merge($configs,$data); $result = file_put_contents($config_file, "<?php\treturn " . var_export($configs, true) . ";"); } sp_clear_cache(); S("sp_dynamic_config",$configs); return $result;}/** * 生成参数列表,以数组形式返回 */function sp_param_lable($tag = ''){ $param = array(); $array = explode(';',$tag); foreach ($array as $v){ $v=trim($v); if(!empty($v)){ list($key,$val) = explode(':',$v); $param[trim($key)] = trim($val); } } return $param;}/** * 获取后台管理设置的网站信息,此类信息一般用于前台,推荐使用sp_get_site_options */function get_site_options(){ $site_options = F("site_options"); if(empty($site_options)){ $options_obj = M("Options"); $option = $options_obj->where("option_name='site_options'")->find(); if($option){ $site_options = json_decode($option['option_value'],true); }else{ $site_options = array(); } F("site_options", $site_options); } $site_options['site_tongji']=htmlspecialchars_decode($site_options['site_tongji']); return $site_options;}/** * 获取后台管理设置的网站信息,此类信息一般用于前台 */function sp_get_site_options(){ get_site_options();}/** * 获取CMF系统的设置,此类设置用于全局 * @param string $key 设置key,为空时返回所有配置信息 * @return mixed */function sp_get_cmf_settings($key=""){ $cmf_settings = F("cmf_settings"); if(empty($cmf_settings)){ $options_obj = M("Options"); $option = $options_obj->where("option_name='cmf_settings'")->find(); if($option){ $cmf_settings = json_decode($option['option_value'],true); }else{ $cmf_settings = array(); } F("cmf_settings", $cmf_settings); } if(!empty($key)){ return $cmf_settings[$key]; } return $cmf_settings;}/** * 更新CMF系统的设置,此类设置用于全局 * @param array $data * @return boolean */function sp_set_cmf_setting($data){ if(!is_array($data) || empty($data) ){ return false; } $cmf_settings['option_name']="cmf_settings"; $options_model=M("Options"); $find_setting=$options_model->where("option_name='cmf_settings'")->find(); F("cmf_settings",null); if($find_setting){ $setting=json_decode($find_setting['option_value'],true); if($setting){ $setting=array_merge($setting,$data); }else { $setting=$data; } $cmf_settings['option_value']=json_encode($setting); return $options_model->where("option_name='cmf_settings'")->save($cmf_settings); }else{ $cmf_settings['option_value']=json_encode($data); return $options_model->add($cmf_settings); }}/** * 设置系统配置,通用 * @param string $key 配置键值,都小写 * @param array $data 配置值,数组 */function sp_set_option($key,$data){ if(!is_array($data) || empty($data) || !is_string($key) || empty($key)){ return false; } $key=strtolower($key); $option=array(); $options_model=M("Options"); $find_option=$options_model->where(array('option_name'=>$key))->find(); if($find_option){ $old_option_value=json_decode($find_option['option_value'],true); if($old_option_value){ $data=array_merge($old_option_value,$data); } $option['option_value']=json_encode($data); $result = $options_model->where(array('option_name'=>$key))->save($option); }else{ $option['option_name']=$key; $option['option_value']=json_encode($data); $result = $options_model->add($option); } if($result!==false){ F("cmf_system_options_".$key,$data); } return $result;}/** * 获取系统配置,通用 * @param string $key 配置键值,都小写 * @param array $data 配置值,数组 */function sp_get_option($key){ if(!is_string($key) || empty($key)){ return false; } $option_value=F("cmf_system_options_".$key); if(empty($option_value)){ $options_model = M("Options"); $option_value = $options_model->where(array('option_name'=>$key))->getField('option_value'); if($option_value){ $option_value = json_decode($option_value,true); F("cmf_system_options_".$key); } } return $option_value;}/** * 获取CMF上传配置 */function sp_get_upload_setting(){ $upload_setting=sp_get_option('upload_setting'); if(empty($upload_setting)){ $upload_setting = array( 'image' => array( 'upload_max_filesize' => '10240',//单位KB 'extensions' => 'jpg,jpeg,png,gif,bmp4' ), 'video' => array( 'upload_max_filesize' => '10240', 'extensions' => 'mp4,avi,wmv,rm,rmvb,mkv' ), 'audio' => array( 'upload_max_filesize' => '10240', 'extensions' => 'mp3,wma,wav' ), 'file' => array( 'upload_max_filesize' => '10240', 'extensions' => 'txt,pdf,doc,docx,xls,xlsx,ppt,pptx,zip,rar' ) ); } if(empty($upload_setting['upload_max_filesize'])){ $upload_max_filesize_setting=array(); foreach ($upload_setting as $setting){ $extensions=explode(',', trim($setting['extensions'])); if(!empty($extensions)){ $upload_max_filesize=intval($setting['upload_max_filesize'])*1024;//转化成KB foreach ($extensions as $ext){ if(!isset($upload_max_filesize_setting[$ext]) || $upload_max_filesize>$upload_max_filesize_setting[$ext]*1024){ $upload_max_filesize_setting[$ext]=$upload_max_filesize; } } } } $upload_setting['upload_max_filesize']=$upload_max_filesize_setting; F("cmf_system_options_upload_setting",$upload_setting); }else{ $upload_setting=F("cmf_system_options_upload_setting"); } return $upload_setting;}/** * 全局获取验证码图片 * 生成的是个HTML的img标签 * @param string $imgparam <br> * 生成图片样式,可以设置<br> * length=4&font_size=20&width=238&height=50&use_curve=1&use_noise=1<br> * length:字符长度<br> * font_size:字体大小<br> * width:生成图片宽度<br> * heigh:生成图片高度<br> * use_curve:是否画混淆曲线 1:画,0:不画<br> * use_noise:是否添加杂点 1:添加,0:不添加<br> * @param string $imgattrs<br> * img标签原生属性,除src,onclick之外都可以设置<br> * 默认值:style="cursor: pointer;" title="点击获取"<br> * @return string<br> * 原生html的img标签<br> * 注,此函数仅生成img标签,应该配合在表单加入name=verify的input标签<br> * 如:<input type="text" name="verify"/><br> */function sp_verifycode_img($imgparam='length=4&font_size=20&width=238&height=50&use_curve=1&use_noise=1',$imgattrs='style="cursor: pointer;" title="点击获取"'){ $src=__ROOT__."/index.php?g=api&m=checkcode&a=index&".$imgparam; $img=<<<hello<img class="verify_img" src="$src" onclick="this.src='$src&time='+Math.random();" $imgattrs/>hello; return $img;}/** * 返回指定id的菜单 * 同上一类方法,jquery treeview 风格,可伸缩样式 * @param $myid 表示获得这个ID下的所有子级 * @param $effected_id 需要生成treeview目录数的id * @param $str 末级样式 * @param $str2 目录级别样式 * @param $showlevel 直接显示层级数,其余为异步显示,0为全部限制 * @param $ul_class 内部ul样式 默认空 可增加其他样式如'sub-menu' * @param $li_class 内部li样式 默认空 可增加其他样式如'menu-item' * @param $style 目录样式 默认 filetree 可增加其他样式如'filetree treeview-famfamfam' * @param $dropdown 有子元素时li的class * $id="main"; $effected_id="mainmenu"; $filetpl="<a href='\$href'><span class='file'>\$label</span></a>"; $foldertpl="<span class='folder'>\$label</span>"; $ul_class="" ; $li_class="" ; $style="filetree"; $showlevel=6; sp_get_menu($id,$effected_id,$filetpl,$foldertpl,$ul_class,$li_class,$style,$showlevel); * such as * <ul id="example" class="filetree "> <li class="hasChildren" id='1'> <span class='folder'>test</span> <ul> <li class="hasChildren" id='4'> <span class='folder'>caidan2</span> <ul> <li class="hasChildren" id='5'> <span class='folder'>sss</span> <ul> <li id='3'><span class='folder'>test2</span></li> </ul> </li> </ul> </li> </ul> </li> <li class="hasChildren" id='6'><span class='file'>ss</span></li> </ul> */function sp_get_menu($id="main",$effected_id="mainmenu",$filetpl="<span class='file'>\$label</span>",$foldertpl="<span class='folder'>\$label</span>",$ul_class="" ,$li_class="" ,$style="filetree",$showlevel=6,$dropdown='hasChild'){ $navs=F("site_nav_".$id); if(empty($navs)){ $navs=_sp_get_menu_datas($id); } import("Tree"); $tree = new \Tree(); $tree->init($navs); return $tree->get_treeview_menu(0,$effected_id, $filetpl, $foldertpl, $showlevel,$ul_class,$li_class, $style, 1, FALSE, $dropdown);}function _sp_get_menu_datas($id){ $nav_obj= M("Nav"); $oldid=$id; $id= intval($id); $id = empty($id)?"main":$id; if($id=="main"){ $navcat_obj= M("NavCat"); $main=$navcat_obj->where("active=1")->find(); $id=$main['navcid']; } if(empty($id)){ return array(); } $navs= $nav_obj->where(array('cid'=>$id,'status'=>1))->order(array("listorder" => "ASC"))->select(); foreach ($navs as $key=>$nav){ $href=htmlspecialchars_decode($nav['href']); $hrefold=$href; if(strpos($hrefold,"{")){//序列 化的数据 $href=unserialize(stripslashes($nav['href'])); $default_app=strtolower(C("DEFAULT_MODULE")); $href=strtolower(leuu($href['action'],$href['param'])); $g=C("VAR_MODULE"); $href=preg_replace("/\/$default_app\//", "/",$href); $href=preg_replace("/$g=$default_app&/", "",$href); }else{ if($hrefold=="home"){ $href=__ROOT__."/"; }else{ $href=$hrefold; } } $nav['href']=$href; $navs[$key]=$nav; } F("site_nav_".$oldid,$navs); return $navs;}function sp_get_menu_tree($id="main"){ $navs=F("site_nav_".$id); if(empty($navs)){ $navs=_sp_get_menu_datas($id); } import("Tree"); $tree = new \Tree(); $tree->init($navs); return $tree->get_tree_array(0, "");}/** * 获取父ID下的子类 * @param $tag * @param $field * @param $order * @param $limit * @return mixed */function sp_get_submenu($tag,$field,$order){ $Nav= M("Nav"); $field = !empty($field) ? $field : '*'; $order = !empty($order) ? $order : 'id'; //根据参数生成查询条件 $where = array(); $reg = $Nav->where(array('parentid'=>$tag))->select(); if($reg) { $where['parentid'] = $tag; }else{ $parentid = $Nav->where($where['id'] = $tag)->getField('parentid'); if(empty($parentid)){ $where['id']= $tag; }else{ $where['parentid'] = $parentid; } } $terms=$Nav->field($field)->where($where)->order($order)->select(); foreach($terms as $key =>$value){ $terms[$key]['href'] = unserialize($value['href']); if(empty($value['parentid'])){ $terms[$key]['parentid'] = $tag; } } return $terms;}/** *获取html文本里的img * @param string $content * @return array */function sp_getcontent_imgs($content){ import("phpQuery"); \phpQuery::newDocumentHTML($content); $pq=pq(); $imgs=$pq->find("img"); $imgs_data=array(); if($imgs->length()){ foreach ($imgs as $img){ $img=pq($img); $im['src']=$img->attr("src"); $im['title']=$img->attr("title"); $im['alt']=$img->attr("alt"); $imgs_data[]=$im; } } \phpQuery::$documents=null; return $imgs_data;}/** * * @param unknown_type $navcatname * @param unknown_type $datas * @param unknown_type $navrule * @return string */function sp_get_nav4admin($navcatname,$datas,$navrule){ $nav = array(); $nav['name']=$navcatname; $nav['urlrule']=$navrule; $nav['items']=array(); foreach($datas as $t){ $urlrule=array(); $action=$navrule['action']; $urlrule['action']=$action; $urlrule['param']=array(); if(isset($navrule['param'])){ foreach ($navrule['param'] as $key=>$val){ $urlrule['param'][$key]=$t[$val]; } } $nav['items'][] = array( "label" => $t[$navrule['label']], "url" => U($action, $urlrule['param']), "rule" => base64_encode(serialize($urlrule)), "parentid" => empty($navrule['parentid']) ? 0 : $t[$navrule['parentid']], "id" => $t[$navrule['id']], ); } return $nav;}function sp_get_apphome_tpl($tplname,$default_tplname,$default_theme=""){ $theme = C('SP_DEFAULT_THEME'); if(C('TMPL_DETECT_THEME')){// 自动侦测模板主题 $t = C('VAR_TEMPLATE'); if (isset($_GET[$t])){ $theme = $_GET[$t]; }elseif(cookie('think_template')){ $theme = cookie('think_template'); } } $theme=empty($default_theme)?$theme:$default_theme; $themepath=C("SP_TMPL_PATH").$theme."/".MODULE_NAME."/"; $tplpath = sp_add_template_file_suffix($themepath.$tplname); $defaultpl = sp_add_template_file_suffix($themepath.$default_tplname); if(file_exists_case($tplpath)){ }else if(file_exists_case($defaultpl)){ $tplname=$default_tplname; }else{ $tplname="404"; } return $tplname;}/** * 去除字符串中的指定字符 * @param string $str 待处理字符串 * @param string $chars 需去掉的特殊字符 * @return string */function sp_strip_chars($str, $chars='?<*.>\'\"'){ return preg_replace('/['.$chars.']/is', '', $str);}/** * 发送邮件 * @param string $address * @param string $subject * @param string $message * @return array<br> * 返回格式:<br> * array(<br> * "error"=>0|1,//0代表出错<br> * "message"=> "出错信息"<br> * ); */function sp_send_email($address,$subject,$message){ $mail=new \PHPMailer(); // 设置PHPMailer使用SMTP服务器发送Email $mail->IsSMTP(); $mail->IsHTML(true); // 设置邮件的字符编码,若不指定,则为'UTF-8' $mail->CharSet='UTF-8'; // 添加收件人地址,可以多次使用来添加多个收件人 $mail->AddAddress($address); // 设置邮件正文 $mail->Body=$message; // 设置邮件头的From字段。 $mail->From=C('SP_MAIL_ADDRESS'); // 设置发件人名字 $mail->FromName=C('SP_MAIL_SENDER');; // 设置邮件标题 $mail->Subject=$subject; // 设置SMTP服务器。 $mail->Host=C('SP_MAIL_SMTP'); //by Rainfer // 设置SMTPSecure。 $Secure=C('SP_MAIL_SECURE'); $mail->SMTPSecure=empty($Secure)?'':$Secure; // 设置SMTP服务器端口。 $port=C('SP_MAIL_SMTP_PORT'); $mail->Port=empty($port)?"25":$port; // 设置为"需要验证" $mail->SMTPAuth=true; // 设置用户名和密码。 $mail->Username=C('SP_MAIL_LOGINNAME'); $mail->Password=C('SP_MAIL_PASSWORD'); // 发送邮件。 if(!$mail->Send()) { $mailerror=$mail->ErrorInfo; return array("error"=>1,"message"=>$mailerror); }else{ return array("error"=>0,"message"=>"success"); }}/** * 邮件发送 * @param $to 接收人 * @param string $subject 邮件标题 * @param string $content 邮件内容(html模板渲染后的内容) * @throws Exception * @throws phpmailerException */function send_email($to,$subject='',$content=''){ require_once THINK_PATH.'Library/Vendor/phpmailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $config = tpCache('smtp'); $mail->CharSet = 'UTF-8'; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码 $mail->isSMTP(); //Enable SMTP debugging // 0 = off (for production use) // 1 = client messages // 2 = client and server messages $mail->SMTPDebug = 0; //调试输出格式 //$mail->Debugoutput = 'html'; //smtp服务器 $mail->Host = $config['smtp_server']; //端口 - likely to be 25, 465 or 587 $mail->Port = $config['smtp_port']; if($mail->Port === 465) $mail->SMTPSecure = 'ssl';// 使用安全协议 //Whether to use SMTP authentication $mail->SMTPAuth = true; //用户名 $mail->Username = $config['smtp_user']; //密码 $mail->Password = $config['smtp_pwd']; //Set who the message is to be sent from $mail->setFrom($config['smtp_user']); //回复地址 //$mail->addReplyTo('replyto@example.com', 'First Last'); //接收邮件方 $mail->addAddress($to); //标题 $mail->Subject = $subject; //HTML内容转换 $mail->msgHTML($content); //Replace the plain text body with one created manually //$mail->AltBody = 'This is a plain-text message body'; //添加附件 //$mail->addAttachment('images/phpmailer_mini.png'); //send the message, check for errors if (!$mail->send()) { return false; } else { return true; }}/** * 获取缓存或者更新缓存 * @param string $config_key 缓存文件名称 * @param array $data 缓存数据 array('k1'=>'v1','k2'=>'v3') * @return array or string or bool */function tpCache($config_key,$data = array()){ $param = explode('.', $config_key); if(empty($data)){ //如$config_key=shop_info则获取网站信息数组 //如$config_key=shop_info.logo则获取网站logo字符串 $config = F($param[0],'',TEMP_PATH);//直接获取缓存文件 if(empty($config)){ //缓存文件不存在就读取数据库 $res = D('config')->where("inc_type='$param[0]'")->select(); if($res){ foreach($res as $k=>$val){ $config[$val['name']] = $val['value']; } F($param[0],$config,TEMP_PATH); } } if(count($param)>1){ return $config[$param[1]]; }else{ return $config; } }else{ //更新缓存 return F($param[0],$newData,TEMP_PATH); }}/** * 转化数据库保存的文件路径,为可以访问的url * @param string $file * @param mixed $style 样式(七牛) * @return string */function sp_get_asset_upload_path($file,$style=''){ if(strpos($file,"http")===0){ return $file; }else if(strpos($file,"/")===0){ return $file; }else{ $filepath=C("TMPL_PARSE_STRING.__UPLOAD__").$file; if(C('FILE_UPLOAD_TYPE')=='Local'){ if(strpos($filepath,"http")!==0){ $filepath=sp_get_host().$filepath; } } if(C('FILE_UPLOAD_TYPE')=='Qiniu'){ $storage_setting=sp_get_cmf_settings('storage'); $qiniu_setting=$storage_setting['Qiniu']['setting']; $filepath=$qiniu_setting['protocol'].'://'.$storage_setting['Qiniu']['domain']."/".$file.$style; } return $filepath; }}/** * 转化数据库保存图片的文件路径,为可以访问的url * @param string $file * @param mixed $style 样式(七牛) * @return string */function sp_get_image_url($file,$style=''){ if(strpos($file,"http")===0){ return $file; }else if(strpos($file,"/")===0){ return $file; }else{ $filepath=C("TMPL_PARSE_STRING.__UPLOAD__").$file; if(C('FILE_UPLOAD_TYPE')=='Local'){ if(strpos($filepath,"http")!==0){ $filepath=sp_get_host().$filepath; } } if(C('FILE_UPLOAD_TYPE')=='Qiniu'){ $storage_setting=sp_get_cmf_settings('storage'); $qiniu_setting=$storage_setting['Qiniu']['setting']; $filepath=$qiniu_setting['protocol'].'://'.$storage_setting['Qiniu']['domain']."/".$file.$style; } return $filepath; }}/** * 获取图片预览链接 * @param string $file 文件路径,相对于upload * @param string $style 图片样式,只有七牛可以用 * @return string */function sp_get_image_preview_url($file,$style='watermark'){ if(C('FILE_UPLOAD_TYPE')=='Qiniu'){ $storage_setting=sp_get_cmf_settings('storage'); $qiniu_setting=$storage_setting['Qiniu']['setting']; $filepath=$qiniu_setting['protocol'].'://'.$storage_setting['Qiniu']['domain']."/".$file; $url=sp_get_asset_upload_path($file,false); if($qiniu_setting['enable_picture_protect']){ $url = $url.$qiniu_setting['style_separator'].$qiniu_setting['styles'][$style]; } return $url; }else{ return sp_get_asset_upload_path($file,false); }}/** * 获取文件下载链接 * @param string $file * @param int $expires * @return string */function sp_get_file_download_url($file,$expires=3600){ if(C('FILE_UPLOAD_TYPE')=='Qiniu'){ $storage_setting=sp_get_cmf_settings('storage'); $qiniu_setting=$storage_setting['Qiniu']['setting']; $filepath=$qiniu_setting['protocol'].'://'.$storage_setting['Qiniu']['domain']."/".$file; $url=sp_get_asset_upload_path($file,false); if($qiniu_setting['enable_picture_protect']){ $qiniuStorage=new \Think\Upload\Driver\Qiniu\QiniuStorage(C('UPLOAD_TYPE_CONFIG')); $url = $qiniuStorage->privateDownloadUrl($url,$expires); } return $url; }else{ return sp_get_asset_upload_path($file,false); }}function sp_authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key ? $key : C("AUTHCODE")); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc.str_replace('=', '', base64_encode($result)); }}function sp_authencode($string){ return sp_authcode($string,"ENCODE");}function Comments($table,$post_id,$params=array()){ return R("Comment/Widget/index",array($table,$post_id,$params));}/** * 获取评论 * @param string $tag * @param array $where //按照thinkphp where array格式 */function sp_get_comments($tag="field:*;limit:0,5;order:createtime desc;",$where=array()){ $where=array(); $tag=sp_param_lable($tag); $field = !empty($tag['field']) ? $tag['field'] : '*'; $limit = !empty($tag['limit']) ? $tag['limit'] : '5'; $order = !empty($tag['order']) ? $tag['order'] : 'createtime desc'; //根据参数生成查询条件 $mwhere['status'] = array('eq',1); if(is_array($where)){ $where=array_merge($mwhere,$where); }else{ $where=$mwhere; } $comments_model=M("Comments"); $comments=$comments_model->field($field)->where($where)->order($order)->limit($limit)->select(); return $comments;}function sp_file_write($file,$content){ if(sp_is_sae()){ $s=new SaeStorage(); $arr=explode('/',ltrim($file,'./')); $domain=array_shift($arr); $save_path=implode('/',$arr); return $s->write($domain,$save_path,$content); }else{ return file_put_contents($file, $content); }}function sp_file_read($file){ if(sp_is_sae()){ $s=new SaeStorage(); $arr=explode('/',ltrim($file,'./')); $domain=array_shift($arr); $save_path=implode('/',$arr); return $s->read($domain,$save_path); }else{ file_get_contents($file); }}/*修复缩略图使用网络地址时,会出现的错误。5iymt 2015年7月10日*/function sp_asset_relative_url($asset_url){ if(strpos($asset_url,"http")===0){ return $asset_url; }else{ return str_replace(C("TMPL_PARSE_STRING.__UPLOAD__"), "", $asset_url); }}function sp_content_page($content,$pagetpl='{first}{prev}{liststart}{list}{listend}{next}{last}'){ $contents=explode('_ueditor_page_break_tag_',$content); $totalsize=count($contents); import('Page'); $pagesize=1; $PageParam = C("VAR_PAGE"); $page = new \Page($totalsize,$pagesize); $page->setLinkWraper("li"); $page->SetPager('default', $pagetpl, array("listlong" => "9", "first" => "首页", "last" => "尾页", "prev" => "上一页", "next" => "下一页", "list" => "*", "disabledclass" => "")); $content=$contents[$page->firstRow]; $data['content']=$content; $data['page']=$page->show('default'); return $data;}/** * 根据广告名称获取广告内容 * @param string $ad * @return 广告内容 */function sp_getad($ad){ $ad_obj= M("Ad"); $ad=$ad_obj->field("ad_content")->where("ad_name='$ad' and status=1")->find(); return htmlspecialchars_decode($ad['ad_content']);}/** * 根据幻灯片标识获取所有幻灯片 * @param string $slide 幻灯片标识 * @return array; */function sp_getslide($slide,$limit=5,$order = "listorder ASC"){ $slide_obj= M("SlideCat"); $join = '__SLIDE__ as b on a.cid =b.slide_cid'; if($order == ''){ $order = "b.listorder ASC"; } if ($limit == 0) { $limit = 5; } return $slide_obj->alias("a")->join($join)->where("a.cat_idname='$slide' and b.slide_status=1")->order($order)->limit('0,'.$limit)->select();}function sp_getslide1($slide,$limit=5,$order = "listorder ASC"){ $slide_obj= M("SlideCat"); $join = '__SLIDE__ as b on a.cid =b.slide_cid'; if($order == ''){ $order = "b.listorder ASC"; } if ($limit == 0) { $limit = 5; } return $slide_obj->alias("a")->join($join)->where("a.cid='$slide' and b.slide_status=1")->order($order)->limit('0,'.$limit)->select();}/** * 获取所有友情连接 * @return array */function sp_getlinks(){ $links_obj= M("Links"); return $links_obj->where("link_status=1")->order("listorder ASC")->select();}/** * 检查用户对某个url,内容的可访问性,用于记录如是否赞过,是否访问过等等;开发者可以自由控制,对于没有必要做的检查可以不做,以减少服务器压力 * @param number $object 访问对象的id,格式:不带前缀的表名+id;如posts1表示xx_posts表里id为1的记录;如果object为空,表示只检查对某个url访问的合法性 * @param number $count_limit 访问次数限制,如1,表示只能访问一次 * @param boolean $ip_limit ip限制,false为不限制,true为限制 * @param number $expire 距离上次访问的最小时间单位s,0表示不限制,大于0表示最后访问$expire秒后才可以访问 * @return true 可访问,false不可访问 */function sp_check_user_action($object="",$count_limit=1,$ip_limit=false,$expire=0){ $common_action_log_model=M("CommonActionLog"); $action=MODULE_NAME."-".CONTROLLER_NAME."-".ACTION_NAME; $userid=get_current_userid(); $ip=get_client_ip(0,true);//修复ip获取 $where=array("user"=>$userid,"action"=>$action,"object"=>$object); if($ip_limit){ $where['ip']=$ip; } $find_log=$common_action_log_model->where($where)->find(); $time=time(); if($find_log){ $common_action_log_model->where($where)->save(array("count"=>array("exp","count+1"),"last_time"=>$time,"ip"=>$ip)); if($find_log['count']>=$count_limit){ return false; } if($expire>0 && ($time-$find_log['last_time'])<$expire){ return false; } }else{ $common_action_log_model->add(array("user"=>$userid,"action"=>$action,"object"=>$object,"count"=>array("exp","count+1"),"last_time"=>$time,"ip"=>$ip)); } return true;}/** * 用于生成收藏内容用的key * @param string $table 收藏内容所在表 * @param int $object_id 收藏内容的id */function sp_get_favorite_key($table,$object_id){ $auth_code=C("AUTHCODE"); $string="$auth_code $table $object_id"; return sp_authencode($string);}function sp_get_relative_url($url){ if(strpos($url,"http")===0){ $url=str_replace(array("https://","http://"), "", $url); $pos=strpos($url, "/"); if($pos===false){ return ""; }else{ $url=substr($url, $pos+1); $root=preg_replace("/^\//", "", __ROOT__); $root=str_replace("/", "\/", $root); $url=preg_replace("/^".$root."\//", "", $url); return $url; } } return $url;}/** * * @param string $tag * @param array $where * @return array */function sp_get_users($tag="field:*;limit:0,8;order:create_time desc;",$where=array()){ $where=array(); $tag=sp_param_lable($tag); $field = !empty($tag['field']) ? $tag['field'] : '*'; $limit = !empty($tag['limit']) ? $tag['limit'] : '8'; $order = !empty($tag['order']) ? $tag['order'] : 'create_time desc'; //根据参数生成查询条件 $mwhere['user_status'] = array('eq',1); $mwhere['user_type'] = array('eq',2);//default user if(is_array($where)){ $where=array_merge($mwhere,$where); }else{ $where=$mwhere; } $users_model=M("Users"); $users=$users_model->field($field)->where($where)->order($order)->limit($limit)->select(); return $users;}/** * URL组装 支持不同URL模式 * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...' * @param string|array $vars 传入的参数,支持数组和字符串 * @param string $suffix 伪静态后缀,默认为true表示获取配置值 * @param boolean $domain 是否显示域名 * @return string */function leuu($url='',$vars='',$suffix=true,$domain=false){ $routes=sp_get_routes(); if(empty($routes)){ return U($url,$vars,$suffix,$domain); }else{ // 解析URL $info = parse_url($url); $url = !empty($info['path'])?$info['path']:ACTION_NAME; if(isset($info['fragment'])) { // 解析锚点 $anchor = $info['fragment']; if(false !== strpos($anchor,'?')) { // 解析参数 list($anchor,$info['query']) = explode('?',$anchor,2); } if(false !== strpos($anchor,'@')) { // 解析域名 list($anchor,$host) = explode('@',$anchor, 2); } }elseif(false !== strpos($url,'@')) { // 解析域名 list($url,$host) = explode('@',$info['path'], 2); } // 解析子域名 //TODO? // 解析参数 if(is_string($vars)) { // aaa=1&bbb=2 转换成数组 parse_str($vars,$vars); }elseif(!is_array($vars)){ $vars = array(); } if(isset($info['query'])) { // 解析地址里面参数 合并到vars parse_str($info['query'],$params); $vars = array_merge($params,$vars); } $vars_src=$vars; ksort($vars); // URL组装 $depr = C('URL_PATHINFO_DEPR'); $urlCase = C('URL_CASE_INSENSITIVE'); if('/' != $depr) { // 安全替换 $url = str_replace('/',$depr,$url); } // 解析模块、控制器和操作 $url = trim($url,$depr); $path = explode($depr,$url); $var = array(); $varModule = C('VAR_MODULE'); $varController = C('VAR_CONTROLLER'); $varAction = C('VAR_ACTION'); $var[$varAction] = !empty($path)?array_pop($path):ACTION_NAME; $var[$varController] = !empty($path)?array_pop($path):CONTROLLER_NAME; if($maps = C('URL_ACTION_MAP')) { if(isset($maps[strtolower($var[$varController])])) { $maps = $maps[strtolower($var[$varController])]; if($action = array_search(strtolower($var[$varAction]),$maps)){ $var[$varAction] = $action; } } } if($maps = C('URL_CONTROLLER_MAP')) { if($controller = array_search(strtolower($var[$varController]),$maps)){ $var[$varController] = $controller; } } if($urlCase) { $var[$varController] = parse_name($var[$varController]); } $module = ''; if(!empty($path)) { $var[$varModule] = array_pop($path); }else{ if(C('MULTI_MODULE')) { if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){ $var[$varModule]= MODULE_NAME; } } } if($maps = C('URL_MODULE_MAP')) { if($_module = array_search(strtolower($var[$varModule]),$maps)){ $var[$varModule] = $_module; } } if(isset($var[$varModule])){ $module = $var[$varModule]; } if(C('URL_MODEL') == 0) { // 普通模式URL转换 $url = __APP__.'?'.http_build_query(array_reverse($var)); if($urlCase){ $url = strtolower($url); } if(!empty($vars)) { $vars = http_build_query($vars); $url .= '&'.$vars; } }else{ // PATHINFO模式或者兼容URL模式 if(empty($var[C('VAR_MODULE')])){ $var[C('VAR_MODULE')]=MODULE_NAME; } $module_controller_action=strtolower(implode($depr,array_reverse($var))); $has_route=false; $original_url=$module_controller_action.(empty($vars)?"":"?").http_build_query($vars); if(isset($routes['static'][$original_url])){ $has_route=true; $url=__APP__."/".$routes['static'][$original_url]; }else{ if(isset($routes['dynamic'][$module_controller_action])){ $urlrules=$routes['dynamic'][$module_controller_action]; $empty_query_urlrule=array(); foreach ($urlrules as $ur){ $intersect=array_intersect_assoc($ur['query'], $vars); if($intersect){ $vars=array_diff_key($vars,$ur['query']); $url= $ur['url']; $has_route=true; break; } if(empty($empty_query_urlrule) && empty($ur['query'])){ $empty_query_urlrule=$ur; } } if(!empty($empty_query_urlrule)){ $has_route=true; $url=$empty_query_urlrule['url']; } $new_vars=array_reverse($vars); foreach ($new_vars as $key =>$value){ if(strpos($url, ":$key")!==false){ $url=str_replace(":$key", $value, $url); unset($vars[$key]); } } $url=str_replace(array("\d","$"), "", $url); if($has_route){ if(!empty($vars)) { // 添加参数 foreach ($vars as $var => $val){ if('' !== trim($val)) $url .= $depr . $var . $depr . urlencode($val); } } $url =__APP__."/".$url ; } } } $url=str_replace(array("^","$"), "", $url); if(!$has_route){ $module = defined('BIND_MODULE') ? '' : $module; $url = __APP__.'/'.implode($depr,array_reverse($var)); if($urlCase){ $url = strtolower($url); } if(!empty($vars)) { // 添加参数 foreach ($vars as $var => $val){ if('' !== trim($val)) $url .= $depr . $var . $depr . urlencode($val); } } } if($suffix) { $suffix = $suffix===true?C('URL_HTML_SUFFIX'):$suffix; if($pos = strpos($suffix, '|')){ $suffix = substr($suffix, 0, $pos); } if($suffix && '/' != substr($url,-1)){ $url .= '.'.ltrim($suffix,'.'); } } } if(isset($anchor)){ $url .= '#'.$anchor; } if($domain) { $url = (is_ssl()?'https://':'http://').$domain.$url; } return $url; }}/** * URL组装 支持不同URL模式 * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...' * @param string|array $vars 传入的参数,支持数组和字符串 * @param string $suffix 伪静态后缀,默认为true表示获取配置值 * @param boolean $domain 是否显示域名 * @return string */function UU($url='',$vars='',$suffix=true,$domain=false){ return leuu($url,$vars,$suffix,$domain);}function sp_get_routes($refresh=false){ $routes=F("routes"); if( (!empty($routes)||is_array($routes)) && !$refresh){ return $routes; } $routes=M("Route")->where("status=1")->order("listorder asc")->select(); $all_routes=array(); $cache_routes=array(); foreach ($routes as $er){ $full_url=htmlspecialchars_decode($er['full_url']); // 解析URL $info = parse_url($full_url); $path = explode("/",$info['path']); if(count($path)!=3){//必须是完整 url continue; } $module=strtolower($path[0]); // 解析参数 $vars = array(); if(isset($info['query'])) { // 解析地址里面参数 合并到vars parse_str($info['query'],$params); $vars = array_merge($params,$vars); } $vars_src=$vars; ksort($vars); $path=$info['path']; $full_url=$path.(empty($vars)?"":"?").http_build_query($vars); $url=$er['url']; if(strpos($url,':')===false){ $cache_routes['static'][$full_url]=$url; }else{ $cache_routes['dynamic'][$path][]=array("query"=>$vars,"url"=>$url); } $all_routes[$url]=$full_url; } F("routes",$cache_routes); $route_dir=SITE_PATH."/data/conf/"; if(!file_exists($route_dir)){ mkdir($route_dir); } $route_file=$route_dir."route.php"; file_put_contents($route_file, "<?php\treturn " . stripslashes(var_export($all_routes, true)) . ";"); return $cache_routes;}/** * 判断是否为手机访问 * @return boolean */function sp_is_mobile() { static $sp_is_mobile; if ( isset($sp_is_mobile) ) return $sp_is_mobile; if ( empty($_SERVER['HTTP_USER_AGENT']) ) { $sp_is_mobile = false; } elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.) || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) { $sp_is_mobile = true; } else { $sp_is_mobile = false; } return $sp_is_mobile;}/** * 判断是否为微信访问 * @return boolean */function sp_is_weixin(){ if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) { return true; } return false;}/** * 处理插件钩子 * @param string $hook 钩子名称 * @param mixed $params 传入参数 * @return void */function hook($hook,$params=array()){ tag($hook,$params);}/** * 处理插件钩子,只执行一个 * @param string $hook 钩子名称 * @param mixed $params 传入参数 * @return void */function hook_one($hook,$params=array()){ return \Think\Hook::listen_one($hook,$params);}/** * 获取插件类的类名 * @param strng $name 插件名 */function sp_get_plugin_class($name){ $class = "plugins\\{$name}\\{$name}Plugin"; return $class;}/** * 获取插件类的配置 * @param string $name 插件名 * @return array */function sp_get_plugin_config($name){ $class = sp_get_plugin_class($name); if(class_exists($class)) { $plugin = new $class(); return $plugin->getConfig(); }else { return array(); }}/** * 替代scan_dir的方法 * @param string $pattern 检索模式 搜索模式 *.txt,*.doc; (同glog方法) * @param int $flags */function sp_scan_dir($pattern,$flags=null){ $files = array_map('basename',glob($pattern, $flags)); return $files;}/** * 获取所有钩子,包括系统,应用,模板 */function sp_get_hooks($refresh=false){ if(!$refresh){ $return_hooks = F('all_hooks'); if(!empty($return_hooks)){ return $return_hooks; } } $return_hooks=array(); $system_hooks=array( "url_dispatch","app_init","app_begin","app_end", "action_begin","action_end","module_check","path_info", "template_filter","view_begin","view_end","view_parse", "view_filter","body_start","footer","footer_end","sider","comment",'admin_home' ); $app_hooks=array(); $apps=sp_scan_dir(SPAPP."*",GLOB_ONLYDIR); foreach ($apps as $app){ $hooks_file=SPAPP.$app."/hooks.php"; if(is_file($hooks_file)){ $hooks=include $hooks_file; $app_hooks=is_array($hooks)?array_merge($app_hooks,$hooks):$app_hooks; } } $tpl_hooks=array(); $tpls=sp_scan_dir("themes/*",GLOB_ONLYDIR); foreach ($tpls as $tpl){ $hooks_file= sp_add_template_file_suffix("themes/$tpl/hooks"); if(file_exists_case($hooks_file)){ $hooks=file_get_contents($hooks_file); $hooks=preg_replace("/[^0-9A-Za-z_-]/u", ",", $hooks); $hooks=explode(",", $hooks); $hooks=array_filter($hooks); $tpl_hooks=is_array($hooks)?array_merge($tpl_hooks,$hooks):$tpl_hooks; } } $return_hooks=array_merge($system_hooks,$app_hooks,$tpl_hooks); $return_hooks=array_unique($return_hooks); F('all_hooks',$return_hooks); return $return_hooks;}/** * 生成访问插件的url * @param string $url url 格式:插件名://控制器名/方法 * @param array $param 参数 */function sp_plugin_url($url, $param = array(),$domain=false){ $url = parse_url($url); $case = C('URL_CASE_INSENSITIVE'); $plugin = $case ? parse_name($url['scheme']) : $url['scheme']; $controller = $case ? parse_name($url['host']) : $url['host']; $action = trim($case ? strtolower($url['path']) : $url['path'], '/'); /* 解析URL带的参数 */ if(isset($url['query'])){ parse_str($url['query'], $query); $param = array_merge($query, $param); } /* 基础参数 */ $params = array( '_plugin' => $plugin, '_controller' => $controller, '_action' => $action, ); $params = array_merge($params, $param); //添加额外参数 return U('api/plugin/execute', $params,true,$domain);}/** * 检查权限 * @param name string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组 * @param uid int 认证用户的id * @param relation string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证 * @return boolean 通过验证返回true;失败返回false */function sp_auth_check($uid,$name=null,$relation='or'){ if(empty($uid)){ return false; } $iauth_obj=new \Common\Lib\iAuth(); if(empty($name)){ $name=strtolower(MODULE_NAME."/".CONTROLLER_NAME."/".ACTION_NAME); } return $iauth_obj->check($uid, $name, $relation);}/** * 兼容之前版本的ajax的转化方法,如果你之前用参数只有两个可以不用这个转化,如有两个以上的参数请升级一下 * @param array $data * @param string $info * @param int $status */function sp_ajax_return($data,$info,$status){ $return = array(); $return['data'] = $data; $return['info'] = $info; $return['status'] = $status; $data = $return; return $data;}/** * 判断是否为SAE */function sp_is_sae(){ if(defined('APP_MODE') && APP_MODE=='sae'){ return true; }else{ return false; }}function sp_alpha_id($in, $to_num = false, $pad_up = 4, $passKey = null){ $index = "aBcDeFgHiJkLmNoPqRsTuVwXyZAbCdEfGhIjKlMnOpQrStUvWxYz0123456789"; if ($passKey !== null) { // Although this function's purpose is to just make the // ID short - and not so much secure, // with this patch by Simon Franz (http://blog.snaky.org/) // you can optionally supply a password to make it harder // to calculate the corresponding numeric ID for ($n = 0; $n<strlen($index); $n++) $i[] = substr( $index,$n ,1); $passhash = hash('sha256',$passKey); $passhash = (strlen($passhash) < strlen($index)) ? hash('sha512',$passKey) : $passhash; for ($n=0; $n < strlen($index); $n++) $p[] = substr($passhash, $n ,1); array_multisort($p, SORT_DESC, $i); $index = implode($i); } $base = strlen($index); if ($to_num) { // Digital number <<-- alphabet letter code $in = strrev($in); $out = 0; $len = strlen($in) - 1; for ($t = 0; $t <= $len; $t++) { $bcpow = pow($base, $len - $t); $out = $out + strpos($index, substr($in, $t, 1)) * $bcpow; } if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) $out -= pow($base, $pad_up); } $out = sprintf('%F', $out); $out = substr($out, 0, strpos($out, '.')); }else{ // Digital number -->> alphabet letter code if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 0) $in += pow($base, $pad_up); } $out = ""; for ($t = floor(log($in, $base)); $t >= 0; $t--) { $bcp = pow($base, $t); $a = floor($in / $bcp) % $base; $out = $out . substr($index, $a, 1); $in = $in - ($a * $bcp); } $out = strrev($out); // reverse } return $out;}/** * 验证码检查,验证完后销毁验证码增加安全性 ,<br>返回true验证码正确,false验证码错误 * @return boolean <br>true:验证码正确,false:验证码错误 */function sp_check_verify_code($verifycode=''){ $verifycode= empty($verifycode)?I('request.verify'):$verifycode; $verify = new \Think\Verify(); return $verify->check($verifycode, "");}/** * 手机验证码检查,验证完后销毁验证码增加安全性 ,<br>返回true验证码正确,false验证码错误 * @return boolean <br>true:手机验证码正确,false:手机验证码错误 */function sp_check_mobile_verify_code($mobile='',$verifycode=''){ $session_mobile_code=session('mobile_code'); $verifycode= empty($verifycode)?I('request.mobile_code'):$verifycode; $mobile= empty($mobile)?I('request.mobile'):$mobile; $result= false; if(!empty($session_mobile_code) && $session_mobile_code['code'] == md5($mobile.$verifycode.C('AUTHCODE')) && $session_mobile_code['expire_time']>time()){ $result = true; } return $result;}/** * 执行SQL文件 sae 环境下file_get_contents() 函数好像有间歇性bug。 * @param string $sql_path sql文件路径 * @author 5iymt <1145769693@qq.com> */function sp_execute_sql_file($sql_path) { $context = stream_context_create ( array ( 'http' => array ( 'timeout' => 30 ) ) ) ;// 超时时间,单位为秒 // 读取SQL文件 $sql = file_get_contents ( $sql_path, 0, $context ); $sql = str_replace ( "\r", "\n", $sql ); $sql = explode ( ";\n", $sql ); // 替换表前缀 $orginal = 'sp_'; $prefix = C ( 'DB_PREFIX' ); $sql = str_replace ( "{$orginal}", "{$prefix}", $sql ); // 开始安装 foreach ( $sql as $value ) { $value = trim ( $value ); if (empty ( $value )){ continue; } $res = M ()->execute ( $value ); }}/** * 插件R方法扩展 建立多插件之间的互相调用。提供无限可能 * 使用方式 get_plugns_return('Chat://Index/index',array()) * @param string $url 调用地址 * @param array $params 调用参数 * @author 5iymt <1145769693@qq.com> */function sp_get_plugins_return($url, $params = array()){ $url = parse_url($url); $case = C('URL_CASE_INSENSITIVE'); $plugin = $case ? parse_name($url['scheme']) : $url['scheme']; $controller = $case ? parse_name($url['host']) : $url['host']; $action = trim($case ? strtolower($url['path']) : $url['path'], '/'); /* 解析URL带的参数 */ if(isset($url['query'])){ parse_str($url['query'], $query); $params = array_merge($query, $params); } return R("plugins://{$plugin}/{$controller}/{$action}", $params);}/** * 给没有后缀的模板文件,添加后缀名 * @param string $filename_nosuffix */function sp_add_template_file_suffix($filename_nosuffix){ if(file_exists_case($filename_nosuffix.C('TMPL_TEMPLATE_SUFFIX'))){ $filename_nosuffix = $filename_nosuffix.C('TMPL_TEMPLATE_SUFFIX'); }else if(file_exists_case($filename_nosuffix.".php")){ $filename_nosuffix = $filename_nosuffix.".php"; }else{ $filename_nosuffix = $filename_nosuffix.C('TMPL_TEMPLATE_SUFFIX'); } return $filename_nosuffix;}/** * 获取当前主题名 * @param string $default_theme 指定的默认模板名 * @return string */function sp_get_current_theme($default_theme=''){ $theme = C('SP_DEFAULT_THEME'); if(C('TMPL_DETECT_THEME')){// 自动侦测模板主题 $t = C('VAR_TEMPLATE'); if (isset($_GET[$t])){ $theme = $_GET[$t]; }elseif(cookie('think_template')){ $theme = cookie('think_template'); } } $theme=empty($default_theme)?$theme:$default_theme; return $theme;}/** * 判断模板文件是否存在,区分大小写 * @param string $file 模板文件路径,相对于当前模板根目录,不带模板后缀名 */function sp_template_file_exists($file){ $theme= sp_get_current_theme(); $filepath=C("SP_TMPL_PATH").$theme."/".$file; $tplpath = sp_add_template_file_suffix($filepath); if(file_exists_case($tplpath)){ return true; }else{ return false; }}/***根据菜单id获得菜单的详细信息,可以整合进获取菜单数据的方法(_sp_get_menu_datas)中。*@param num $id 菜单id,每个菜单id* @author 5iymt <1145769693@qq.com>*/function sp_get_menu_info($id,$navdata=false){ if(empty($id)&&$navdata){ //若菜单id不存在,且菜单数据存在。 $nav=$navdata; }else{ $nav_obj= M("Nav"); $id= intval($id); $nav= $nav_obj->where("id=$id")->find();//菜单数据 } $href=htmlspecialchars_decode($nav['href']); $hrefold=$href; if(strpos($hrefold,"{")){//序列 化的数据 $href=unserialize(stripslashes($nav['href'])); $default_app=strtolower(C("DEFAULT_MODULE")); $href=strtolower(leuu($href['action'],$href['param'])); $g=C("VAR_MODULE"); $href=preg_replace("/\/$default_app\//", "/",$href); $href=preg_replace("/$g=$default_app&/", "",$href); }else{ if($hrefold=="home"){ $href=__ROOT__."/"; }else{ $href=$hrefold; } } $nav['href']=$href; return $nav;}/** * 判断当前的语言包,并返回语言包名 */function sp_check_lang(){ $langSet = C('DEFAULT_LANG'); if (C('LANG_SWITCH_ON',null,false)){ $varLang = C('VAR_LANGUAGE',null,'l'); $langList = C('LANG_LIST',null,'zh-cn'); // 启用了语言包功能 // 根据是否启用自动侦测设置获取语言选择 if (C('LANG_AUTO_DETECT',null,true)){ if(isset($_GET[$varLang])){ $langSet = $_GET[$varLang];// url中设置了语言变量 cookie('think_language',$langSet,3600); }elseif(cookie('think_language')){// 获取上次用户的选择 $langSet = cookie('think_language'); }elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){// 自动侦测浏览器语言 preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches); $langSet = $matches[1]; cookie('think_language',$langSet,3600); } if(false === stripos($langList,$langSet)) { // 非法语言参数 $langSet = C('DEFAULT_LANG'); } } } return strtolower($langSet);}/*** 删除图片物理路径* @param array $imglist 图片路径* @return bool 是否删除图片* @author 高钦 <395936482@qq.com>*/function sp_delete_physics_img($imglist){ $file_path = C("UPLOADPATH"); if ($imglist) { if ($imglist['thumb']) { $file_path = $file_path . $imglist['thumb']; if (file_exists($file_path)) { $result = @unlink($file_path); if ($result == false) { $res = TRUE; } else { $res = FALSE; } } else { $res = FALSE; } } if ($imglist['photo']) { foreach ($imglist['photo'] as $key => $value) { $file_path = C("UPLOADPATH"); $file_path_url = $file_path . $value['url']; if (file_exists($file_path_url)) { $result = @unlink($file_path_url); if ($result == false) { $res = TRUE; } else { $res = FALSE; } } else { $res = FALSE; } } } } else { $res = FALSE; } return $res;}/** * 安全删除位于头像文件夹中的头像 * * @param string $file 头像文件名,不含路径 * @author rainfer <81818832@qq.com> */function sp_delete_avatar($file){ if($file){ $file='data/upload/avatar/'.$file; if (\Think\Storage::has($file)) { \Think\Storage::unlink($file); } }}/** * 获取惟一订单号 * @return string */function sp_get_order_sn(){ return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);}/** * 获取文件扩展名 * @param string $filename */function sp_get_file_extension($filename){ $pathinfo=pathinfo($filename); return strtolower($pathinfo['extension']);}/** * 检查手机是否还可以发送手机验证码,并返回生成的验证码 * @param string $mobile */function sp_get_mobile_code($mobile,$expire_time){ if(empty($mobile)) return false; $mobile_code_log_model=M('MobileCodeLog'); $current_time=time(); $expire_time=(!empty($expire_time)&&$expire_time>$current_time) ? $expire_time:$current_time+60*30; $max_count=5; $find_log=$mobile_code_log_model->where(array('mobile'=>$mobile))->find(); $result = false; if(empty($find_log)){ $result = true; }else{ $send_time=$find_log['send_time']; $today_start_time= strtotime(date('Y-m-d',$current_time)); if($send_time<$today_start_time){ $result = true; }else if($find_log['count']<$max_count){ $result=true; } } if($result){ $result=rand(100000,999999); session('mobile_code',array( 'code'=>md5($mobile.$result.C('AUTHCODE')), 'expire_time'=>$expire_time )); }else{ session('mobile_code',null); } return $result;}/** * 更新手机验证码发送日志 * @param string $mobile */function sp_mobile_code_log($mobile,$code,$expire_time){ $mobile_code_log_model=M('MobileCodeLog'); $log_count=$mobile_code_log_model->where(array('mobile'=>$mobile))->count(); if($log_count>0){ $result=$mobile_code_log_model->where(array('mobile'=>$mobile))->save(array('send_time'=>time(),'expire_time'=>$expire_time,'code'=>$code,'count'=>array('exp','count+1'))); }else{ $result=$mobile_code_log_model->add(array('mobile'=>$mobile,'send_time'=>time(),'code'=>$code,'count'=>1,'expire_time'=>$expire_time)); } return $result;}//发送验证码function sendmsg($telphone, $content) { if ($telphone) { $post_data = array(); // $post_data['userid'] = '5954'; // $post_data['account'] = '390952199'; $post_data['appkey'] = '3aee9ef1bb9ad0f5'; $post_data['content'] = $content . "【必发网】"; //短信内容需要用urlencode编码下urlencode( $post_data['mobile'] = $telphone; //$post_data['sendtime'] = ''; //不定时发送,值为0,定时发送,输入格式YYYYMMDDHHmmss的日期值 $url = 'http://api.jisuapi.com/sms/send?'; $o = ''; foreach ($post_data as $k => $v) { $url.="$k=" . $v. '&'; } $post_data = substr($o, 0, -1); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要将结果直接返回到变量里,那加上这句。 $str = curl_exec($ch); //$xml = simplexml_load_string($str); $jg=json_decode($str,true); // $arr=objectsIntoArray($xml);// var_dump ($arr['message']); if ($jg['status'] == 'ok') { return '1'; //echo "发送成功! 发送时间".date("Y-m-d H:i:s"); } else { return '0'; //echo "发送失败, 错误提示代码: ".$result; } } return '1';}//发送验证码 防止阻塞 无返回值function sendmsgNotReturn($telphone, $content) { if ($telphone) { $post_data = array(); $post_data['userid'] = '5954'; $post_data['account'] = '390952199'; $post_data['password'] = '80808080'; $post_data['content'] = $content . "航海家"; //短信内容需要用urlencode编码下urlencode( $post_data['mobile'] = $telphone; $post_data['sendtime'] = ''; //不定时发送,值为0,定时发送,输入格式YYYYMMDDHHmmss的日期值 $url = 'http://120.26.244.194:8888/sms.aspx?action=send'; $o = ''; foreach ($post_data as $k => $v) { $o.="$k=" . urlencode($v) . '&'; } $post_data = substr($o, 0, -1); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果需要将结果直接返回到变量里,那加上这句。 curl_exec($ch); return TRUE; $str = curl_exec($ch); $xml = simplexml_load_string($str); $arr=objectsIntoArray($xml); dump($arr);// var_dump ($arr['message']); if ($arr['message'] == 'ok') { return TRUE; //echo "发送成功! 发送时间".date("Y-m-d H:i:s"); } else { return FALSE; //echo "发送失败, 错误提示代码: ".$result; } } return FALSE;}function objectsIntoArray($arrObjData, $arrSkipIndices = array()){ $arrData = array(); // if input is object, convert into array if (is_object($arrObjData)) { $arrObjData = get_object_vars($arrObjData); } if (is_array($arrObjData)) { foreach ($arrObjData as $index => $value) { if (is_object($value) || is_array($value)) { $value = objectsIntoArray($value, $arrSkipIndices); // recursive call } if (in_array($index, $arrSkipIndices)) { continue; } $arrData[$index] = $value; } } return $arrData;}function is_mobile_request() { $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTTP'] : ''; $mobile_browser = '0'; if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) $mobile_browser++; if((isset($_SERVER['HTTP_ACCEPT'])) and (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false)) $mobile_browser++; if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) $mobile_browser++; if(isset($_SERVER['HTTP_PROFILE'])) $mobile_browser++; $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4)); $mobile_agents = array( 'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac', 'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno', 'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-', 'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-', 'newt','noki','oper','palm','pana','pant','phil','play','port','prox', 'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar', 'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-', 'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp', 'wapr','webc','winw','winw','xda','xda-' ); if(in_array($mobile_ua, $mobile_agents)) $mobile_browser++; if(strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false) $mobile_browser++; // Pre-final check to reset everything if the user is on Windows if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows') !== false) $mobile_browser=0; // But WP7 is also Windows, with a slightly different characteristic if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone') !== false) $mobile_browser++; if($mobile_browser>0) return true; else return false;}
划线
评论
复制
发布于: 2020 年 07 月 14 日阅读数: 71
编辑个人签名 2020.07.05 加入
编辑个人简介
评论