<?php
/**
 * [UQcms System] Copyright uqcms.com
 * QQ: 2200631718
 * Author: gj.name
 * This is NOT a freeware
*/  header("Content-type: text/html; charset=utf-8"); if(PHP_VERSION<5.3) exit("请使用PHP5.3及以上版本"); $step = isset($_GET['step'])?$_GET['step']:'1'; $install_file = 'data/install.lock'; if(file_exists($install_file)){ if($step != '5'){ } } $db_file = 'data/dbconfig.php'; $web_secrit_file = 'data/web_secrit.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>UQCMS云商-系统安装</title>
<script type="text/javascript" src="public/js/jquery.min.js"></script>
<style type="text/css">
*{font-family:"microsoft yahei"; font-size:12px; margin:0; padding:0; border:0; }
body{ background:#0972A3; }
.main{ width:800px; margin:0 auto; }
.maincon{ width:100%; background:#F3FBFE; margin:50px 0; float:left; } 
.head{ width:100%; background:#30ACE6; color:#fff; background: linear-gradient(to top right,#2C9ED3, #35B6F3, #35B6F3); border-bottom:1px solid #efefef; padding:25px 0 23px; float:left; }
.head .logo{ margin:10px 0 0 50px; float:left; }
.head .lname{ font-size:26px; margin:5px 0 0 20px; border-left:1px solid #58C5F8; padding:0 0 5px 20px; float:left; }
.head .rhelp a{ text-decoration:none; color:#fff; font-size:12px; margin:15px 20px 0 0; float:right; }
.head .rhelp a i{ background:#fff; width:15px; height:15px; color:#30ACE6; text-align:center; line-height:15px; border-radius:15px; margin:2px 5px 0 0; float: left; }

.navigation{ width:80%; padding:20px 10% 18px; border-bottom:1px solid #eee; float: left; }
.navigation span{ width:25%; float:left; }
.navigation span i{ width:30px; height:30px; text-align:center; line-height:30px; font-size:22px; background:#ddd; border-radius:30px; color:#999; font-family: "宋体"; float:left; } 
.navigation span.ch i{ width:30px; height:30px; background:#30ACE6; color:#fff; float:left; } 
.navigation span.ch{ color:#3399FF; }
.navigation span em{ font-size:18px; font-style:inherit; padding:5px 0 0 10px; float:left; } 

input[type="text"]{ border:1px solid #ddd; padding:6px; border-radius:2px; }
input[type="password"]{ border:1px solid #ddd; padding:6px; border-radius:2px; } 
.action{ margin:0 80px; padding:20px 0 30px; float:left; } 
.action .name{ width:100%; color:#333; padding:10px 0; font-size:14px; color:#1080B5; float:left; }
table.etable tr td{ padding:3px 0; }
table.etable tr td:first-child{ text-align:right; color:#888; padding-right:10px; }
table.etable tr td span{ padding:6px 0 0 10px; color:#666666; float:left; }
table.etable tr td input{ float:left; } 
table.ltable{ border-bottom:1px solid #efefef; padding-bottom:10px; margin-bottom:20px; }
table.ltable thead tr th{ padding:3px 0; text-align:left; background:#E9F8FE; padding:10px 0 10px 10px; color:#0A88CA;  }
table.ltable tbody tr td{ padding:10px 0 10px 10px; } 
 
.es{ width:680px; margin:0 0 0 55px; float:left; } 
.agreenBox{ width:680px; color:#555; margin:10px 50px 10px; border:1px solid #ddd; padding:10px; height:300px; overflow-y:scroll; border:px solid #efefef; float:left; }
.agreenBox p{ color:#555; } 
.endbox{ width:600px; margin:30px 90px 50px; padding:10px; border:px solid #efefef; float:left; }
.endbox .h3{ width:100%; font-size:22px; float:left; }
.endbox .h4{ width:100%; padding:10px 0; color:#666; float:left; }
.endbox .shpx{ width:100%; padding:10px 0; float:left; }
.endbox .shpx a{ border:1px solid #FF9900; background:#FF9900; color:#fff; text-decoration:none; border-radius:1px; padding:10px 20px; margin-right:20px; float:left; }
.next{ width:100%; text-align:center; margin:10px 0 20px; float:left; }
span.error{ color:#FF0000; font-weight:bold; } 

/*协议*/
.ament{ background:#fff; border:1px solid #efefef; margin-top:30px; margin-bottom:20px; float:left; }
.ament p{ color:#888; line-height:22px; }
.ament strong{ color:#333; } 
input.submit{ padding:10px 20px; background:#FF9900; margin-bottom:10px; color:#6B3C03; font-size:16px; }
input.submit:disabled{ background:#ddd; }
</style>
</head>
<body>
<div class="main">
<div class="maincon">
	<div class="head">
		<div class="logo"><img src="./admin/templates/public/images/admin_logo.png"/></div> 
		<div class="lname">系统安装</div> 
		<div class="rhelp"><a href="http://www.uqcms.com/product/show.html" target="_blank"><i>？</i>安装帮助</a></div>
	</div>
<?php if($step >= '2'){ ?>
		<div class="navigation">
			<span <?php if($step >= '2'){ echo 'class="ch"';} ?>><i>√</i><em>环境检测</em></span>
			<span <?php if($step >= '3'){ echo 'class="ch"';} ?>><i>√</i><em>配置参数</em></span>
			<span <?php if($step >= '4'){ echo 'class="ch"';} ?>><i>√</i><em>安装执行</em></span>
			<span <?php if($step >= '5'){ echo 'class="ch"';} ?>><i>√</i><em>安装完成</em></span>
		</div> 
<?php  } ?>
<?php
 if($step == '2'){ $err = 0; $phpv = @ phpversion(); $os = PHP_OS; $server = $_SERVER["SERVER_SOFTWARE"]; $host = (empty($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_HOST"] : $_SERVER["SERVER_ADDR"]); $name = $_SERVER["SERVER_NAME"]; ?> 
	<form action="?step=3" method="post">
		<div class="es" style="padding:20px 0 0 0;">
			<table width="100%" class="ltable">
				<thead>
					<tr>
						<th width="220">项目</th>
						<th width="180">当前配置</th>
						<th width="120">参考配置</th> 
						<th>支持功能</th> 
					</tr>
				</thead>
				<tbody>
					<tr>
						<td>操作系统</td>
						<td><?php echo PHP_OS; ?></td>
						<td>不限制</td>
						<td>推荐Linux</td>
					</tr>
					<tr>
						<td>服务器环境</td>
						<td><?php echo $_SERVER["SERVER_SOFTWARE"]; ?></td>
						<td>apache2.0/nginx1.6以上</td>
						<td>推荐nginx</td>
					</tr>
					<tr>
						<td>PHP版本</td>
						<td><?php if(version_compare(PHP_VERSION, '5.3.0')>=0){ echo @phpversion(); }else{ echo '<span class="error">版本过低</span>'; $err++; } ?></td>
						<td>5.3.0以上</td>
						<td>运行条件</td>
					</tr>
					<tr>
						<td>附件上传</td>
						<td><?php echo ini_get('max_execution_time'); ?>M</td>
						<td>不低于2M</td>
						<td>上传本地文件</td>
					</tr>
					<tr>
						<td>GD库</td>
						<td><?php if(function_exists('imagecreate')){ $a = gd_info(); echo $a['GD Version']; }else{ echo '<span class="error">未启用</span>'; $err++; } ?></td>
						<td>1.0</td>
						<td>图形验证码</td>
					</tr>
					<tr>
						<td>mysqli</td>
						<td><?php if(function_exists('mysqli_connect')){ echo '支持'; }else{ echo '<span class="error">未启用</span>'; $err++; } ?></td>
						<td>启用</td>
						<td>数据储存</td>
					</tr> 
				</tbody> 
			</table>
			<?php
 $folder = array( 'data', 'temp', 'temp/templates_c/admin', 'temp/templates_c/home', 'temp/templates_c/member', 'temp/templates_c/wap' ); ?>
			<table class="ltable" width="100%">
				<thead>
					<tr>
						<th width="220">目录文件</th> 
						<th width="180">写入权限</th> 
						<th width="120">读取权限</th> 
						<th>权限要求</th> 
					</tr>
				</thead>
				<tbody>
				<?php foreach($folder as $dir){ ?>
					<tr>
						<td><?php echo $dir; ?></td>
						<td>
						<?php  if(is_writable($dir)){ echo '&radic;可写' ; }else{ echo '<span class="error">&radic;不可写</span>'; $err++; } ?></td>
						<td>
						<?php  if(is_readable($dir)){ echo '&radic;可读' ; }else{ echo '<span class="error">&radic;不可读</span>'; $err++; } ?></td> 
						<td>&radic;可读&radic;可写</td> 
					 </tr>
				<?php } ?>
				</tbody> 
			</table>
		</div>
		<div class="next" style="padding:0 0 20px 0;">
			<input type="submit" name="agreen" class="submit" <?php if($err >= '1'){ echo 'disabled="disabled"'; } ?> value="下一步"/> 
		</div>
<?php }elseif($step == '3'){ ?>
		<div class="action">
			<form action="?step=4" method="post">
				<div class="name">连接数据库</div>
				<table class="etable" width="100%"> 
					<tr><td width="180">地址：</td>	<td><input type="text" size="32" name="db_host" id="host" value="127.0.0.1"/></td></tr> 
					<tr><td>用户名：</td>					<td><input type="text" size="32" name="db_user" id="user" value="root"/></td></tr>
					<tr><td>密码：</td>						<td><input type="text" size="32" name="db_pass" id="pass" value=""/></td></tr>
					<tr><td>数据库：</td>					<td><input type="text" size="32" name="db_name" id="name" value=""/></td></tr> 
					<tr><td>端口：</td>						<td><input type="text" size="32" name="port" id="port" value="3306"/><span>默认3306</span></td></tr>
					<tr><td>安装测试数据：</td>			<td><input name="demo_data" type="checkbox" value="1"></td></tr>  
				</table> 
				<div class="name">管理员账号</div>
				<table class="etable">
					<tr><td width="180">管理员账号：</td>	<td><input type="text" size="32" name="admin" id="admin_user" value="admin"/></td></tr>
					<tr><td>管理员密码：</td>				<td><input type="text" size="32" name="admin_pass" id="admin_pass" value=""/></td></tr>
					<tr><td>确认新密码：</td>				<td><input type="text" size="32" name="admin_repass" id="admin_pass2" value=""/></td></tr>  
					<tr><td>&nbsp;</td>						<td><input type="submit" name="install" class="submit" value="提交安装"/></td></tr>
				</table>
			</form>
		</div> 
	<script type="text/javascript">
		$("form").submit(function(){
			var host = $('#host').val();
			if(host == ''){ alert('数据库地址不能为空'); return false; }
			var user = $('#user').val();
			if(user == ''){ alert('用户名不能为空');  return false;}
			var pass = $('#pass').val();
			if(pass == ''){ alert('连接密码地址不能为空'); return false;}
			var name = $('#name').val();
			if(name == ''){ alert('数据库名称不能为空'); return false;}
			
			if($('#admin_user').val() == ''){ alert('管理员账户不能为空'); return false;}
			var admin_pass = $('#admin_pass').val();
			var admin_pass2 = $('#admin_pass2').val();
			if(admin_pass == ''){ alert('管理员密码不能为空'); return false;}
			if(admin_pass2 == ''){ alert('管理员重复密码不能为空'); return false;}
			if(admin_pass != admin_pass2){
				alert('管理员两次密码输入不一致');
				return false;
			}
		});
	</script>
<?php }elseif($step == '4'){ ?>
		<div class="agreenBox" style="margin-top:30px; margin-bottom:30px;" id="installing">&nbsp;</div> 
<?php }elseif($step == '5'){ $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $index_url = dirname($url); ?>
		<div class="endbox">
			<div class="h3">恭喜你！安装完成，进入后台管理</div>
			<div class="h4">为了您站点的安全，安装完成后请删除install.php文件，防止重复安装。</div>
			<div class="shpx">
				<span><a href="<?php echo $index_url; ?>">网站首页</a></span>
				<span><a href="admin.php">后台管理</a></span>
			</div>	
		</div>
<?php }else{ ?> 
		<form action="?step=2" method="post"> 
			<div class="agreenBox ament">
				<h2>公共版授权协议，适用于全部UQCMS云商用户</h2>
				<p>版权所有&copy;2016，UQCMS.com 保留所有权利。 <br />
				UQCMS云商 的官方网址是： <a href="http://www.uqcms.com" target="_blank">www.uqcms.com</a>  <br />
				为了使你正确并合法的使用本软件，请你在使用前务必阅读清楚下面的协议条款：<br />
				<strong>一、本授权协议适用且仅适用于UQCMS云商公版系统，UQCMS云商官方对本授权协议的最终解释权。</strong><br />
				<strong>二、协议许可的权利</strong> <br />
				1、您可以在完全遵守本最终用户授权协议的基础上，将本软件应用于商业用途。 <br />
				2、您可以在协议规定的约束和限制范围内修改 UQCMS源代码或界面风格以适应您的网站要求。 <br />
				3、您拥有使用本软件构建的网站全部内容所有权，并独立承担与这些内容的相关法律义务。<br />		  4、获得商业授权之后，您可以将本软件应用于商业用途，同时依据所购买的授权类型中确定的技术支持内容，自购买时刻起，在技术支持期限内拥有通过指定的方式获得指定范围内的技术支持服务。商业授权用户享有反映和提出意见的权力，相关意见将被作为首要考虑，但没有一定被采纳的承诺或保证。 <br />	
				<strong>三、协议规定的约束和限制</strong> <br />		    
				1、未获商业授权之前，不得将本软件用于任何用途。购买商业授权请登录 www.uqcms.com 了解最新说明。<br />	
				2、未经官方许可，不得对本软件或与之关联的商业授权进行出租、出售、抵押或发放子许可证。<br />	
				3、不管你的网站是否整体使用 UQCMS ，还是部份栏目使用UQCMS，在你使用了UQCMS的网站主页上必须加上UQCMS官方网址(www.UQCMS.com)的链接。<br />	
				4、未经官方许可，禁止在UQCMS云商的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。<br />	
				5、如果您未能遵守本协议的条款，您的授权将被终止，所被许可的权利将被收回，并承担相应法律责任。 <br />	
				<strong>四、有限担保和免责声明</strong> <br />
				1、本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。 	<br />		  2、用户出于自愿而使用本软件，您必须了解使用本软件的风险，在尚未购买产品技术服务之前，我们不承诺对免费用户提供任何形式的技术支持、使用担保，也不承担任何因使用本软件而产生问题的相关责任。 <br />	3、电子文本形式的授权协议如同双方书面签署的协议一样，具有完全的和等同的法律效力。您一旦开始确认本协议并安装UQCMS，即被视为完全理解并接受本协议的各项条款，在享有上述条款授予的权力的同时，受到相关的约束和限制。协议许可范围以外的行为，将直接违反本授权协议并构成侵权，我们有权随时终止授权，责令停止损害，并保留追究相关责任的权力。<br />	
				4、如果本软件带有其它软件的整合API示范例子包，这些文件版权不属于本软件官方，并且这些文件是没经过授权发布的，请参考相关软件的使用许可合法的使用。<br />	
				协议发布时间： 2017年7月20日	<br />
				</p>
			</div>
			<div class="next"><input type="submit" name="agreen" class="submit" value="同意并开始安装"/></div>
		</form> 
<?php  } ?> 
</div>
</div>
</body>
</html>
<script type="text/javascript">
function updateProgress(id){
	$('#installing').append('<p>'+id+'</p>');
	var div = document.getElementById('installing');
	div.scrollTop = div.scrollHeight;
}
</script>
<?php
function randstr($length=6) { $hash=''; $chars= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz@#!~?:-='; $max=strlen($chars)-1; mt_srand((double)microtime()*1000000); for($i=0;$i<$length;$i++) { $hash.=$chars[mt_rand(0,$max)]; } return $hash; } function error_msg($msg){ echo "<script type=\"text/javascript\">updateProgress('".$msg."');</script>"; exit; } if(isset($_POST['install'])){ set_time_limit(0); ob_flush(); flush(); $db_host = !empty($_POST['db_host'])?trim($_POST['db_host']):error_msg('数据库地址不能为空'); $db_user = !empty($_POST['db_user'])?trim($_POST['db_user']):error_msg('数据库用户名不能为空'); $db_pass = !empty($_POST['db_pass'])?trim($_POST['db_pass']):error_msg('数据库密码不能为空'); $db_name = !empty($_POST['db_name'])?trim($_POST['db_name']):error_msg('数据库不能为空'); $db_port = !empty($_POST['db_port'])?trim($_POST['db_port']):3306; $demo_data = !empty($_POST['demo_data'])?1:0; $db_pre = 'uq_'; $data_path = './data/sql/install.sql'; $conn = @mysqli_connect($db_host, $db_user, $db_pass); if(!$conn){ error_msg('<h3>连接数据库错误，请核对信息是否正确</h3>'); } if(mysqli_get_server_info($conn) < 5.5) error_msg ("安装失败，请使用mysql5以上版本"); if(!mysqli_select_db($conn, $db_name)){ if(!mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `".$db_name."` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")){ error_msg('数据库不存在，也无权限创建数据库。'); } mysqli_select_db($conn, $db_name); } mysqli_query($conn, "SET names UTF8"); $aquery = mysqli_query($conn, "show engines;"); while($eg_arr = mysqli_fetch_array($aquery)){ if((($eg_arr['Engine'] == 'InnoDB') && ($eg_arr['Support'] == 'DEFAULT')) || (($eg_arr['Engine'] == 'InnoDB') && ($eg_arr['Support'] == 'YES')) ) { $support_innodb = true; } } if(!isset($support_innodb)){ error_msg('数据库不支持innodb，请调试MySqL支持innodb再安装。 '); } $tbquery = mysqli_query($conn, "SHOW TABLES FROM ".$db_name); while($arr = mysqli_fetch_row($tbquery)){ $tables[] = $arr; } if(isset($tables)){ if(count($tables) > 0){ error_msg('数据库不是空数据库。请清空或者修改数据库重新提交安装。'); } } $sql_file = 'data/sql/sql_install.sql'; $sql_data = file_get_contents($sql_file); preg_match_all('/CREATE(.*);/iUs', $sql_data, $array); foreach($array[0] as $v){ $exec_sql = str_replace('\n\r','',$v); $query = mysqli_query($conn, $exec_sql); if($query){ preg_match('/CREATE TABLE `([^ ]*)`/', $exec_sql, $matches); $table = str_replace($db_pre, '', $matches[1]) ; echo "<script type=\"text/javascript\">updateProgress('创建表：".$table." ... 成功');</script>"; ob_flush(); flush(); }else{ file_put_contents('data/sql/install_error.sql', $exec_sql, FILE_APPEND); } } $mysqlarr = array( 'mysql'=>array( 'DB_HOST'=>$db_host, 'DB_USER'=>$db_user, 'DB_PWD'=>$db_pass, 'DB_NAME'=>$db_name, 'DB_PRE'=>$db_pre ) ); $file_con = "<?php \n return ".var_export($mysqlarr, TRUE).";\n ?>"; file_put_contents($db_file, $file_con); echo "<script type=\"text/javascript\">updateProgress('创建数据库连接文件 ... 成功');</script>"; ob_flush(); flush(); if($demo_data == 1){ $sql_cfg = 'data/sql/sql_demo.sql'; }else{ $sql_cfg = 'data/sql/sql_config.sql'; } $sql_cfg = file_get_contents($sql_cfg); preg_match_all('/INSERT(.*)(?:\));/iUs', $sql_cfg, $array2); foreach($array2[0] as $v){ $exec_sql = str_replace('\n\r','',$v); $query = mysqli_query($conn, $exec_sql); if($query){ echo "<script type=\"text/javascript\">updateProgress('导入配置文件 ... 成功');</script>"; ob_flush(); flush(); }else{ file_put_contents('data/sql/install_error.sql', $exec_sql, FILE_APPEND); } } $admin = isset($_POST['admin'])?trim($_POST['admin']):error_msg('管理员用户名不能为空'); $admin_pass = isset($_POST['admin_pass'])?$_POST['admin_pass']:error_msg('管理员密码不能为空'); $web_secrit = randstr(12); $content = '<?'."php\n"; $content .= "return '{$web_secrit}'; "; $fp = @fopen($web_secrit_file, 'wb+'); if(!$fp){ error_msg('打开文件失败,请确保data目录可读。'); } if(!@fwrite($fp, trim($content))){ error_msg('写入文件失败，请确保data目录可写'); } @fclose($fp); $randoms = substr(md5($admin_pass), 5, 10); $admin_pwd = md5(md5($admin_pass).$randoms.$web_secrit); $query_admin = mysqli_query($conn, "INSERT INTO `uq_admin` (`aid`, `type`, `username`, `password`, `email`, `mobile`, `power`, `rank`, `status`, `addtime`) VALUES (1, '1', '".$admin."', '".$admin_pwd."', NULL, NULL, '0', '0', '1', '".time()."');"); if($query_admin){ echo "<script type=\"text/javascript\">updateProgress('管理员账号创建成功 ... 成功');</script>"; ob_flush(); flush(); } file_put_contents('data/install.lock', '1'); echo "<script type=\"text/javascript\">updateProgress('安装结束,正在跳转...');</script>"; ob_flush(); flush(); sleep(2); echo "<script type=\"text/javascript\"> window.location.href='install.php?step=5'; </script>"; } ?>

