Server : nginx/1.20.1
System : Linux iZ2ze9ojcl78uluczwag69Z 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64
User : www ( 1000)
PHP Version : 7.3.28
Disable Function : passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/0531yanglao.com/app/admin/service/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/0531yanglao.com/app/admin/service/AdminSettingService.php
<?php
/*
 * @Description  : 系统设置
 * @Author       : https://github.com/skyselang
 * @Date         : 2020-10-12
 * @LastEditTime : 2021-03-20
 */

namespace app\admin\service;

use think\facade\Db;
use think\facade\App;
use think\facade\Cache;
use app\common\cache\AdminUserCache;
use app\common\cache\AdminSettingCache;

class AdminSettingService
{
    // 默认设置id
    private static $admin_setting_id = 1;

    /**
     * 缓存设置
     * 
     * @param array  $param  缓存参数
     * @param string $method 请求方式
     *
     * @return array|bool
     */
    public static function settingCache($param = [], $method = 'get')
    {
        if ($method == 'get') {
            $config = Cache::getConfig();

            if ($config['default'] == 'redis') {
                $cache = Cache::handler();

                $data = $cache->info();

                $byte['type']  = 'B';
                $byte['value'] = $data['used_memory_lua'];

                $data['used_memory_lua_human'] = AdminToolService::byteTran($byte)['KB'] . 'K';
                $data['uptime_in_days']        = $data['uptime_in_days'] . '天';
            } elseif ($config['default'] == 'memcache') {
                $cache = Cache::handler();

                $data = $cache->getstats();

                $data['time']           = date('Y-m-d H:i:s', $data['time']);
                $data['uptime']         = $data['uptime'] / (24 * 60 * 60) . ' 天';
                $data['bytes_read']     = AdminToolService::byteTran(['type' => 'B', 'value' => $data['bytes_read']])['MB'] . ' MB';
                $data['bytes_written']  = AdminToolService::byteTran(['type' => 'B', 'value' => $data['bytes_written']])['MB'] . ' MB';
                $data['limit_maxbytes'] = AdminToolService::byteTran(['type' => 'B', 'value' => $data['limit_maxbytes']])['MB'] . ' MB';
            } elseif ($config['default'] == 'wincache') {
                $cache = Cache::handler();

                $data['wincache_info']['wincache_fcache_meminfo'] = wincache_fcache_meminfo();
                $data['wincache_info']['wincache_ucache_meminfo'] = wincache_ucache_meminfo();
                $data['wincache_info']['wincache_rplist_meminfo'] = wincache_rplist_meminfo();
            }

            $data['type']         = $config['default'];
            $data['read_times']   = Cache::getReadTimes();
            $data['write_times']  = Cache::getWriteTimes();
            $data['store_config'] = Cache::getStoreConfig($config['default']);

            return $data;
        } else {
            $admin_user = Db::name('admin_user')
                ->field('admin_user_id')
                ->where('is_delete', 0)
                ->select();

            $admin_user_cache = [];
            foreach ($admin_user as $k => $v) {
                $user_cache = AdminUserCache::get($v['admin_user_id']);
                if ($user_cache) {
                    $user_cache_temp['admin_user_id'] = $user_cache['admin_user_id'];
                    $user_cache_temp['admin_token']   = $user_cache['admin_token'];
                    $admin_user_cache[] = $user_cache_temp;
                }
            }

            $res = Cache::clear();
            if (empty($res)) {
                exception();
            }

            foreach ($admin_user_cache as $k => $v) {
                $admin_user_new = AdminUserService::info($v['admin_user_id']);
                $admin_user_new['admin_token'] = $v['admin_token'];
                AdminUserCache::set($admin_user_new['admin_user_id'], $admin_user_new);
            }

            $data['msg']   = '缓存已清空';
            $data['clear'] = $res;

            return $data;
        }
    }

    /**
     * 验证码设置
     *
     * @param array  $param  验证码参数
     * @param string $method 请求方式
     *
     * @return array
     */
    public static function settingVerify($param = [], $method = 'get')
    {
        if ($method == 'get') {
            $admin_setting = self::admin_setting();
            $admin_verify  = $admin_setting['admin_verify'];
        } else {
            $admin_setting_id = self::$admin_setting_id;

            $admin_verify['switch'] = $param['switch'];
            $admin_verify['curve']  = $param['curve'];
            $admin_verify['noise']  = $param['noise'];
            $admin_verify['bgimg']  = $param['bgimg'];
            $admin_verify['type']   = $param['type'];
            $admin_verify['length'] = $param['length'];
            $admin_verify['expire'] = $param['expire'];

            $update['admin_verify'] = serialize($admin_verify);
            $update['update_time']  = datetime();

            $admin_setting = Db::name('admin_setting')
                ->where('admin_setting_id', $admin_setting_id)
                ->update($update);

            if (empty($admin_setting)) {
                exception();
            } else {
                AdminSettingCache::del($admin_setting_id);
            }
        }

        return $admin_verify;
    }

    /**
     * Token设置
     *
     * @param array  $param  token参数
     * @param string $method 请求方式
     *
     * @return array
     */
    public static function settingToken($param = [], $method = 'get')
    {
        if ($method == 'get') {
            $admin_setting = self::admin_setting();
            $admin_token   = $admin_setting['admin_token'];
        } else {
            $admin_setting_id = self::$admin_setting_id;

            $admin_token['iss'] = $param['iss'];
            $admin_token['exp'] = $param['exp'];

            $update['admin_token'] = serialize($admin_token);
            $update['update_time'] = datetime();

            $admin_setting = Db::name('admin_setting')
                ->where('admin_setting_id', $admin_setting_id)
                ->update($update);

            if (empty($admin_setting)) {
                exception();
            } else {
                AdminSettingCache::del($admin_setting_id);
            }
        }

        return $admin_token;
    }

    /**
     * 默认设置
     *
     * @return array
     */
    public static function admin_setting()
    {
        $admin_setting_id = self::$admin_setting_id;

        $admin_setting = AdminSettingCache::get($admin_setting_id);

        if (empty($admin_setting)) {
            $admin_setting = Db::name('admin_setting')
                ->where('admin_setting_id', $admin_setting_id)
                ->find();

            if (empty($admin_setting)) {
                $admin_setting['admin_setting_id'] = $admin_setting_id;
                $admin_setting['admin_verify']     = serialize([]);
                $admin_setting['admin_token']      = serialize([]);
                $admin_setting['create_time']      = datetime();
                Db::name('admin_setting')
                    ->insert($admin_setting);
            }

            // 验证码
            $admin_verify = unserialize($admin_setting['admin_verify']);
            if (empty($admin_verify)) {
                $admin_verify['switch'] = false;  //开关
                $admin_verify['curve']  = false;  //曲线
                $admin_verify['noise']  = false;  //杂点 
                $admin_verify['bgimg']  = false;  //背景图
                $admin_verify['type']   = 1;      //类型:1数字,2字母,3数字字母,4算术,5中文
                $admin_verify['length'] = 4;      //位数3-6位
                $admin_verify['expire'] = 180;    //有效时间(秒)
            }

            // Token
            $admin_token = unserialize($admin_setting['admin_token']);
            if (empty($admin_token)) {
                $admin_token['iss'] = 'yylAdmin';  //签发者
                $admin_token['exp'] = 12;          //有效时间(小时)
            }

            $admin_setting['admin_verify'] = serialize($admin_verify);
            $admin_setting['admin_token']  = serialize($admin_token);
            $admin_setting['update_time']  = datetime();
            Db::name('admin_setting')
                ->where('admin_setting_id', $admin_setting_id)
                ->update($admin_setting);

            AdminSettingCache::set($admin_setting_id, $admin_setting);

            $admin_setting['admin_verify'] = $admin_verify;
            $admin_setting['admin_token']  = $admin_token;
        } else {
            $admin_setting['admin_verify'] = unserialize($admin_setting['admin_verify']);
            $admin_setting['admin_token']  = unserialize($admin_setting['admin_token']);
        }

        return $admin_setting;
    }

    /**
     * 服务器信息
     *
     * @return array
     */
    public static function serverInfo()
    {
        $server_key  = 'server';
        $server_info = AdminSettingCache::get($server_key);

        if (empty($server_info)) {
            try {
                $mysql = Db::query('select version() as version');
                $server_info['mysql'] = $mysql[0]['version']; //mysql
            } catch (\Throwable $th) {
                $server_info['mysql'] = '';
            }

            $server_info['system_info']         = php_uname('s') . ' ' . php_uname('r');     //os
            $server_info['server_software']     = $_SERVER['SERVER_SOFTWARE'];               //web
            $server_info['php_version']         = PHP_VERSION;                               //php
            $server_info['thinkphp']            = App::version();                            //thinkphp
            $server_info['php_sapi_name']       = php_sapi_name();                           //php_sapi_name
            $server_info['ip']                  = $_SERVER['SERVER_ADDR'];                   //ip
            $server_info['domain']              = $_SERVER['SERVER_NAME'];                   //domain
            $server_info['port']                = $_SERVER['SERVER_PORT'];                   //port
            $server_info['server_protocol']     = $_SERVER['SERVER_PROTOCOL'];               //protocol
            $server_info['max_execution_time']  = get_cfg_var('max_execution_time') . '秒 '; //max_execution_time
            $server_info['upload_max_filesize'] = get_cfg_var('upload_max_filesize');        //upload_max_filesize
            $server_info['post_max_size']       = get_cfg_var('post_max_size');              //post_max_size

            $expire = 12 * 60 * 60;
            AdminSettingCache::set($server_key, $server_info, $expire);
        }

        return $server_info;
    }
}