<?php /** * Created by PhpStorm. * User: yemxing * Date: 2018/1/2 * Time: 10:19 */ function curl($url, $params = false, $ispost = 0,$cookie='') { $httpInfo = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ch,CURLOPT_REFERER,Config('website.data')); curl_setopt($ch, CURLOPT_COOKIE, $cookie); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 if ($ispost) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_URL, $url); } else { if ($params) { if (is_array($params)) { $params = http_build_query($params); } curl_setopt($ch, CURLOPT_URL, $url . '?' . $params); } else { curl_setopt($ch, CURLOPT_URL, $url); } } $response = curl_exec($ch); if ($response === FALSE) { // echo "cURL Error: " . curl_error($ch); return false; } // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // $httpInfo = array_merge($httpInfo, curl_getinfo($ch)); curl_close($ch); return $response; } //检查权限,仅支持验证单个权限 function perm($userId,$perm1=''){ $permArr=config('website.perm'); $NotAuth=$permArr['notAuth']; $AdminID=$permArr['adminGroup']; if((!in_array($perm1,$NotAuth)) && !in_array($userId,$AdminID)) {//过滤不用鉴权的方法与用户 $permID = $permArr['id']; $url = $permArr['url'] . '/' . $userId . '/' . $permID . '?perms=' . $perm1; $result = json_decode(curl($url, '', 0),true); if(!isset($result['retcode']) || $result['retcode']!==0 || $result['data']['perms'][$perm1]==false){ return false; }else{ return true; } }else{ return true; } } //上传文件接口签名 function Autograph($exts='jpg|png|gif'){ $url=Config('website.UploadUrl'); $data['k1']=time(); $data['k2']=MD5(MD5($data['k1']).Config('fixed.UploadKey')); echo '<script> k1="'.$data['k1'].'"; k2="'.$data['k2'].'"; UploadImgUrl="'.$url.'" exts="'.$exts.'" </script>'; } //外部接口加密验证 function Validate($data){ $key=Config('fixed.MD5KEY'); $sign=!empty($data['AuthSign'])?$data['AuthSign']:''; if(empty($sign) || empty($data['time'])){ return false; } unset($data['AuthSign']); if((string)MD5(MD5(http_build_query($data)).$key)===(string)$sign){ return true; }else{ return http_build_query($data); } } /** * 二维数组根据字段进行排序 * @params array $array 需要排序的数组 * @params string $field 排序的字段 * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序 */ function arraySequence($array, $field, $sort = 'SORT_DESC') { $arrSort = array(); foreach ($array as $uniqid => $row) { foreach ($row as $key => $value) { $arrSort[$key][$uniqid] = $value; } } array_multisort($arrSort[$field], constant($sort), $array); return $array; } //根据权限生成菜单 function menu($menu,$user){ $perm=chils($menu); $perm1=implode(',',$perm); $permArr=config('website.perm'); $perm=$permArr['id']; $url=$permArr['url'].'/'.$user.'/'.$perm.'?perms='.$perm1; $result=json_decode(curl($url,'',false),true); if($result['retcode']===0){ $find=$result['data']['perms']; $menu=DeleteMenu($menu,$find); if(!empty($menu) && is_array($menu)){ foreach ($menu as $k=>$v){ $v=(array)$v; if($v['title']!='Dashboard' && count($v['childs'])==0 && empty($v['href'])) unset($menu[$k]); } } return array_merge($menu); }else{ return false; } } //提取菜单 function chils($chils){ $perms=[]; foreach ($chils as $k=>$v){ $perm_a=[]; $perm=[]; if(strlen($v->href)>2){ $action=explode('/',$v->href); $perm[]=end($action); } if(count($v->childs)>0){ $perm_a=chils($v->childs); } $perms=array_merge($perms,array_merge($perm,$perm_a)); } return $perms; } //删除没有权限的菜单 function DeleteMenu($menu,$find){ foreach ($menu as $k=>$v){ if(strlen($v->href)>2){ $action=explode('/',$v->href); $key=end($action); if(empty($find[$key]) || $find[$key]==false) unset($menu[$k]); }else{ if(count($v->childs)>0){ $menu[$k]->childs=array_values(DeleteMenu($v->childs,$find)); } if(!count($v->childs)>0 && $v->title!='首页') unset($menu[$k]);//为了删除没有下级的目录 } } return array_values($menu); } function CheckActive($menus, &$arr, $url) { for ($i = 0; $i < count($menus); $i++) { $menu = $menus[$i]; array_push($arr, $i); if (isset($menu->href) && ($menu->href == $url || ($menu->href == '/' && $url == '//'))) return true; if (isset($menu->childs) && count($menu->childs) > 0) { $ret = CheckActive($menu->childs, $arr, $url); if ($ret) return $ret; } array_pop($arr); } return false; } function createMenuReal($menus, $active, $level) { $subclass = ($level == 0) ? 'nav-second-level' : 'nav-third-level'; $ret = ''; for ($ii = 0; $ii < ($level == 0 ? 1 : 2); $ii++) { for ($i = 0; $i < count($menus); $i++) { $menu = $menus[$i]; $act = (count($active) > $level && $active[$level] == $i) ? true : false; $actclass = $act ? ' class="active"' : ''; $actmenu = $act ? ' in' : ''; if (isset($menu->childs) && count($menu->childs) > 0) { if ($ii != 0 && $level > 0) continue; $ret .= '<li' . $actclass . '><a><i class="' . $menu->class . '"></i><span class="nav-label">' . $menu->title . '</span><span class="fa arrow"></span></a>' . '<ul class="nav ' . $subclass . ' collapse' . $actmenu . '">' . createMenuReal($menu->childs, $act ? $active : [], $level + 1) . '</ul></li>'; } else { if ($ii != 1 && $level > 0) continue; $ret .= '<li' . $actclass . '><a href="' . $menu->href . '"><i class="' . $menu->class . '"></i><span class="nav-label">' . $menu->title . '</span></a></li>'; } } } return $ret; } function createMenu($menus, $url) { $actives = []; $ret = CheckActive($menus, $actives, $url); if (!$ret) $actives = []; return createMenuReal($menus, $actives, 0); } function Crumbs($menus, $uri) { $actives = []; CheckActive($menus, $actives, $uri); $ret = ''; foreach ($actives as $k => $v) { if(!empty($menus['childs'])) $menus = (array)$menus['childs'][$v]; else $menus = (array)$menus[$v]; $ret .= '<li class="active"><a href="'.$menus['href'].'">' . $menus['title'] . '</a></li>'; } return $ret; } function SendAlarmMsg($data, $key = 'PurSafeStock', $ToUser = 'INNER_PERSON'){ $touser_json = json_encode($ToUser); $check['touser'] = $touser_json; $check['data'] = urldecode(json_encode($data)); $check['pf'] = -1; $check['keyword'] = $key; $check['is_ignore'] = true; $check['k1']=time(); $check['k2']=MD5(MD5($check['k1']).Config('website.UploadKey')); $res = json_decode(curl('http://api.ichunt.com/msg/sendMessageByAuto', $check),true); if(empty($res['err_code']) || $res['err_code']!=0) return false; return true; } /** * php上传文件到oss * @param string $Path 文件路径 * @param array $data * @return array * Created on 2018-03-15 */ function UploadToOss($Path='',$data=[]){ if(empty($Path)) return false; $field=new CurlFile($Path); if(!$field) return false; $data['upload']=$field; $url=Config('website.UploadUrl'); $data['source']=1; $data['k1']=time(); $data['k2']=MD5(MD5($data['k1']).Config('website.UploadKey')); $data['FileType']='csv'; $result=curl($url,$data,true); return $result; } //生成的文件上传到OSS function SaveDownFile($FileName=''){ if(empty($FileName)) return false; $result=json_decode(UploadToOss(storage_path().DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.$FileName),true); if(empty($result['code']) || $result['code'] != 200 || empty($result['data'][0])) return false; return $result['data'][0]; } function ErrorLog($ErrInfo,$ErrCode=null,$ErrMsg=null){ $Route=debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); $ErrFile=$Route[1]['file']; $line=$Route[1]['line']; $Action=request()->route('key'); if(is_array($ErrInfo)){ $ErrMsg=empty($ErrInfo[1])?'':$ErrInfo[1]; $ErrCode=empty($ErrInfo[0])?'':$ErrInfo[0]; } if(empty($ErrCode)) return true; $ErrInfo=\LogReport::anlyError($ErrMsg,$ErrFile,$line,$ErrCode,$Action);//错误内容, 错误文件, 错误行数, 错误码, 错误方法名); 返回固定格式字符串,第一个参数可传数组 \LogReport::write($ErrInfo); //将anlyError返回的数据作参数传入 } /** * @param array|bool $arr 指定收集的字段 * @param bool $empty 是否过滤空值 * @param array $data 需要过滤数据,不指定从get、post拿指定字段 * @return array|string */ function TrimX($arr = false, $empty = true, $data = []) { if (empty($data)) $data = \Illuminate\Support\Facades\Request::only($arr); if (is_array($data)) { foreach ($data as $k => &$v) { if (!empty($v) && $v != '0' && is_string($v)) { $data[$k] = trim(trim($v, ' ')); } elseif (is_array($v)) { array_walk_recursive($v, function(&$i){ if (is_string($i)) { $i = trim(trim($i, ' ')); } }); } if ($empty == true) if ((empty($v) && $v != 0) || $v == 'undefined' || $v == null) unset($data[$k]); if (is_array($arr) && count($arr) > 0 && count($data) > 0) { if (!in_array($k, $arr)) unset($data[$k]); } } } else { $data = trim(trim($data, ' ')); } return $data; } //获取key用于发送消息 function authkey(){ $data['k1']=time(); $data['k2']=MD5(MD5($data['k1']).Config('website.UploadKey')); return $data; } function apiReturn($errcode=0,$errmsg='ok',$datas=[]){ $data = [ 'errcode' => $errcode, 'errmsg' => $errmsg, 'code' => $errcode, 'msg' => $errmsg, ]; if(!empty($datas['total'])) $data['count'] = $datas['total']; if(!empty($datas)) foreach ($datas as $k=>$v) $data[$k] = $v; return response()->json($data,200); } function resolves($id){ $data['db'] = 'ic_goods_0'; $data['table'] = 'ic_sku_0'; $dbCode = substr($id,-2,1); $tableCode = substr($id,-1); $dbID = substr($id, 0, -2); $data['db'] = 'ic_goods_'.$dbCode; $data['table'] = 'ic_sku_'.$tableCode; $data['id'] = $dbID; return $data; }