0, 'msg' => $validateError, ]; die(json_encode($data)); } if (strlen($adminUrl) < 2) { $validateError = '后台的地址不能小于2位数'; } elseif (strlen($password) < 5) { $validateError = '管理员密码不能小于5位数'; } elseif (strlen($username) < 4) { $validateError = '管理员账号不能小于4位数'; } if (!empty($validateError)) { $data = [ 'code' => 0, 'msg' => $validateError, ]; die(json_encode($data)); } // DB类初始化 $config = [ 'type' => 'mysql', 'hostname' => $hostname, 'username' => $dbUsername, 'password' => $dbPassword, 'hostport' => $hostport, 'charset' => 'utf8', 'prefix' => $prefix, 'debug' => true, ]; Db::setConfig([ 'default' => 'mysql', 'connections' => [ 'mysql' => $config, 'install' => array_merge($config, ['database' => $database]), ], ]); // 检测数据库连接 if (!checkConnect()) { $data = [ 'code' => 0, 'msg' => '数据库连接失败', ]; die(json_encode($data)); } // 检测数据库是否存在 if (!$cover && checkDatabase($database)) { $data = [ 'code' => 0, 'msg' => '数据库已存在,请选择覆盖安装或者修改数据库名', ]; die(json_encode($data)); } // 创建数据库 createDatabase($database); // 导入sql语句等等 $install = install($username, $password, array_merge($config, ['database' => $database]), $adminUrl); if ($install !== true) { $data = [ 'code' => 0, 'msg' => '系统安装失败:' . $install, ]; die(json_encode($data)); } $data = [ 'code' => 1, 'msg' => '系统安装成功,正在跳转登录页面', 'url' => $adminUrl, ]; die(json_encode($data)); } function isAjax() { if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return true; } else { return false; } } function isPost() { return ($_SERVER['REQUEST_METHOD'] == 'POST' && checkurlHash($GLOBALS['verify']) && (empty($_SERVER['HTTP_REFERER']) || preg_replace("~https?:\/\/([^\:\/]+).*~i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("~([^\:]+).*~", "\\1", $_SERVER['HTTP_HOST']))) ? 1 : 0; } function checkPhpVersion($version) { $php_version = explode('-', phpversion()); $check = strnatcasecmp($php_version[0], $version) >= 0 ? true : false; return $check; } function checkConnect() { try { Db::query("select version()"); } catch (\Exception $e) { return false; } return true; } function checkDatabase($database) { $check = Db::query("SELECT * FROM information_schema.schemata WHERE schema_name='{$database}'"); if (empty($check)) { return false; } else { return true; } } function createDatabase($database) { try { Db::execute("CREATE DATABASE IF NOT EXISTS `{$database}` DEFAULT CHARACTER SET utf8"); } catch (\Exception $e) { return false; } return true; } function parseSql($sql = '', $to, $from) { list($pure_sql, $comment) = [[], false]; $sql = explode("\n", trim(str_replace(["\r\n", "\r"], "\n", $sql))); foreach ($sql as $key => $line) { if ($line == '') { continue; } if (preg_match("/^(#|--)/", $line)) { continue; } if (preg_match("/^\/\*(.*?)\*\//", $line)) { continue; } if (substr($line, 0, 2) == '/*') { $comment = true; continue; } if (substr($line, -2) == '*/') { $comment = false; continue; } if ($comment) { continue; } if ($from != '') { $line = str_replace('`' . $from, '`' . $to, $line); } if ($line == 'BEGIN;' || $line == 'COMMIT;') { continue; } array_push($pure_sql, $line); } //$pure_sql = implode($pure_sql, "\n"); $pure_sql = implode("\n",$pure_sql); $pure_sql = explode(";\n", $pure_sql); return $pure_sql; } function install($username, $password, $config, $adminUrl) { $sqlPath = file_get_contents(INSTALL_PATH . 'sql' . DS . 'install.sql'); $sqlArray = parseSql($sqlPath, $config['prefix'], 'ea_'); Db::startTrans(); try { foreach ($sqlArray as $vo) { Db::connect('install')->execute($vo); } Db::connect('install') ->name('system_admin') ->where('id', 1) ->delete(); Db::connect('install') ->name('system_admin') ->insert([ 'id' => 1, 'username' => $username, 'head_img' => '/static/admin/images/head.jpg', 'password' => password($password), 'create_time' => time(), ]); // 处理安装文件 !is_dir(INSTALL_PATH) && @mkdir(INSTALL_PATH); !is_dir(INSTALL_PATH . 'lock' . DS) && @mkdir(INSTALL_PATH . 'lock' . DS); @file_put_contents(INSTALL_PATH . 'lock' . DS . 'install.lock', date('Y-m-d H:i:s')); @file_put_contents(CONFIG_PATH . 'app.php', getAppConfig($adminUrl)); @file_put_contents(CONFIG_PATH . 'database.php', getDatabaseConfig($config)); Db::commit(); } catch (\Exception $e) { Db::rollback(); return $e->getMessage(); } return true; } function password($value) { $value = sha1('blog_') . md5($value) . md5('_encrypt') . sha1($value); return sha1($value); } function getAppConfig($admin) { $config = << Env::get('app.host', ''), // 应用的命名空间 'app_namespace' => '', // 是否启用路由 'with_route' => true, // 是否启用事件 'with_event' => true, // 开启应用快速访问 'app_express' => true, // 默认应用 'default_app' => 'index', // 默认时区 'default_timezone' => 'Asia/Shanghai', // 应用映射(自动多应用模式有效) 'app_map' => [ Env::get('easyadmin.admin', '{$admin}') => 'admin', ], // 后台别名 'admin_alias_name' => Env::get('easyadmin.admin', '{$admin}'), // 域名绑定(自动多应用模式有效) 'domain_bind' => [], // 禁止URL访问的应用列表(自动多应用模式有效) 'deny_app_list' => ['common'], // 异常页面的模板文件 'exception_tmpl' => Env::get('app_debug') == 1 ? app()->getThinkPath() . 'tpl/think_exception.tpl' : app()->getBasePath() . 'common' . DIRECTORY_SEPARATOR . 'tpl' . DIRECTORY_SEPARATOR . 'think_exception.tpl', // 跳转页面的成功模板文件 'dispatch_success_tmpl' => app()->getBasePath() . 'common' . DIRECTORY_SEPARATOR . 'tpl' . DIRECTORY_SEPARATOR . 'dispatch_jump.tpl', // 跳转页面的失败模板文件 'dispatch_error_tmpl' => app()->getBasePath() . 'common' . DIRECTORY_SEPARATOR . 'tpl' . DIRECTORY_SEPARATOR . 'dispatch_jump.tpl', // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~', // 显示错误信息 'show_error_msg' => false, // 静态资源上传到OSS前缀 'oss_static_prefix' => Env::get('easyadmin.oss_static_prefix', 'static_easyadmin'), ]; EOT; return $config; } function getDatabaseConfig($data) { $config = << Env::get('database.driver', 'mysql'), // 自定义时间查询规则 'time_query_rule' => [], // 自动写入时间戳字段 // true为自动识别类型 false关闭 // 字符串则明确指定时间字段类型 支持 int timestamp datetime date 'auto_timestamp' => true, // 时间字段取出后的默认时间格式 'datetime_format' => 'Y-m-d H:i:s', // 数据库连接配置信息 'connections' => [ 'mysql' => [ // 数据库类型 'type' => Env::get('database.type', 'mysql'), // 服务器地址 'hostname' => Env::get('database.hostname', '{$data['hostname']}'), // 数据库名 'database' => Env::get('database.database', '{$data['database']}'), // 用户名 'username' => Env::get('database.username', '{$data['username']}'), // 密码 'password' => Env::get('database.password', '{$data['password']}'), // 端口 'hostport' => Env::get('database.hostport', '{$data['hostport']}'), // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => Env::get('database.charset', 'utf8'), // 数据库表前缀 'prefix' => Env::get('database.prefix', '{$data['prefix']}'), // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'deploy' => 0, // 数据库读写是否分离 主从式有效 'rw_separate' => false, // 读写分离后 主服务器数量 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', // 是否严格检查字段是否存在 'fields_strict' => true, // 是否需要断线重连 'break_reconnect' => false, // 监听SQL 'trigger_sql' => true, // 开启字段缓存 'fields_cache' => false, // 字段缓存路径 'schema_cache_path' => app()->getRuntimePath() . 'schema' . DIRECTORY_SEPARATOR, ], // 更多的数据库配置信息 ], ]; EOT; return $config; } ?> 安装EasyAdmin后台程序

安装EasyAdmin后台系统

使用过程中遇到任何问题可参考 文档教程 QQ交流群

后台登录地址: admin