📄 正在查看:twcms/install/index.php
1<?php
2/**
3 * (C)2012-2014 twcms.com TongWang Inc.
4 * Author: wuzhaohuan <kongphp@gmail.com>
5 */
6
7version_compare(PHP_VERSION, '5.2.0', '>') || die('require PHP > 5.2.0 !');
8
9define('TWCMS_INST', dirname(__FILE__));
10define('TWCMS_CORE', dirname(TWCMS_INST));
11define('TWCMS_ROOT', dirname(TWCMS_CORE));
12define('APP_NAME', basename(TWCMS_CORE));
13
14error_reporting(0);
15date_default_timezone_set('Asia/Shanghai');
16header('Content-Type: text/html; charset=UTF-8');
17
18// 保护锁
19if(is_file(TWCMS_CORE.'/config/config.inc.php')) {
20 header("HTTP/1.0 404 Not Found");
21 header("Status: 404 Not Found");
22 include TWCMS_INST.'/tpl/lock.php';
23 exit;
24}
25
26include TWCMS_CORE.'/kongphp/base/base.func.php';
27include TWCMS_INST.'/function.php';
28
29$do = isset($_GET['do']) && in_array($_GET['do'], array('license', 'check_env', 'check_db', 'complete')) ? $_GET['do'] : 'license';
30
31if($do == 'license') {
32 include TWCMS_INST.'/tpl/header.php';
33 include TWCMS_INST.'/tpl/license.php';
34 include TWCMS_INST.'/tpl/footer.php';
35}elseif($do == 'check_env') {
36 include TWCMS_INST.'/tpl/header.php';
37 include TWCMS_INST.'/tpl/check_env.php';
38 include TWCMS_INST.'/tpl/footer.php';
39}elseif($do == 'check_db') {
40 include TWCMS_INST.'/tpl/header.php';
41 include TWCMS_INST.'/tpl/check_db.php';
42 include TWCMS_INST.'/tpl/footer.php';
43}elseif($do == 'complete') {
44 include TWCMS_INST.'/tpl/header.php';
45 echo '<div id="cont" class="content"></div><div class="button"></div>';
46 include TWCMS_INST.'/tpl/footer.php';
47
48 if(!isset($_POST['dbhost'])) {
49 js_back('<u>非法访问!</u>');
50 }
51
52 $dbhost = isset($_POST['dbhost']) ? trim($_POST['dbhost']) : '';
53 $dbuser = isset($_POST['dbuser']) ? trim($_POST['dbuser']) : '';
54 $dbpw = isset($_POST['dbpw']) ? trim($_POST['dbpw']) : '';
55 $dbname = isset($_POST['dbname']) ? trim($_POST['dbname']) : '';
56 $charset = 'UTF8';
57 $tablepre = isset($_POST['dbpre']) ? trim($_POST['dbpre']) : '';
58 $adm_user = isset($_POST['adm_user']) ? trim($_POST['adm_user']) : '';
59 $adm_pass = isset($_POST['adm_pass']) ? trim(str_replace(' ', '', $_POST['adm_pass'])) : '';
60
61 if(empty($dbhost)) {
62 js_back('<u>数据库主机不能为空!</u>');
63 }elseif(empty($dbuser)) {
64 js_back('<u>数据库用户名不能为空!</u>');
65 }elseif(!preg_match('/^\w+$/', $dbname)) {
66 js_back('<u>数据库名不正确!</u>');
67 }elseif(empty($tablepre)) {
68 js_back('<u>数据库表前辍不能为空!</u>');
69 }elseif(!preg_match('/^\w+$/', $tablepre)) {
70 js_back('<u>数据库表前辍不正确!</u>');
71 }elseif(empty($adm_user)) {
72 js_back('<u>创始人用户名不能为空!</u>');
73 }elseif(strlen($adm_pass) < 8) {
74 js_back('<u>密码不能小于8位数!</u>');
75 }
76
77 // 连接数据库
78 if(!function_exists('mysql_connect')) {
79 js_back('函数 mysql_connect() 不存在,请检查 php.ini 是否加载了 mysql 模块!');
80 }
81 $link = mysql_connect($dbhost, $dbuser, $dbpw);
82 if(!$link) {
83 js_back('MySQL 主机、账号或密码不正确!<br><u>'.mysql_error().'</u>');
84 }
85
86 try{
87 mysql_select_db($dbname, $link);
88 if(mysql_errno() == 1049) {
89 mysql_query("CREATE DATABASE $dbname DEFAULT CHARACTER SET UTF8");
90 if(!mysql_select_db($dbname, $link)) {
91 js_back('自动创建数据库失败鸟!您的MySQL账号是否有权限创建数据库?<br><u>'.mysql_error().'</u>');
92 }
93 }
94 // 为防止意外,让用户自己做选择
95 if(empty($_POST['cover'])) {
96 $query = mysql_query("SHOW TABLES FROM $dbname");
97 while($row = mysql_fetch_row($query)) {
98 if(preg_match("#^{$tablepre}#", $row[0])) {
99 js_back('<u>发现有相同表前缀,请返回选择“覆盖安装”或“修改表前缀”。</u>');
100 }
101 }
102 }
103
104 // 设置编码
105 mysql_query("SET names utf8, sql_mode=''");
106 }catch(Exception $e) {
107 js_back('<u>未知错误!</u><br><u>'.mysql_error().'</u>');
108 }
109
110 // 创建数据表
111 $file = TWCMS_INST.'/data/mysql.sql';
112 if(!is_file($file)) {
113 js_back('mysql.sql 文件 <u>丢失</u>');
114 }
115 $s = file_get_contents($file);
116 $sqls = split_sql($s, $tablepre);
117 foreach($sqls as $sql) {
118 $sql = str_replace("\n", '', trim($sql));
119 $ret = mysql_query($sql);
120 if(substr($sql, 0, 6) == 'CREATE') {
121 $name = preg_replace("/CREATE TABLE ([`a-z0-9_]+) .*/is", "\\1", $sql);
122
123 if($ret) {
124 js_show('创建数据表 '.$name.' ... <i>成功</i>');
125 }else{
126 js_back('创建数据表 '.$name.' ... <u>失败</u> (您的数据库没有写权限?)<br><u>'.mysql_error().'</u>');
127 }
128 }
129
130 if(!$ret) {
131 js_back('创建数据表失败</u> (您的数据库没有权限?)<br><u>'.mysql_error().'</u>');
132 }
133 }
134
135 // 创建基本数据
136 $file = TWCMS_INST.'/data/mysql_data.sql';
137 if(!is_file($file)) {
138 js_back('mysql_data.sql 文件 <u>丢失</u>');
139 }
140 $s = file_get_contents($file);
141 $sqls = split_sql($s, $tablepre);
142 $ret = true;
143 foreach($sqls as $sql) {
144 $sql = str_replace("\n", '', trim($sql));
145 mysql_query($sql) || $ret = false;
146 }
147 js_show('创建基本数据 ... '.($ret ? '<i>成功</i>' : '<u>失败</u>'));
148 if(!$ret) exit;
149
150 // 创建创始人
151 $salt = random(16, 3, '0123456789abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+<>,.'); // 增加破解难度
152 $password = md5(md5($adm_pass).$salt);
153 $ip = ip2long(ip());
154 $time = time();
155 $ret = mysql_query("INSERT INTO `{$tablepre}user` (`uid`, `username`, `password`, `salt`, `groupid`, `email`, `homepage`, `intro`, `regip`, `regdate`, `loginip`, `logindate`, `lastip`, `lastdate`, `contents`, `comments`, `logins`) VALUES (1, '{$adm_user}', '{$password}', '{$salt}', 1, '', '', '', {$ip}, {$time}, 0, 0, 0, 0, 0, 0, 0);");
156 js_show('创建创始人 ... '.($ret ? '<i>成功</i>' : '<u>失败</u>'));
157 if(!$ret) exit;
158
159 // 初始网站设置
160 $webdomain = empty($_SERVER['HTTP_HOST']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'];
161 $webdir = get_webdir();
162 $weburl = 'http://'.$webdomain.$webdir;
163 $cfg = array(
164 'webname' => '通王CMS',
165 'webdomain' => $webdomain,
166 'webdir' => $webdir,
167 'webmail' => 'admin@qq.com',
168 'tongji' => '<script type="text/javascript">var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cscript src=\'" + _bdhmProtocol + "hm.baidu.com/h.js%3F948dba1e5d873b9c1f1c77078c521c89\' type=\'text/javascript\'%3E%3C/script%3E"));</script>',
169 'beian' => '京ICP备20121225号',
170 'seo_title' => '让建站变的更简单!',
171 'seo_keywords' => '通王CMS,TWCMS',
172 'seo_description' => '通王CMS,让建站变的更简单!',
173
174 'link_show' => '{cate_alias}/{id}.html',
175 'link_show_type' => 2,
176 'link_show_end' => '.html',
177 'link_cate_page_pre' => '/page_',
178 'link_cate_page_end' => '.html',
179 'link_cate_end' => '/',
180 'link_tag_pre' => 'tag/',
181 'link_tag_end' => '.html',
182 'link_comment_pre' => 'comment/',
183 'link_comment_end' => '.html',
184 'link_index_end' => '.html',
185
186 'up_img_ext' => 'jpg,jpeg,gif,png',
187 'up_img_max_size' => '3074',
188 'up_file_ext' => 'zip,gz,rar,iso,xsl,doc,ppt,wps',
189 'up_file_max_size' => '10240',
190 'thumb_article_w' => 163,
191 'thumb_article_h' => 124,
192 'thumb_product_w' => 150,
193 'thumb_product_h' => 150,
194 'thumb_photo_w' => 150,
195 'thumb_photo_h' => 150,
196 'thumb_type' => 2,
197 'thumb_quality' => 90,
198 'watermark_pos' => 9,
199 'watermark_pct' => 90,
200 );
201 $settings = addslashes(json_encode($cfg));
202 $ret = mysql_query("INSERT INTO {$tablepre}kv SET k='cfg',v='{$settings}',expiry='0'");
203 js_show('初始网站设置 ... '.($ret ? '<i>成功</i>' : '<u>失败</u>'));
204 if(!$ret) exit;
205
206 // 清空缓存
207 $runtime = TWCMS_CORE.'/runtime/';
208 $file = $runtime.'_runtime.php';
209 if(is_file($file)) {
210 $ret = unlink($runtime.'_runtime.php');
211 js_show('清除 runtime/_runtime.php ... <i>完成</i>');
212 }
213 $tpmdir = array('_control', '_model', '_view');
214 foreach($tpmdir as $dir) {
215 $ret = _rmdir($runtime.'twcms'.$dir);
216 js_show('清除 runtime/twcms'.$dir.' ... <i>完成</i>');
217 }
218 foreach($tpmdir as $dir) {
219 if($dir == '_model') continue;
220 $ret = _rmdir($runtime.'twcms_admin'.$dir);
221 js_show('清除 runtime/twcms_admin'.$dir.' ... <i>完成</i>');
222 }
223
224 // 初始插件配置
225 $file = TWCMS_INST.'/plugin.sample.php';
226 if(!is_file($file)) {
227 js_back('plugin.sample.php 文件 <u>丢失</u>');
228 }
229 $ret = file_put_contents(TWCMS_CORE.'/config/plugin.inc.php', file_get_contents($file));
230 js_show('设置 config/plugin.inc.php ... '.($ret ? '<i>成功</i>' : '<u>失败</u>'));
231 if(!$ret) exit;
232
233 // 生成配置文件
234 $file = TWCMS_INST.'/config.sample.php';
235 if(!is_file($file)) {
236 js_back('config.sample.php 文件 <u>丢失</u>');
237 }
238 $auth_key = random(32, 3);
239 $cookie_pre = 'tw'.random(5, 3).'_';
240
241 $s = file_get_contents($file);
242 $s = preg_replace("#'auth_key' => '\w*',#", "'auth_key' => '".addslashes($auth_key)."',", $s);
243 $s = preg_replace("#'cookie_pre' => '\w*',#", "'cookie_pre' => '".addslashes($cookie_pre)."',", $s);
244 $s = preg_replace("#'host' => '\w*',#", "'host' => '".addslashes($dbhost)."',", $s);
245 $s = preg_replace("#'user' => '\w*',#", "'user' => '".addslashes($dbuser)."',", $s);
246 $s = preg_replace("#'password' => '\w*',#", "'password' => '".addslashes($dbpw)."',", $s);
247 $s = preg_replace("#'name' => '\w*',#", "'name' => '".addslashes($dbname)."',", $s);
248 $s = preg_replace("#'tablepre' => '\w*',#", "'tablepre' => '".addslashes($tablepre)."',", $s);
249 $s = preg_replace("#'pre' => '\w*',#", "'pre' => '".addslashes($tablepre)."',", $s);
250
251 $ret = file_put_contents(TWCMS_CORE.'/config/config.inc.php', $s);
252 js_show('设置 config/config.inc.php ... '.($ret ? '<i>成功</i>' : '<u>失败</u>'));
253 if(!$ret) exit;
254
255 // 安装结束提示
256 $s = '<div class="end"><h3>恭喜!您的网站已安装完成啦!</h3><p>';
257 $s .= '首页地址:<a href="'.$weburl.'" target="_blank">'.$weburl.'</a><br>';
258 $s .= '后台地址:<a href="'.$weburl.'admin/" target="_blank">'.$weburl.'admin/</a><br>';
259 $s .= '用户名:'.$adm_user.' <br>密 码:'.$adm_pass.'<br>';
260 $s .= '亲,请牢记以上信息,您可以登陆后台修改密码及网站设置。^_^</p></div>';
261 js_show($s);
262
263 // 统计一下安装数
264 echo '<script type="text/javascript" src="http://www.twcms.com/app/?install='.$webdomain.'"></script>';
265}
266