You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							283 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							283 lines
						
					
					
						
							10 KiB
						
					
					
				| <?php | |
| /** | |
|  * [Laike System] Copyright (c) 2017-2020 laiketui.com | |
|  * Laike is not a free software, it under the license terms, visited http://www.laiketui.com/ for more details. | |
|  */ | |
| 
 | |
| define('WEB_PATH', str_replace('\\', "/", substr(dirname(__FILE__), 0, strrpos(dirname(__FILE__), 'install')))); | |
| 
 | |
| class step3Action extends Action | |
| { | |
| 
 | |
|     public function execute() | |
|     { | |
| 
 | |
|         $request = $this->getContext()->getRequest(); | |
|         $admin = $request->getParameter('admin'); | |
|         $db = $request->getParameter('db'); | |
|         $step = $this->getContext()->getStorage()->read('step'); | |
| 
 | |
|         if ($step == 2) { | |
|             header("Content-type: text/html;charset=utf-8"); | |
|             echo "<script language='javascript'>" . "alert('环境检测没有通过,请调整环境后重试!');" . "location.href='index.php?action=step2';</script>"; | |
|             return; | |
| 
 | |
|         } else { | |
|             if (!is_array($admin) || empty($admin[0]) || empty($admin[1]) || empty($admin[3])) { | |
|                 header("Content-type: text/html;charset=utf-8"); | |
|                 echo "<script language='javascript'>" . "alert('请填写完整管理员信息!');" . "location.href='index.php?action=step2';</script>"; | |
|                 return; | |
|             } else if ($admin[1] != $admin[2]) { | |
|                 header("Content-type: text/html;charset=utf-8"); | |
|                 echo "<script language='javascript'>" . "alert('确认密码和密码不一致!');" . "location.href='index.php?action=step2';</script>"; | |
|                 return; | |
|             } else { | |
|                 $info = (array)$admin; | |
|                 list($info['username'], $info['password'], $info['repassword'], $info['email']) = $admin; | |
|                 $this->getContext()->getStorage()->write('admin_info', $info); | |
|             } | |
| 
 | |
|             if (!is_array($db) || empty($db[0]) || empty($db[1]) || empty($db[2]) || empty($db[3])) { | |
| 
 | |
|                 header("Content-type: text/html;charset=utf-8"); | |
|                 echo "<script language='javascript'>" . "alert('请填写完整的数据库配置!');" . "location.href='index.php?action=step2';</script>"; | |
|                 return; | |
| 
 | |
|             } else { | |
| 
 | |
|                 $DB = (array)$db; | |
|                 list($DB['type'], $DB['hostname'], $DB['database'], $DB['username'], $DB['password'], $DB['hostport'], $DB['prefix']) = $db; | |
|                 $DB['params']["\PDO::ATTR_PERSISTENT "] = TRUE; | |
|                 $DB['params']["\PDO::ATTR_CASE "] = \PDO::CASE_LOWER; | |
|                 $this->getContext()->getStorage()->write('db_config', $DB); | |
|                 $dbname = $DB['database']; | |
|                 unset($db); | |
| 
 | |
|             } | |
| 
 | |
|         } | |
| 
 | |
|         $url = 'index.php'; | |
| 
 | |
|         $request->setAttribute("url", $url); | |
|         //第一步创建数据库配置文件 | |
|         $res_one = $this->create_database_tab(); | |
|         //连接数据库 | |
|         $db = $this->DB($DB['hostname'], $DB['username'], $DB['password'], $DB['hostport']); | |
|         //检测mysql版本 | |
|         $mysql_server_info = $db->server_info; | |
|         $mysql_version = substr($mysql_server_info, 0, strrpos($mysql_server_info, ".")); | |
| 
 | |
|         if ($mysql_version < 5.5) { | |
|             $_SESSION['install_error'] = true; | |
|             header("Content-type: text/html;charset=utf-8"); | |
|             echo "<script language='javascript'>alert('您的mysql版本低于5.5,请调整环境后重试!');location.href='index.php?action=step2';</script>"; | |
|             return; | |
|             exit; | |
|         } | |
| 
 | |
|         //第二步创建数据库 | |
|         $this->create_database($DB['database'], $db); | |
|         //第三步创建数据表 | |
|         $this->create_db_tables($DB['prefix'], $db, $DB['database']); | |
|         //最后添加管理员 | |
|         $this->insert_member($db, $DB['prefix'], $info); | |
|         $_SESSION['install_step'] = '3'; | |
| 
 | |
|         return View::INPUT; | |
| 
 | |
|     } | |
| 
 | |
|     public function getDefaultView() | |
|     { | |
|         $request = $this->getContext()->getRequest(); | |
|         $admin = $request->getParameter('admin'); | |
|         if (!is_array($admin) || empty($admin[0]) || empty($admin[1]) || empty($admin[3])) { | |
| 
 | |
|             header("Content-type: text/html;charset=utf-8"); | |
|             echo "<script language='javascript'>" . "alert('请填写完整管理员信息!');" . "location.href='index.php?action=step2';</script>"; | |
|             return; | |
| 
 | |
|         } | |
|         return View::INPUT; | |
| 
 | |
|     } | |
| 
 | |
|     public function getRequestMethods() | |
|     { | |
|         return Request::POST; | |
| 
 | |
|     } | |
| 
 | |
|     public function test() | |
|     { | |
| 
 | |
|         $request = $this->getContext()->getRequest(); | |
|         // 获取输入的用户名 | |
|         $servername = trim(strtolower($request->getParameter("localhost"))); | |
|         $username = trim(strtolower($request->getParameter("user"))); | |
|         $password = trim(strtolower($request->getParameter("password"))); | |
|         $db = new mysqli($servername, $username, $password); | |
|         if ($db->connect_error) { | |
|             echo 0; | |
|         } else { | |
|             echo 1; | |
|         } | |
|         exit; | |
|     } | |
| 
 | |
|     function show_log($msg, $class = '') | |
|     { | |
| 
 | |
|         echo "<script type='text/javascript'>show_log('$msg', '$class')</script>"; | |
|         @flush(); | |
|         @ob_flush(); | |
|     } | |
| 
 | |
|     public function DB($servername, $username, $password, $hostport) | |
|     { | |
|         if ($hostport != '3306') { | |
|             $servername = $servername . ":" . $hostport; | |
|         } | |
|         $db = new mysqli($servername, $username, $password); | |
|         if ($db->connect_error) { | |
|             header("Content-type: text/html;charset=utf-8"); | |
|             echo "<script language='javascript'>" . "alert('数据库连接失败,有可能密码错误或者数据库没有访问权限!');" . "location.href='index.php?action=step2';</script>"; | |
|             return; | |
|             exit; | |
|         } else { | |
|             return $db; | |
|         } | |
| 
 | |
|     } | |
| 
 | |
|     //第一步创建数据库配置文件 | |
|  | |
|     function create_database_tab() | |
|     { | |
| 
 | |
|         $db_config = $this->getContext()->getStorage()->read('db_config'); | |
| 
 | |
|         if (is_array($db_config)) { | |
|             //读取配置内容 | |
|             unset($db_config['params']); | |
|             $conf = file_get_contents(WEB_PATH . 'data/database.tpl'); | |
|             //替换配置项 | |
|             foreach ($db_config as $name => $value) { | |
|                 $conf = str_replace("[{$name}]", $value, $conf); | |
|             } | |
| 
 | |
|             //创建数据库连接文件 | |
|             if (file_put_contents(WEB_PATH . 'LKT/webapp/config/db_config.php', $conf)) { | |
|                 file_put_contents(WEB_PATH . 'install/webapp/config/db_config.php', $conf); | |
|                 return true; | |
|             } else { | |
|                 $type = true; | |
|                 $_SESSION['install_error'] = $type; | |
|             } | |
| 
 | |
|         } else { | |
| 
 | |
|             return false; | |
| 
 | |
|         } | |
| 
 | |
|     } | |
| 
 | |
|     //第二步创建数据库 | |
|  | |
|     public function create_database($database, $db) | |
|     { | |
| 
 | |
|         $conn = $db; | |
|         // 检测连接 | |
|         if ($conn->connect_error) { | |
|             die("连接失败: " . $conn->connect_error); | |
|         } | |
|         $sql = "CREATE DATABASE `$database` CHARACTER SET utf8 COLLATE utf8_general_ci "; | |
|         $r = $conn->query($sql); | |
|         $conn->query("set names utf8"); | |
|         if ($r) { | |
|             return true; | |
|         } else { | |
|             $sqp_drop = "DROP database $database;"; | |
|             $_drop = $conn->query($sqp_drop); | |
|             $rrr = $conn->query($sql); | |
|             return $rrr; | |
|         } | |
| 
 | |
|     } | |
| 
 | |
|     function create_db_tables($prefix = '', $db, $database) | |
|     { | |
| 
 | |
|         //读取SQL文件 | |
|         $sql_use = "use $database"; | |
|         $db->query($sql_use); | |
|         $this->show_log(WEB_PATH . 'data/install.sql'); | |
|         $sql = file_get_contents(WEB_PATH . 'data/install.sql'); | |
|         $sql = str_replace("\r", "\n", $sql); | |
|         $sql = explode(";\n", $sql); | |
|         $orginal = "lkt_"; | |
|         $sql = str_replace(" `{$orginal}", " `{$prefix}", $sql); | |
|         $tables_num = 0; | |
| 
 | |
|         //开始安装 | |
|         $this->show_log('开始安装数据库...'); | |
|         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); | |
|                 $tables_num++; | |
|                 $msg = "创建数据表{$name}"; | |
| 
 | |
|                 if (false !== $db->query($value)) { | |
|                     $this->show_log($msg . '...成功'); | |
|                 } else { | |
|                     $this->show_log($value . '...失败!'); | |
|                 } | |
| 
 | |
|             } else { | |
|                 $db->query($value); | |
|             } | |
| 
 | |
|         } | |
| 
 | |
|         //查询表的数量 | |
|         $sql = "select count(*) as num from information_schema.tables where table_schema='$database'"; | |
|         $obj = mysqli_query($db, $sql); | |
|         $database_tn = 0; | |
|         while ($row = mysqli_fetch_assoc($obj)) { | |
|             $database_tn = $row['num']; | |
|         } | |
| 
 | |
|         if ($database_tn != $tables_num) { | |
|             header("Content-type: text/html;charset=utf-8"); | |
|             echo "<script language='javascript'>" . "alert('创建数据失败!');" . "location.href='index.php?action=step2';</script>"; | |
|             return; | |
|             exit; | |
|         } | |
| 
 | |
|     } | |
| 
 | |
|     function insert_member($db, $prefix, $admin) | |
|     { | |
| 
 | |
|         $password = md5($admin['password']); | |
|         $sql = "INSERT INTO `lkt_admin` (`id`, `sid`, `name`, `password`, `admin_type`, `permission`, `role`, `status`, `add_date`, `recycle`, `nickname`, `birthday`, `sex`, `tel`, `token`, `ip`) VALUES ('1', '0', '{$admin['username']}', '{$password}', '1', NULL, '1', NULL, '2018-09-25 16:55:26', '0', 'lkt', '1936-2-1', '2', '86453408', '', '127.0.0.1')"; | |
|         //执行sql | |
|         $db->query($sql); | |
|         $request = $this->getContext()->getRequest(); | |
|         $url = $request->getParameter('url'); | |
|         $domain = $url . '/LKT/index.php?module=api'; | |
|         $uploadImg_domain = $url; | |
|         $sql = "update `{$prefix}config` set domain = '$domain', uploadImg_domain = '$uploadImg_domain',modify_date = CURRENT_TIMESTAMP where id = '1'"; | |
|         $db->query($sql); | |
| 
 | |
|     } | |
| 
 | |
| } | |
| 
 | |
| ?>
 |