• 常用封装之二common.php


    <?php
    
    use think\facade\Db;
    use think\facade\Cache;
    use think\facade\Log;
    
    // 应用公共文件
    if (!function_exists('JsonMessage')) {
        function JsonMessage($data = [], $http_status = 200, string $url = '')
        {
            // header('Content-Type:application/json');
            $result = [];
    
            is_null($data) && $data = '无数据';
    
            if (is_string($data)) {
    
                list($code, $msg) = explode('#', strpos($data, '#') ? (string) $data : '10000#' . $data);
            } else {
                $code    = 200;
                $msg     = '请求成功';
    
                if (is_string($http_status)) {
                    $msg = $http_status;
    
                    $http_status = 200;
                }
    
                if (is_numeric($data)) {
                    if ($data > 0) {
                        $msg = "成功更新{$data}条数据";
                    } else {
                        $msg = "无数据更新";
                    }
                    $data = [];
                } elseif ($data instanceof \think\Paginator) {
                    $data = $data->toArray();
                    $data = [
                        'total' => $data['total'],
                        'limit' => $data['per_page'],
                        'page'  => $data['current_page'],
                        'data'  => $data['data'],
                    ];
                }
    
                if (isset($data['total'])) {
                    $result = $data;
                } else {
                    $result['data'] = $data === true ? [] : $data;
                }
            }
    
            if (!empty($url)) {
                $result['wait'] = 2;
                $result['url']  = $url;
            }
    
            $json = array_merge(['code' => intval($code), 'msg' => $msg], $result);
    
            return \think\Response::create(
                $json,
                input('?get.callback') ? 'jsonp' : 'json',
                $http_status
            )->options([
                'json_encode_param' => JSON_UNESCAPED_UNICODE | JSON_BIGINT_AS_STRING
            ]);
        }
    }
    
    if (!function_exists('JsonSuccess')) {
        function JsonSuccess(string $message = 'success', string $url = '')
        {
            return JsonMessage([], $message, $url);
        }
    }
    
    if (!function_exists('JsonError')) {
        function JsonError(string $message = '操作失败')
        {
            return JsonMessage($message);
        }
    }
    
    /**
     * 手动抛出json异常
     */
    if (!function_exists('ErrorException')) {
        function ErrorException(string $message = '', int $code = 10000, int $http_status = 200)
        {
            throw new \app\admin\ErrorException($message, $code, $http_status);
        }
    }
    
    if (!function_exists('NotFoundException')) {
        function NotFoundException(string $message = '', int $code = 10000, int $http_status = 200)
        {
            throw new \app\home\NotFoundException($message, $code, $http_status);
        }
    }
    
    /**
     * 生成唯一标志
     */
    if (!function_exists('uuid')) {
        function uuid()
        {
            $chars = md5(uniqid(mt_rand(), true));
            $uuid = substr($chars, 0, 8)
                . substr($chars, 8, 4)
                . substr($chars, 12, 4)
                . substr($chars, 16, 4)
                . substr($chars, 20, 12);
            return $uuid;
        }
    }
    
    if (!function_exists('filter_words')) {
        function filter_words($str)
        {
            $farr = array(
                "/<(\\/?)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^>]*?)>/isU",
                "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
                "/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dump/is"
            );
            $str = preg_replace($farr, '', $str);
            return $str;
        }
    }
    
    /**
     * 密码hash加密
     */
    // if (!function_exists('passwordHash')) {
    //     function passwordHash(string $password)
    //     {
    //         return password_hash($password, PASSWORD_DEFAULT);
    //     }
    // }
    
    // if (!function_exists('passwordCheck')) {
    //     function passwordCheck(string $password, string $hash)
    //     {
    //         return password_verify($password, $hash);
    //     }
    // }
    
    function pwd2hash(string $pwd)
    {
        return md5($pwd . md5($pwd));
    }
    
    function pwdverify(string $passwd = null, string $hash = null)
    {
        try {
            $pwd_salt = session('pwd_salt');
            if (!$pwd_salt || !is_string($pwd_salt)) {
                throw new Exception('pwd_salt is null.');
            }
    
            if ($hash !== md5($passwd . $pwd_salt)) {
                throw new Exception('pwdword is error.');
            }
            session('pwd_salt', null);
            return true;
        } catch (\Exception $e) {
            session('pwd_salt', null);
            return false;
        }
    }
    
    function pwdsalt(string $salt = null)
    {
        if (is_null($salt)) {
            $salt = sha1(random_bytes(10));
            session('pwd_salt', $salt);
            return $salt;
        }
        $sess_salt = session('pwd_salt');
        if (!$sess_salt) {
            return false;
        }
        return $sess_salt == $salt;
    }
    
    /**
     * code hash
     */
    if (!function_exists('code_hash')) {
        function code_hash()
        {
            if ($hash = session('code.hash')) {
                return $hash;
            }
    
            $hash = sha1(mt_rand(1000000, 9999999));
            session('code.hash', $hash);
            return $hash;
        }
    }
    
    if (!function_exists('code_check')) {
        function code_check(string $hash)
        {
            $code = session('code.hash');
            session('code.hash', null);
            if (!empty($code) && $code === $hash) {
                return true;
            } else {
                return false;
            }
        }
    }
    
    if (!function_exists('code_check')) {
        function captcha_check(string $code)
        {
            if (!session('captcha')) {
                return false;
            }
            $key = session('captcha.key');
            $code = mb_strtolower($code, 'UTF-8');
            $res = password_verify($code, $key);
            if ($res) {
                session('captcha', null);
            }
            return $res;
        }
    }
    
    
    
    /**
     * 无限极分类 - 数组结构
     * @param $list          [ 分类数组 ]
     * @param $parentIndex   [ 父类index ]
     * @param int $pid       [ 顶级ID ]
     * @param int $level     [ 等级 ]
     * @return array
     */
    if (!function_exists('list_to_son')) {
        function list_to_son($list, $parentIndex = 'parent_id', $pid = 0, $level = 0, $strRepeat = '- -', &$tree = [])
        {
            foreach ($list as $key => $val) {
                if ($val[$parentIndex] == $pid) {
                    $val['level'] = $level;
                    $val['html']  = $level == 0 ? '' : str_repeat($strRepeat . ' ', $level);
                    $tree[] = $val;
                    list_to_son($list, $parentIndex, $val['id'], $level + 1, $strRepeat, $tree);
                }
            }
            return $tree;
        }
    }
    
    /**
     * 无限极分类 - 树状结构
     * @param $items        [ 分类数组 ]
     * @param $parentIndex  [ 父类index ]
     * @return array
     */
    if (!function_exists('list_to_tree')) {
        function list_to_tree($list, $pid = 0, $parentIndex = 'parent_id', $child = 'child')
        {
            $tree = [];
            foreach ($list as $key => $val) {
                if ($val[$parentIndex] == $pid) {
                    unset($list[$key]);
                    if (!empty($list)) {
                        $children = list_to_tree($list, $val['id'], $parentIndex);
                        if (!empty($children)) {
                            $val[$child] = $children;
                        }
                    }
                    $tree[] = $val;
                }
            }
            return $tree;
        }
    }
    
    /**
     * 根据子类id查找出所有父级分类信息
     *
     */
    if (!function_exists('get_parent_list')) {
        function get_parent_list($list, $id, $parentIndex = 'parent_id')
        {
            static $arr = [];
            foreach ($list as $val) {
                if ($val['id'] == $id) { //父级分类id等于所查找的id
                    $arr[] = $val;
                    if ($val[$parentIndex] > 0) {
                        get_parent_list($list, $val[$parentIndex]);
                    }
                }
            }
            return $arr;
        }
    }
    
    /**
     * 对查询结果集进行排序
     * @access public
     * @param array $list 查询结果
     * @param string $field 排序的字段名
     * @param array $sortby 排序类型
     * asc正向排序 desc逆向排序 nat自然排序
     * @return array
     */
    if (!function_exists('list_sort_by')) {
        function list_sort_by($list, $field, $sortby = 'asc')
        {
            if (is_array($list)) {
                $refer = $resultSet = array();
                foreach ($list as $i => $data) {
                    $refer[$i] = &$data[$field];
                }
    
                switch ($sortby) {
                    case 'asc': // 正向排序
                        asort($refer);
                        break;
                    case 'desc': // 逆向排序
                        arsort($refer);
                        break;
                    case 'nat': // 自然排序
                        natcasesort($refer);
                        break;
                }
                foreach ($refer as $key => $val) {
                    $resultSet[] = &$list[$key];
                }
    
                return $resultSet;
            }
            return false;
        }
    }
    
    /**
     * 浏览器判断
     */
    if (!function_exists('is_mobile')) {
        function is_mobile()
        {
            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'
                ];
                // 从HTTP_USER_AGENT中查找手机浏览器的关键字
                if (preg_match("/(" . implode('|', $clientKeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
                    return true;
                }
            }
    
            if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
                return true;
            }
    
            if (isset($_SERVER['HTTP_VIA'])) {
                return true;
            }
    
            return false;
        }
    }
    
    /**
     * 获取图片访问路径
     */
    if (!function_exists('image_url')) {
        function image_url(string $path)
        {
            $driver = ['image' => 'image', 'oss' => 'oss'];
            $name = explode(':', $path);
            if (!empty($driver[$name[0]])) {
                try {
                    $url = app('filesystem')->disk($driver[$name[0]])->getUrl($name[1]);
                } catch (Exception $e) {
                    $url = '';
                }
            }
            return !empty($url) ? $url : $path;
        }
    }
    
    if (!function_exists('thumb_img')) {
        function thumb_img(string $path, $src = null)
        {
            $name = explode(':', $path);
            $temp = !empty($name[1]) ? $name[1] : $name[0];
    
            $disk = app('filesystem')->disk('thumb');
            if ($disk->has($temp)) {
                return $disk->getUrl($temp);
            }
    
            //生成缩略图
            try {
                if (is_null($src)) {
                    $src = image_url($path);
                }
                new app\http\service\skylar\ResizeImage($src, 200, 200, $temp);
                return $disk->getUrl($temp);
            } catch (\Exception $e) {
                Log::record(['file' => $e->getFile(), 'line' => $e->getLine(), 'msg' => $e->getMessage()], 'notice');
                return $e->getMessage();
            }
        }
    }
    
    if (!function_exists('cms_redirect')) {
        function cms_redirect(string $url)
        {
            throw new \think\exception\HttpResponseException(\think\Response::create($url, 'redirect', 302));
        }
    }
    
    /**
     * 系统配置
     * @param $key
     */
    // if (!function_exists('setting')) {
    //     function setting(string $key)
    //     {
    //         return \app\model\SystemSetting::Setting($key);
    //     }
    // }
    
    
    /**
     * 系统设置
     *
     * @Description
     * @example
     * @author uftd@qq.com
     * @date 2020-12-23
     * @param string $key
     * @param array $value
     * @return void
     */
    function SystemSetting(string $key, array $value = [])
    {
        $param = explode('.', $key);
        if (empty($value)) {
            $config = Cache::get(config('cache.prefix.config') . $param[0]); //直接获取缓存文件
            if (empty($config)) {
                //缓存文件不存在就读取数据库
                $res = Db::name('system_setting')->where("group", $param[0])->select();
                if ($res) {
                    foreach ($res as $k => $val) {
                        $config[$val['key']] = $val['value'];
                    }
                    Cache::tag('config')->set(config('cache.prefix.config') . $param[0], $config);
                }
            }
            if (count($param) > 1) {
                return $config[$param[1]] ?? '';
            } else {
                return $config ?? [];
            }
        } else {
            //更新缓存
            $result =  Db::name('system_setting')->where("group", $param[0])->select();
            if ($result) {
                $temp = [];
                foreach ($result as $val) {
                    $temp[$val['key']] = $val['value'];
                }
                foreach ($value as $k => $v) {
                    $v = trim($v);
                    $newArr = array('key' => $k, 'value' => is_array($v) ? json_encode($v) : $v, 'group' => $param[0]);
                    if (!isset($temp[$k])) {
                        Db::name('system_setting')->insert($newArr); //新key数据插入数据库
                    } else {
                        if ($v != $temp[$k])
                            Db::name('system_setting')->where("key", $k)->save($newArr); //缓存key存在且值有变更新此项
                    }
                }
                //更新后的数据库记录
                $newRes = Db::name('system_setting')->where("group", $param[0])->select();
                foreach ($newRes as $rs) {
                    $newData[$rs['key']] = $rs['value'];
                }
            } else {
                foreach ($value as $k => $v) {
                    $newArr[] = array('key' => $k, 'value' => trim($v), 'group' => $param[0]);
                }
                Db::name('system_setting')->insertAll($newArr);
                $newData = $value;
            }
            return  Cache::tag('config')->set(config('cache.prefix.config') . $param[0], $newData);
        }
    }
    
    function SkyAuth(int $auth_id, int $user_id = null)
    {
        $auth = null;
        if (is_null($user_id)) {
            /**
             * 从session拿,以后要改
             */
            $user = session('user');
            $auth = !empty($user['auth_node']['node']) ? $user['auth_node']['node'] : [];
    
            if ($auth === 'all') {
                return true;
            }
        }
        if (!is_array($auth)) {
            return false;
        }
        return in_array($auth_id, $auth);
    }
  • 相关阅读:
    记一次GreenPlum性能调优
    PostgreSQL时间格式及相关函数实践
    OGG到OGGAdapter配置详情-从Oracle直接抽取成csv文件
    使yum保留下载的rpm包
    源码编译tmux
    抠图
    ps磨皮的方法
    谷歌学术网站镜像
    element菜单默认展开和选中
    git仓库如果是私密的,每台电脑上导下来都需要进行ssh授权,所以一个项目不知一个ssh权限
  • 原文地址:https://www.cnblogs.com/silen0119/p/16139059.html
Copyright © 2020-2023  润新知