'安装许可协议', '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]; }