// +---------------------------------------------------------------------- namespace think; session_start(); require __DIR__ . '/../vendor/autoload.php'; $app = new App(); if (is_file($app->getRootPath() . '.env') && is_file($app->getRootPath() . 'install.lock')) { header('Location: index.php');exit(); } define('ROOT_PATH', $app->getRootPath()); $action = $app->request->param('action', 'index'); $title = ""; if ($action == 'index') { $title = "系统安装"; }elseif ($action == 'check') { session('step_check', false); //环境检测 $env = check_env(); $dirfile = check_dirfile(); //函数检测 $func = check_func(); if (!session('error')) { session('step_check', true); } $title = "环境检查"; }elseif ($action == 'config') { if ($app->request->isAjax()) { $data = $app->request->param(); $info = file_get_contents(ROOT_PATH . '.example.env'); $dbc = true; foreach ($data['database'] as $key => $value) { if ($value == '') { $dbc = false; } $info = str_replace("{".$key."}", $value, $info); } foreach ($data['admin'] as $key => $value) { if ($value == '') { $dbc = false; } } if (!$dbc) { echo json_encode(['code'=>0,'msg'=>'请填写完系统配置信息!']);exit(); } if ($data['admin']['password'] !== $data['admin']['repassword']) { echo json_encode(['code'=>0,'msg'=>'管理员密码错误']);exit(); } $info = str_replace("{secret}", \xin\helper\Str::random(32), $info); file_put_contents(ROOT_PATH . '.env', $info); session('database_info', $data['database']); session('admin_info', $data['admin']); try { $dsn = "mysql:host=".$data['database']['hostname'].";dbname=".$data['database']['database']; $con = new \PDO($dsn, $data['database']['username'], $data['database']['password']); session('step_config', true); $data = ['code' => 1]; echo json_encode($data);exit(); } catch (\PDOException $e) { session('step_config', false); $data = ['code' => 0, 'msg' => $e->getMessage()]; echo json_encode($data);exit(); } }else{ if (!session('step_check')) { echo "";exit(); } $title = "系统配置"; } }elseif ($action == 'database') { if (!session('database_info') || !session('admin_info') || !session('step_config')) { echo "";exit(); } $title = "数据库安装"; }elseif ($action == 'complete') { if (!session('step_database')) { echo "";exit(); } file_put_contents(ROOT_PATH . "install.lock", "ok"); $title = "安装完成"; } ?> SentCMS系统安装

 

SentCMS网站管理系统 安装协议

版权所有 (c) 2014-2015,南昌腾速科技有限公司保留所有权利。

SentCMS网站管理系统基于 ThinkPHP框架 的开发产品。感谢顶想公司为SentCMS网站管理系统提供内核支持。

感谢您选择SentCMS网站管理系统,希望我们的努力可以为您创造价值。公司网址为 https://www.tensent.cn ,产品官方网站网址为 http://www.sentcms.com

用户须知:本协议是您于南昌腾速科技有限公司关于SentCMS网站管理系统产品使用的法律协议。无论您是个人或组织、盈利与否、用途如何(包括以学习和研究为目的),均需仔细阅读本协议,包括免除或者限制南昌腾速科技有限公司责任的免责条款及对您的权利限制。请您审阅并接受或不接受本服务条款。如您不同意本服务条款及或南昌腾速科技有限公司随时对其的修改,您应不使用或主动取消SentCMS网站管理系统产品。否则,您的任何对SentCMS网站管理系统的相关服务的注册、登陆、下载、查看等使用行为将被视为您对本服务条款全部的完全接受,包括接受南昌腾速科技有限公司对服务条款随时所做的任何修改。

本服务条款一旦发生变更,南昌腾速科技有限公司将在产品官网上公布修改内容。修改后的服务条款一旦在网站公布即有效代替原来的服务条款。您可随时登陆官网查阅最新版服务条款。如果您选择接受本条款,即表示您同意接受协议各项条件的约束。如果您不同意本服务条款,则不能获得使用本服务的权利。您若有违反本条款规定,南昌腾速科技有限公司有权随时中止或终止您对SentCMS网站管理系统产品的使用资格并保留追究相关法律责任的权利。

在理解、同意、并遵守本协议的全部条款后,方可开始使用SentCMS网站管理系统产品。您也可能与南昌腾速科技有限公司直接签订另一书面协议,以补充或者取代本协议的全部或者任何部分。

南昌腾速科技有限公司拥有SentCMS网站管理系统的知识产权,包括商标和著作权。本软件只供许可协议,并非出售。想天只允许您在遵守本协议各项条款的情况下复制、下载、安装、使用或者以其他方式受益于本软件的功能或者知识产权。

运行环境检查

项目 所需配置 当前配置
 

目录、文件权限检查

目录/文件 所需状态 当前状态
 可写  

函数依赖性检查

函数名称 检查结果
()  
数据库配置
(数据库名称不能为空)
(数据库名称不能为空)
(数据库名称不能为空)
(数据库名称不能为空)
(数据库名称不能为空)
(数据库名称不能为空)

管理员配合
(数据库名称不能为空)
(数据库名称不能为空)
(数据库名称不能为空)
(数据库名称不能为空)

安装数据库

location.href = "install.php?action=complete";'; } ?>

完成

array('操作系统', '不限制', '类Unix', PHP_OS, 'success'), 'php' => array('PHP版本', '7.1.0', '7.1+', PHP_VERSION, 'success'), 'upload' => array('附件上传', '不限制', '2M+', '未知', 'success'), 'gd' => array('GD库', '2.0', '2.0+', '未知', 'success'), 'disk' => array('磁盘空间', '20M', '不限制', '未知', 'success'), ); //PHP环境检测 if($items['php'][3] < $items['php'][1]){ $items['php'][4] = 'error'; session('error', true); } //附件上传检测 if(@ini_get('file_uploads')) $items['upload'][3] = ini_get('upload_max_filesize'); //GD库检测 $tmp = function_exists('gd_info') ? gd_info() : array(); if(empty($tmp['GD Version'])){ $items['gd'][3] = '未安装'; $items['gd'][4] = 'error'; session('error', true); } else { $items['gd'][3] = $tmp['GD Version']; } unset($tmp); //磁盘空间检测 if(function_exists('disk_free_space')) { $items['disk'][3] = floor(disk_free_space(ROOT_PATH) / (1024*1024)).'M'; } return $items; } /** * 目录,文件读写检测 * @return array 检测数据 */ function check_dirfile(){ $items = array( array('dir', '可写', 'success', 'uploads/file/'), array('dir', '可写', 'success', 'uploads/image/'), array('dir', '可写', 'success', 'uploads/media/'), ); foreach ($items as &$val) { $item = ROOT_PATH . 'public' . DIRECTORY_SEPARATOR . $val[3]; if('dir' == $val[0]){ if(!is_writable($item)) { if(is_dir($item)) { $val[1] = '可读'; $val[2] = 'error'; session('error', true); } else { $val[1] = '不存在'; $val[2] = 'error'; session('error', true); } } } else { if(file_exists($item)) { if(!is_writable($item)) { $val[1] = '不可写'; $val[2] = 'error'; session('error', true); } } else { if(!is_writable(dirname($item))) { $val[1] = '不存在'; $val[2] = 'error'; session('error', true); } } } } return $items; } /** * 函数检测 * @return array 检测数据 */ function check_func(){ $items = array( array('pdo','支持','success','类'), array('pdo_mysql','支持','success','模块'), array('file_get_contents', '支持', 'success','函数'), array('file_put_contents', '支持', 'success','函数'), array('mb_strlen', '支持', 'success','函数'), ); foreach ($items as &$val) { if(('类'==$val[3] && !class_exists($val[0])) || ('模块'==$val[3] && !extension_loaded($val[0])) || ('函数'==$val[3] && !function_exists($val[0])) ){ $val[1] = '不支持'; $val[2] = 'error'; session('error', true); } } return $items; } /** * 创建数据表 * @param resource $db 数据库连接资源 */ function create_tables($db, $prefix = ''){ //读取SQL文件 $sql = file_get_contents(ROOT_PATH . 'runtime' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR . 'install.sql'); $sql = str_replace("\r", "\n", $sql); $sql = explode(";\n", $sql); //替换表前缀 $orginal = 'sent_'; $sql = str_replace(" `{$orginal}", " `{$prefix}", $sql); //开始安装 show_msg('开始安装数据库...'); foreach ($sql as $value) { $value = trim($value); if(empty($value)) continue; if(substr($value, 0, 12) == 'CREATE TABLE') { $name = preg_replace("/^CREATE TABLE `(\w+)` .*/s", "\\1", $value); $msg = "创建数据表{$name}"; if(false !== $db->query($value)){ show_msg($msg . '...成功'); } else { show_msg($msg . '...失败!', 'error'); session('error', true); } } else { $db->query($value); } } } function register_administrator($db, $prefix, $admin){ show_msg('开始注册创始人帐号...'); $salt = \xin\helper\Str::random(4); $password = md5($admin['password'].$salt); $sql = "INSERT INTO `[PREFIX]member` (`uid`,`username`,`password`,`nickname`,`email`, `sex`,`birthday`,`qq`,`score`,`salt`,`login`,`reg_ip`,`reg_time`,`last_login_ip`,`last_login_time`,`status`) VALUES ". "('1', '[NAME]', '[PASS]', '[NAME]', '[EMAIL]', '0', '0000-00-00', '', '0','[SALT]', '1', '0', '[TIME]', '[IP]', '[TIME]', '1');"; $sql = str_replace( array('[PREFIX]', '[NAME]','[PASS]','[EMAIL]','[SALT]', '[TIME]', '[IP]'), array($prefix, $admin['username'],$password, $admin['email'],$salt, time(), \xin\helper\Server::getRemoteIp()), $sql); $db->query($sql); show_msg('创始人帐号注册完成!'); } /** * 更新数据表 * @param resource $db 数据库连接资源 * @author lyq <605415184@qq.com> */ function update_tables($db, $prefix = ''){ //读取SQL文件 $sql = file_get_contents(ROOT_PATH . 'runtime' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR . 'update.sql'); $sql = str_replace("\r", "\n", $sql); $sql = explode(";\n", $sql); //替换表前缀 $sql = str_replace(" `sent_", " `{$prefix}", $sql); //开始安装 show_msg('开始升级数据库...'); foreach ($sql as $value) { $value = trim($value); if(empty($value)) continue; if(substr($value, 0, 12) == 'CREATE TABLE') { $name = preg_replace("/^CREATE TABLE `(\w+)` .*/s", "\\1", $value); $msg = "创建数据表{$name}"; if(false !== $db->execute($value)){ show_msg($msg . '...成功'); } else { show_msg($msg . '...失败!', 'error'); session('error', true); } } else { if(substr($value, 0, 8) == 'UPDATE `') { $name = preg_replace("/^UPDATE `(\w+)` .*/s", "\\1", $value); $msg = "更新数据表{$name}"; } else if(substr($value, 0, 11) == 'ALTER TABLE'){ $name = preg_replace("/^ALTER TABLE `(\w+)` .*/s", "\\1", $value); $msg = "修改数据表{$name}"; } else if(substr($value, 0, 11) == 'INSERT INTO'){ $name = preg_replace("/^INSERT INTO `(\w+)` .*/s", "\\1", $value); $msg = "写入数据表{$name}"; } if(($db->execute($value)) !== false){ show_msg($msg . '...成功'); } else{ show_msg($msg . '...失败!', 'error'); session('error', true); } } } } /** * 及时显示提示信息 * @param string $msg 提示信息 */ function show_msg($msg, $class = 'primary'){ echo ""; flush(); ob_flush(); } function session($name, $value = false){ if ($name == '') { return false; } if ($value) { $_SESSION[$name] = $value; }else{ return isset($_SESSION[$name]) ? $_SESSION[$name] : false; } } ?>