安装程序优化,支持mysql5.0版本
parent
7d42d67986
commit
ad46746084
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | ShopXO 国内领先企业级B2C免费开源电商系统
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2011~2018 http://shopxo.net All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: Devil
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\common;
|
||||
|
||||
use Exception;
|
||||
use think\exception\Handle;
|
||||
use think\exception\HttpException;
|
||||
use think\exception\ValidateException;
|
||||
|
||||
/**
|
||||
* 异常处理
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 0.0.1
|
||||
* @datetime 2016-12-01T21:51:08+0800
|
||||
*/
|
||||
class Http extends Handle
|
||||
{
|
||||
/**
|
||||
* 异常处理
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2019-01-14
|
||||
* @desc description
|
||||
* @param Exception $e [错误对象]
|
||||
*/
|
||||
public function render(Exception $e)
|
||||
{
|
||||
// ajax请求处理
|
||||
if(IS_AJAX)
|
||||
{
|
||||
// 参数验证错误
|
||||
if($e instanceof ValidateException)
|
||||
{
|
||||
$msg = $e->getError();
|
||||
$code = -422;
|
||||
}
|
||||
|
||||
// 请求异常
|
||||
if($e instanceof HttpException && request()->isAjax())
|
||||
{
|
||||
$msg = $e->getMessage();
|
||||
$code = $e->getStatusCode();
|
||||
}
|
||||
|
||||
if(!isset($code))
|
||||
{
|
||||
$code = -500;
|
||||
}
|
||||
if(empty($msg))
|
||||
{
|
||||
if(method_exists($e, 'getMessage'))
|
||||
{
|
||||
$msg = $e->getMessage();
|
||||
} else {
|
||||
$msg = '服务器错误';
|
||||
}
|
||||
}
|
||||
exit(json_encode(DataReturn($msg, $code)));
|
||||
|
||||
// web错误交给系统处理
|
||||
} else {
|
||||
return parent::render($e);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -22,6 +22,9 @@ use think\Db;
|
|||
*/
|
||||
class Index extends Common
|
||||
{
|
||||
// 编码类型
|
||||
private $charset_type_list;
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
* @author Devil
|
||||
|
|
@ -33,6 +36,20 @@ class Index extends Common
|
|||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// 编码类型
|
||||
$this->charset_type_list = [
|
||||
'utf8mb4' => [
|
||||
'charset' => 'utf8mb4',
|
||||
'collate' => 'utf8mb4_general_ci',
|
||||
'version' => 5.6,
|
||||
],
|
||||
'utf8' => [
|
||||
'charset' => 'utf8',
|
||||
'collate' => 'utf8_general_ci',
|
||||
'version' => 5.0,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -94,6 +111,8 @@ class Index extends Common
|
|||
{
|
||||
$this->IsInstall();
|
||||
new \base\Behavior(['msg'=>'数据信息填写']);
|
||||
|
||||
$this->assign('charset_type_list' , $this->charset_type_list);
|
||||
return $this->fetch();
|
||||
}
|
||||
|
||||
|
|
@ -160,7 +179,7 @@ class Index extends Common
|
|||
}
|
||||
|
||||
// mysql版本
|
||||
$ret = $this->IsVersion($db);
|
||||
$ret = $this->IsVersion($db, $params['DB_CHARSET']);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
return $ret;
|
||||
|
|
@ -169,7 +188,7 @@ class Index extends Common
|
|||
// 检查数据表是否存在
|
||||
if(!$this->IsDbExist($db, $params['DB_NAME']))
|
||||
{
|
||||
if($this->DbNameCreate($db, $params['DB_NAME']))
|
||||
if($this->DbNameCreate($db, $params['DB_NAME'], $params['DB_CHARSET']))
|
||||
{
|
||||
$db = $this->DbObj($params, $params['DB_NAME']);
|
||||
} else {
|
||||
|
|
@ -241,7 +260,7 @@ return [
|
|||
// 数据库连接参数
|
||||
'params' => [],
|
||||
// 数据库编码默认采用utf8
|
||||
'charset' => 'utf8mb4',
|
||||
'charset' => '{$this->charset_type_list[$params['DB_CHARSET']]['charset']}',
|
||||
// 数据库表前缀
|
||||
'prefix' => '{$params['DB_PREFIX']}',
|
||||
// 数据库调试模式
|
||||
|
|
@ -310,6 +329,14 @@ php;
|
|||
//替换表前缀
|
||||
$sql = str_replace("`s_", " `{$params['DB_PREFIX']}", $sql);
|
||||
|
||||
// 编码替换,utf8mb4则做替换操作
|
||||
$charset = $this->charset_type_list[$params['DB_CHARSET']];
|
||||
if($charset['charset'] != 'utf8mb4')
|
||||
{
|
||||
$sql = str_replace('CHARSET=utf8mb4', "CHARSET={$charset['charset']}", $sql);
|
||||
$sql = str_replace('utf8mb4_general_ci', "{$charset['collate']}", $sql);
|
||||
}
|
||||
|
||||
// 转为数组
|
||||
$sql_all = preg_split("/;[\r\n]+/", $sql);
|
||||
|
||||
|
|
@ -348,9 +375,10 @@ php;
|
|||
* @version 1.0.0
|
||||
* @date 2018-12-28
|
||||
* @desc description
|
||||
* @param [object] $db [db对象]
|
||||
* @param [object] $db [db对象]
|
||||
* @param [string] $db_charset [数据库编码]
|
||||
*/
|
||||
private function IsVersion($db)
|
||||
private function IsVersion($db, $db_charset)
|
||||
{
|
||||
$data = $db->query("select version() AS version");
|
||||
if(empty($data[0]['version']))
|
||||
|
|
@ -358,10 +386,12 @@ php;
|
|||
new \base\Behavior(['msg'=>'查询数据库版本失败']);
|
||||
return DataReturn('查询数据库版本失败', -1);
|
||||
} else {
|
||||
if($data[0]['version'] < 5.6)
|
||||
$mysql_version = str_replace('-log', '', $data[0]['version']);
|
||||
if($mysql_version < $this->charset_type_list[$db_charset]['version'])
|
||||
{
|
||||
new \base\Behavior(['msg'=>'数据库版本过低', 'mysql_version'=>$data[0]['version']]);
|
||||
return DataReturn('数据库版本过低', -1);
|
||||
$msg = '数据库版本过低、需要>='.$this->charset_type_list[$db_charset]['version'].'、当前'.$mysql_version;
|
||||
new \base\Behavior(['msg'=>$msg, 'mysql_version'=>$mysql_version]);
|
||||
return DataReturn($msg, -1);
|
||||
}
|
||||
}
|
||||
return DataReturn('success', 0);
|
||||
|
|
@ -374,12 +404,13 @@ php;
|
|||
* @version 1.0.0
|
||||
* @date 2018-12-28
|
||||
* @desc description
|
||||
* @param [object] $db [db对象]
|
||||
* @param [string] $db_name [数据库名称]
|
||||
* @param [object] $db [db对象]
|
||||
* @param [string] $db_name [数据库名称]
|
||||
* @param [string] $db_charset [数据库编码]
|
||||
*/
|
||||
private function DbNameCreate($db, $db_name)
|
||||
private function DbNameCreate($db, $db_name, $db_charset)
|
||||
{
|
||||
$sql = "CREATE DATABASE {$db_name} DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci";
|
||||
$sql = "CREATE DATABASE {$db_name} DEFAULT CHARSET {$this->charset_type_list[$db_charset]['charset']} COLLATE {$this->charset_type_list[$db_charset]['collate']}";
|
||||
if($db->execute($sql) !== false)
|
||||
{
|
||||
return $this->IsDbExist($db, $db_name);
|
||||
|
|
@ -460,6 +491,12 @@ php;
|
|||
'key_name' => 'DB_TYPE',
|
||||
'error_msg' => '请选择数据库类型',
|
||||
],
|
||||
[
|
||||
'checked_type' => 'in',
|
||||
'key_name' => 'DB_CHARSET',
|
||||
'checked_data' => array_column($this->charset_type_list, 'charset'),
|
||||
'error_msg' => '请选择数据编码',
|
||||
],
|
||||
[
|
||||
'checked_type' => 'empty',
|
||||
'key_name' => 'DB_HOST',
|
||||
|
|
|
|||
|
|
@ -8,8 +8,12 @@
|
|||
<h2>数据库信息</h2>
|
||||
<div class="am-alert am-alert-warning am-radius" data-am-alert>
|
||||
<button type="button" class="am-close">×</button>
|
||||
<p class="fs-12">MySQL需 5.6 及以上版本</p>
|
||||
<p class="fs-12">编码格式为 utf8mb4 / utf8mb4_general_ci</p>
|
||||
<p class="fs-12">温馨提示、建议采用utf8mb4</p>
|
||||
{{if !empty($charset_type_list)}}
|
||||
{{foreach $charset_type_list as $v}}
|
||||
<p class="fs-12"> {{$v.charset}}编码、MySQL版本需 {{$v.version}} 及以上版本 ({{$v.collate}})</p>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</div>
|
||||
<form class="am-form am-form-horizontal form-validation" method="post" action="{{:MyUrl('install/index/add')}}" request-type="ajax-url" request-value="{{:MyUrl('install/index/successful')}}" timeout="60000">
|
||||
<div class="am-form-group">
|
||||
|
|
@ -19,6 +23,19 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="am-form-group am-form-select">
|
||||
<label class="am-u-sm-2 am-form-label">数据库编码</label>
|
||||
<div class="am-u-sm-10">
|
||||
<select class="am-input-sm am-radius chosen-select" name="DB_CHARSET" data-validation-message="请选择数据编码" required>
|
||||
{{if !empty($charset_type_list)}}
|
||||
{{foreach $charset_type_list as $v}}
|
||||
<option value="{{$v.charset}}">{{$v.charset}} - {{$v.collate}} (mysql版本>={{$v.version}})</option>
|
||||
{{/foreach}}
|
||||
{{/if}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
<label class="am-u-sm-2 am-form-label">数据库服务器</label>
|
||||
<div class="am-u-sm-10">
|
||||
|
|
|
|||
|
|
@ -9,4 +9,9 @@
|
|||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/jquery/jquery-2.1.0.js"></script>
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/assets/js/amazeui.min.js"></script>
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/js/common.js"></script>
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/install/js/index.js"></script>
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/install/js/index.js"></script>
|
||||
|
||||
<!-- amazeui插件 -->
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/amazeui-switch/amazeui.switch.min.js"></script>
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/amazeui-chosen/amazeui.chosen.min.js"></script>
|
||||
<script type='text/javascript' src="{{$Think.__MY_ROOT_PUBLIC__}}static/common/lib/amazeui-dialog/amazeui.dialog.min.js"></script>
|
||||
|
|
@ -141,6 +141,6 @@ return [
|
|||
// 显示错误信息
|
||||
'show_error_msg' => false,
|
||||
// 异常处理handle类 留空使用 \think\exception\Handle
|
||||
'exception_handle' => '',
|
||||
'exception_handle' => '\\app\\common\\Http',
|
||||
];
|
||||
?>
|
||||
Loading…
Reference in New Issue