'安装许可协议',
'2' => '运行环境检测',
'3' => '安装参数设置',
'4' => '安装详细过程',
'5' => '安装完成',
);
$step = isset($_GET['step']) ? $_GET['step'] : 1;
//当前安装步骤
$step_html = '';
foreach ($steps as $key => $value) {
$current = $key == $step? 'current':'';
$step_html .= '
'.$key.''.$value.'';
}
//安装页面
switch ($step) {
//安装许可协议
case '1':
$license = file_get_contents('./license.txt');
include ("./templates/1.php");
break;
//运行环境检测
case '2':
$server = array(
//操作系统
'os' => php_uname(),
//PHP版本
'php' => $phpversion,
);
$error = 0;
//php版本
if ($phpversion>=$config['php']) {
$server['php'] = '√ 支持';
} else {
$server['php'] = '√ '.$phpversion;
$error++;
}
//上传限制
if (ini_get('file_uploads')) {
$server['uploadSize'] = '√ ' . ini_get('upload_max_filesize');
} else {
$server['uploadSize'] = '√禁止上传';
}
//session
if (function_exists('session_start')) {
$server['session'] = '√ 支持';
} else {
$server['session'] = '√ 不支持';
$error++;
}
//需要读写权限的目录
$folder = $config['dirAccess'];
$install_path = str_replace('\\','/',getcwd()).'/';
$site_path = str_replace('Install/', '', $install_path);
include ("./templates/2.php");
$_SESSION['INSTALLSTATUS'] = $error == 0?'SUCCESS':$error;
break;
//安装参数设置
case '3':
verify(3);
//测试数据库链接
if (isset($_GET['testdbpwd'])) {
empty($_POST['dbhost'])?alert(0,'数据库服务器地址不能为空!','dbhost'):'';
empty($_POST['dbuser'])?alert(0,'数据库用户名不能为空!','dbuser'):'';
empty($_POST['dbname'])?alert(0,'数据库名不能为空!','dbname'):'';
empty($_POST['dbport'])?alert(0,'数据库端口不能为空!','dbport'):'';
$dbHost = $_POST['dbhost'] . ':' . $_POST['dbport'];
$mysqli = new mysqli($dbHost, $_POST['dbuser'], $_POST['dbpw']);
if(!$mysqli->server_info) {
alert(0,'数据库链接失败!','dbpw');
}else{
alert(1,'数据库链接成功!','dbpw');
}
$mysqli->close();
}
//域名+路径
$domain = empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
if ((int) $_SERVER['SERVER_PORT'] != 80) {
$domain .= ":" . $_SERVER['SERVER_PORT'];
}
$scriptName = !empty($_SERVER["REQUEST_URI"]) ? $scriptName = $_SERVER["REQUEST_URI"] : $scriptName = $_SERVER["PHP_SELF"];
$rootpath = preg_replace("/\/(I|i)nstall\/index\.php(.*)$/", "", $scriptName);
$domain = $domain . $rootpath;
include ("./templates/3.php");
break;
//安装详细过程
case '4':
if (!isset($_GET['install'])){
switch (INSTALLTYPE){
case 'SAE':
// 服务器地址
$_POST['dbhost'] = SAE_MYSQL_HOST_M;
// 端口
$_POST['dbport'] = SAE_MYSQL_PORT;
// 数据库名
$_POST['dbname'] = SAE_MYSQL_DB;
// 用户名
$_POST['dbuser'] = SAE_MYSQL_USER;
// 密码
$_POST['dbpw'] = SAE_MYSQL_PASS;
break;
case 'BAE':
// 服务器地址
$_POST['dbhost'] = HTTP_BAE_ENV_ADDR_SQL_IP;
// 端口
$_POST['dbport'] = HTTP_BAE_ENV_ADDR_SQL_PORT;
// 用户名
$_POST['dbuser'] = HTTP_BAE_ENV_SK;
// 密码
$_POST['dbpw'] = SAE_MYSQL_PASS;
break;
}
}
verify(4);
if (intval($_GET['install'])) {
dataVerify();
//关闭特殊字符提交处理到数据库
//设置时区
date_default_timezone_set('PRC');
//当前进行的数据库操作
$n = intval($_GET['n']);
$arr = array();
//数据库服务器地址
$dbHost = trim($_POST['dbhost']);
//数据库端口
$dbPort = trim($_POST['dbport']);
//数据库名
$dbName = trim($_POST['dbname']);
$dbHost = empty($dbPort) || $dbPort == 3306 ? $dbHost : $dbHost . ':' . $dbPort;
//数据库用户名
$dbUser = trim($_POST['dbuser']);
//数据库密码
$dbPwd = trim($_POST['dbpw']);
//表前缀
$dbPrefix = empty($_POST['dbprefix']) ? 'db_' : trim($_POST['dbprefix']);
//链接数据库
$mysqli = new mysqli($dbHost, $dbUser, $dbPwd);
//导入政采商品
$sitegoods = trim($_POST['sitegoods']);
// 获取错误信息
$error=$mysqli->connect_error;
if (!is_null($error)) {
alert(0,'数据库链接失败!');
}
// 设置字符集
$mysqli->query("SET NAMES 'utf8'");
if ($mysqli->server_info < 5.0) {
alert(0,'请将您的mysql升级到5.0以上');
}
// 创建数据库并选中
if(!$mysqli->select_db($dbName)){
$create_sql='CREATE DATABASE IF NOT EXISTS '.$dbName.' DEFAULT CHARACTER SET utf8;';
$mysqli->query($create_sql) or alert(0,'创建数据库失败');
$mysqli->select_db($dbName);
}
// 导入sql数据并创建表
$sqldata = file_get_contents('./'.$config['sqlFileName']);
if(empty($sqldata)){
alert(0,'数据库文件不能为空!');
}
$sql_array=preg_split("/;[\r\n]+/", str_replace($config['dbPrefix'],$dbPrefix,$sqldata));
$counts = count($sql_array);
for ($i = $n; $i < $counts; $i++) {
$sql = trim($sql_array[$i]);
if (strstr($sql, 'CREATE TABLE')) {
preg_match('/CREATE TABLE `([^ ]*)`/', $sql, $matches);
$mysqli->query($sql_array[$i]);
$info = '√创建数据表' . $matches[1] . ',完成!'.date('Y-m-d H:i:s').' ';
$i++;
alert(1,$info,$i);
}else{
if(!empty($sql)){
$mysqli->query($sql);
}
}
}
//处理
$data = include './'.$config['handleFile'];
$_SESSION['INSTALLOK'] = $data['status']?1:0;
alert($data['status'],$data['info']);
}
include ("./templates/4.php");
break;
//安装完成
case '5':
verify(5);
include ("./templates/5.php");
//安装完成,生成.lock文件
if(isset($_SESSION['INSTALLOK']) && $_SESSION['INSTALLOK'] == 1){
filewrite($config['installFile']);
}
unset($_SESSION);
break;
}
/**
* 错误提示html
*/
function get_tip_html($info){
return ''.$info.'
';
}
//返回提示信息
function alert($status,$info,$type = 0){
exit(json_encode(array('status'=>$status,'info'=>$info,'type'=>$type)));
}
function verify($step = 3){
if($step >= 3){
//未运行环境检测,跳转到安装许可协议页面
if(!isset($_SESSION['INSTALLSTATUS'])){
header('location:./index.php');
exit();
}
//运行环境检测存在错误,返回运行环境检测
if($_SESSION['INSTALLSTATUS'] != 'SUCCESS'){
header('location:./index.php?step=2');
exit();
}
}
if($step == 4){
//未提交数据
if(empty($_POST)){
header('location:./index.php?step=3');
exit();
}
}
if($step >= 5){
//数据库未写入完成
if(!isset($_SESSION['INSTALLOK'])){
header('location:./index.php?step=4');
exit();
}
}
}
function dataVerify(){
empty($_POST['dbhost'])?alert(0,'数据库服务器不能为空!'):'';
empty($_POST['dbport'])?alert(0,'数据库端口不能为空!'):'';
empty($_POST['dbuser'])?alert(0,'数据库用户名不能为空!'):'';
empty($_POST['dbname'])?alert(0,'数据库名不能为空!'):'';
empty($_POST['dbprefix'])?alert(0,'数据库表前缀不能为空!'):'';
empty($_POST['manager'])?alert(0,'管理员帐号不能为空!'):'';
empty($_POST['manager_pwd'])?alert(0,'管理员密码不能为空!'):'';
}
/**
* 判断目录是否可写
*/
function testwrite($d) {
$tfile = "_test.txt";
$fp = fopen($d . "/" . $tfile, "w");
if (!$fp) {
return false;
}
fclose($fp);
$rs = unlink($d . "/" . $tfile);
if ($rs) {
return true;
}
return false;
}
/**
* 创建目录
*/
function dir_create($path, $mode = 0777) {
if (is_dir($path)) {
return TRUE;
}
mkdir($path, $mode, true);
chmod($path, $mode);
}
/**
* 数据库语句解析
* @param $sql 数据库
* @param $newTablePre 新的前缀
* @param $oldTablePre 旧的前缀
*/
function sql_split($sql, $newTablePre, $oldTablePre) {
//前缀替换
if ($newTablePre != $oldTablePre){
$sql = str_replace($oldTablePre, $newTablePre, $sql);
}
$sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=utf8", $sql);
$sql = str_replace("\r", "\n", $sql);
$ret = array();
$queriesarray = explode(";\n", trim($sql));
unset($sql);
foreach ($queriesarray as $k=>$query) {
$ret[$k] = '';
$queries = explode("\n", trim($query));
$queries = array_filter($queries);
foreach ($queries as $query) {
$str1 = substr($query, 0, 1);
if ($str1 != '#' && $str1 != '-')
$ret[$k] .= $query;
}
}
return $ret;
}
/**
* 产生随机字符串
* 产生一个指定长度的随机字符串,并返回给用户
* @access public
* @param int $len 产生字符串的位数
* @return string
*/
function genRandomString($len = 6) {
$chars = array(
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
"3", "4", "5", "6", "7", "8", "9", '!', '@', '#', '$',
'%', '^', '&', '*', '(', ')'
);
$charsLen = count($chars) - 1;
shuffle($chars); // 将数组打乱
$output = "";
for ($i = 0; $i < $len; $i++) {
$output .= $chars[mt_rand(0, $charsLen)];
}
return $output;
}
/**
* 获取客户端IP地址
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @return mixed
*/
function get_client_ip($type = 0) {
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown',$arr);
if(false !== $pos) unset($arr[$pos]);
$ip = trim($arr[0]);
}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法验证
$long = sprintf("%u",ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}