// +---------------------------------------------------------------------- use think\exception\ClassNotFoundException; // 应用公共文件 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']) { $url = '/'; } elseif (!empty($cate['url'])) { $url = $cate['url']; } else { $url = url($cate['template'] . '/index', ['category_id' => $cate['id']]); } } return $url; } } //根据文件大小转换为文字 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 = '/^EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT LIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN$/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('is_tel')) { function is_tel($mobile) { if (preg_match("/^1[3456789]\d{9}$/", $mobile)) { return true; } return false; } } if (!function_exists('tel_protect')) { function tel_protect($mobile) { if (is_tel($mobile)) { return substr($mobile, 0, 3) . "****" . substr($mobile, 7); } return $mobile; } } if (!function_exists('getExt')) { function getExt($file) { if (strlen($file) > 0) { $array = explode(".", $file); return end($array); } return ''; } }