ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

常用封装之二common.php

2022-04-13 10:31:47  阅读:174  来源: 互联网

标签:function code return val list param 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);
}

 

标签:function,code,return,val,list,param,common,封装,php
来源: https://www.cnblogs.com/silen0119/p/16139059.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有