// +---------------------------------------------------------------------- use think\exception\ClassNotFoundException; use app\model\Model as ModelModel ; // 应用公共文件 if (!function_exists('widget')) { /** * 渲染输出Widget * @param string $name Widget名称 * @param array $data 传入的参数 * @return mixed * milo 2019-05-08 从TP5.1代码中拿来修改的 */ function widget($name, $data = []) { return action($name, $data, 'widget'); } } if (!function_exists('action')) { /** * 调用模块的操作方法 参数格式 [模块/控制器/]操作 * @param string $url 调用地址 * @param string|array $vars 调用参数 支持字符串和数组 * @param string $layer 要调用的控制层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return mixed * milo 2019-05-08 从TP5.1代码中拿来修改的 */ function action($url, $vars = [], $layer = 'controller', $appendSuffix = false) { $info = pathinfo($url); $action = $info['basename']; $module = '.' != $info['dirname'] ? $info['dirname'] : request()->controller(); $class = controller($module, $layer); if (is_scalar($vars)) { if (strpos($vars, '=')) { parse_str($vars, $vars); } else { $vars = [$vars]; } } return app()->invokeMethod([$class, $action . config('route.action_suffix')], $vars); } } if (!function_exists('controller')) { /** * 实例化(分层)控制器 格式:[模块名/]控制器名 * @access public * @param string $name 资源地址 * @param string $layer 控制层名称 * @param bool $appendSuffix 是否添加类名后缀 * @param string $empty 空控制器名称 * @return object * @throws ClassNotFoundException * * milo 2019-05-08 从TP5.1代码中拿来修改的 */ function controller($name, $layer = 'controller', $empty = '') { $class = parseClass($name, $layer); if (class_exists($class)) { return app()->make($class); } elseif ($empty && class_exists($emptyClass = app()->parseClass($layer, $empty))) { return app()->make($emptyClass); } throw new ClassNotFoundException('class not exists:' . $class, $class); } } if (!function_exists('parseClass')) { /** * 解析模块和类名 * @access protected * @param string $name 资源地址 * @param string $layer 验证层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return array * * milo 2019-05-08 从TP5.1代码中拿来修改的 */ function parseClass($name, $layer) { if (false !== strpos($name, '\\')) { $class = $name; } else { if (strpos($name, '/')) { $names = explode('/', $name, 2); $name = $names[1]; } $class = app()->parseClass($layer,$name); } return $class; } } if (!function_exists('randomStr')) { /** * 获取随机字符串 * @param int $type 0:数字(默认);1:全部;2:小写字母;3:大写字母;4:字母; * @param int $len 字符串长度 * @return string */ function randomStr($type = 0,$len = 5) { $strPol = "0123456789"; if($type == 1) { $strPol = "ABCDEFGHIJKLMOPQRSTUVWYZ0123456789abcdefghijklmopqrstuvwyz"; } elseif ($type == 2) { $strPol = "abcdefghijklmopqrstuvwyz"; } elseif ($type == 3) { $strPol = "ABCDEFGHIJKLMOPQRSTUVWYZ"; } elseif ($type == 4) { $strPol = "ABCDEFGHIJKLMOPQRSTUVWYZabcdefghijklmopqrstuvwyz"; } $max = strlen($strPol) - 1; $str = ''; for ($i=0;$i<$len;$i++) { $str .= $strPol[rand(0,$max)]; } return $str; } } if(!function_exists('isMobile')){ //判断访问终端是否为移动端 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; } // 脑残法,判断手机发送的客户端标志,兼容性有待提高。其中'MicroMessenger'是电脑微信 if (isset($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = ['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','MicroMessenger']; // 从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; } } return false; } } //根据栏目获取路径 if(!function_exists('getUri')){ function getUri($cate) { $url = ''; if(!empty($cate)){ if($cate['is_index']){ return '/'; } if(!empty($cate['url'])){ return $cate['url']; } if(!empty($cate['route'])){ return $cate['route'].".html"; } switch ($cate["model_id"]){ case ModelModel::MODEL_ARTICLE: return url('/articles/'. $cate['id']); break; case ModelModel::MODEL_PAGE: return url('/page/index', ['categoryId' => $cate['id']]); break; case ModelModel::MODEL_PRODUCT: return url('/product/index', ['categoryId' => $cate['id']]); break; default: return url('/article/index', ['categoryId' => $cate['id']]); break; } } return $url; } } //根据栏目获取文章路径 if (!function_exists('archiveGetUri')) { function archiveGetUri($archive) { if (!empty($archive) &&isset($archive["id"])&& isset($archive->archivesCategory)&&!empty($archive->archivesCategory)) { if (empty($archive->archivesCategory->route)) { switch ($archive->archivesCategory["model_id"]){ case ModelModel::MODEL_PRODUCT: return '/product/detail/'.$archive['id'].".html"; break; default: return '/article/detail/'.$archive['id'].".html"; break; } } else { return $archive->archivesCategory->route."/".$archive['id'] .".html"; } } return ''; } } //根据文件大小转换为文字 if(!function_exists('sizeToStr')){ function sizeToStr($size) { if(!is_numeric($size) || $size <= 0){ return ''; } $size = $size / 1024; if($size < 1024){ return sprintf("%.2fK", $size); } $size = $size / 1024; if($size < 1024){ return sprintf("%.2fM", $size); } $size = $size / 1024; return sprintf("%.2fG", $size); } } //根据路径获取文件名 if(!function_exists('getKeyByPath')){ function getKeyByPath($path) { return substr($path, strrpos($path, '/')+1); } } //富文本中提取图片路径 if(!function_exists('getImageUrlFromText')){ function getImageUrlFromText($content) { preg_match_all('//is', $content, $imgs); $data = []; if(!empty($imgs) && !empty($imgs[1])){ foreach($imgs[1] as $img){ if(substr($img, 0, 4) != 'http'){ $key = getKeyByPath($img); $data[$key] = $img; } } } return $data; } } //富文本中提取视频路径 if(!function_exists('getVideoUrlFromText')){ function getVideoUrlFromText($content) { preg_match_all('//is', $content, $videos); $data = []; if(!empty($videos) && !empty($videos[1])){ foreach($videos[1] as $video){ if(substr($video, 0, 4) != 'http'){ $key = getKeyByPath($video); $data[$key] = $video; } } } return $data; } } //获取目录下的所有文件 if(!function_exists('getAllFilesByPath')){ function getAllFilesByPath($path, $rootPath) { if(is_dir($path) && file_exists($path)){ $items = scandir($path); $files = []; foreach($items as $item){ if(substr($item, 0, 1) != '.' && strpos($item, '_') == false){ $itemPath = $path . '/' . $item; if(is_file($itemPath)){ $size = filesize($itemPath); $files[$item] = [ 'path' => str_replace($rootPath, '/', $itemPath), 'realPath' => $itemPath, 'size' => $size, 'sizeStr' => sizeToStr($size), 'suffix' => strtolower(substr($item, strrpos($item, '.')+1)) //后缀 ]; }elseif(is_dir($itemPath)){ $childFiles = getAllFilesByPath($itemPath, $rootPath); if(!empty($childFiles)){ $files = array_merge($files, $childFiles); }else{ rmdir($itemPath); } } } } return $files; } return []; } } //过滤get输入 if(!function_exists('getFilter')){ function getFilter($value){ $getFilter = "'|(and|or)\b.+?(>|<|=|in|like)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; $forArray = false; if(is_array($value)){ $forFilter = implode($value); $forArray = true; }else{ $forFilter = $value; } if (preg_match("/".$getFilter."/is", $forFilter) == 1){ $value = $forArray ? [] : ''; } return filterExp($value); } } //过滤post录入 if(!function_exists('postFilter')){ function postFilter($value){ $postFilter = "\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; $forArray = false; if(is_array($value)){ $forFilter = implode($value); $forArray = true; }else{ $forFilter = $value; } if (preg_match("/".$postFilter."/is", $forFilter) == 1){ $value = $forArray ? [] : ''; } return filterExp($value); } } //过滤cookie数据 if(!function_exists('cookieFilter')){ function cookieFilter($value){ $cookieFilter = "\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|\/\*.+?\*\/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)"; $forArray = false; if(is_array($value)){ $forFilter = implode($value); $forArray = true; }else{ $forFilter = $value; } if (preg_match("/".$cookieFilter."/is", $forFilter) == 1){ $value = $forArray ? [] : ''; } return filterExp($value); } } if(!function_exists('filterExp')){ function filterExp($value){ $filter = '/^(\s)+(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT LIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)(\s)+$/i'; $forArray = false; if(is_array($value)){ $forFilter = implode($value); $forArray = true; }else{ $forFilter = $value; } if (preg_match($filter, $forFilter) == 1){ $value = $forArray ? [] : ''; } return $value; } } if(!function_exists('arrayHtmlFilter')){ function arrayHtmlFilter($arr) { foreach ($arr as $k => $one) { if(is_array($one)) { $arr[$k] = arrayHtmlFilter($one); } else { $one = trim($one); $arr[$k] = strip_tags($one); } } return $arr; } } if(!function_exists('getTextareaText')){ function getTextareaText($content) { $content = trim($content); if(!empty($content)) { $content = str_replace("\r\n", "\n", $content); $content = str_replace("\r", "\n", $content); } return $content; } } if(!function_exists('getTextNlToList')){ function getTextNlToList($content) { $list = []; $content = getTextareaText($content); if(!empty($content)) { $list = explode("\n", $content); } return $list; } } if (!function_exists('checkPathExistWithMake')) { /** * 检测文件夹是否存在,不存在时自动创建(需要有写入权限) * 支持递归创建 * * @param string $absolutePath * @return bool */ function checkPathExistWithMake(string $absolutePath): bool { try { $absolutePath = rtrim($absolutePath, '/'); if (empty($absolutePath)) { return false; } if (!is_dir($absolutePath)) { return mkdir($absolutePath, 0777, true); } return true; } catch (\Exception $e) { return false; } } } if (!function_exists('dateToFormat')) { /** * 时间日期格式化 * * @param null|string $dateStr * @param string $format * @return string */ function dateToFormat(?string $dateStr, string $format='Y-m-d'): string { if (empty($dateStr)) { return ''; } $time = strtotime($dateStr); if (!$time) { return ''; } return date($format, $time); } } if (!function_exists('timeToFormat')) { /** * 时间日期格式化 * * @param int $time * @param string $format * @return string */ function timeToFormat(int $time, string $format='Y-m-d'): string { if ($time <= 0) { return ''; } return date($format, $time); } }