commit | author | age
|
601f79
|
1 |
<?php |
G |
2 |
/** |
|
3 |
* [WeEngine System] Copyright (c) 2014 WE7.CC |
|
4 |
* WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details. |
|
5 |
*/ |
|
6 |
error_reporting(E_ALL ^ E_NOTICE); |
|
7 |
@set_time_limit(0); |
|
8 |
|
|
9 |
ob_start(); |
|
10 |
define('IA_ROOT', str_replace("\\",'/', dirname(__FILE__))); |
|
11 |
define('APP_URL', 'http://v2.addons.we7.cc/web/'); |
|
12 |
define('APP_STORE_URL', 'http://v2.addons.we7.cc/web'); |
|
13 |
define('APP_STORE_API', 'http://v2.addons.we7.cc/api.php'); |
|
14 |
if($_GET['res']) { |
|
15 |
$res = $_GET['res']; |
|
16 |
$reses = tpl_resources(); |
|
17 |
if(array_key_exists($res, $reses)) { |
|
18 |
if($res == 'css') { |
|
19 |
header('content-type:text/css'); |
|
20 |
} else { |
|
21 |
header('content-type:image/png'); |
|
22 |
} |
|
23 |
echo base64_decode($reses[$res]); |
|
24 |
exit(); |
|
25 |
} |
|
26 |
} |
|
27 |
|
|
28 |
$actions = array('license', 'env', 'db', 'finish'); |
|
29 |
$action = $_COOKIE['action']; |
|
30 |
$action = in_array($action, $actions) ? $action : 'license'; |
|
31 |
$ispost = strtolower($_SERVER['REQUEST_METHOD']) == 'post'; |
|
32 |
|
|
33 |
if(file_exists(IA_ROOT . '/data/install.lock') && $action != 'finish') { |
|
34 |
header('location: ./index.php'); |
|
35 |
exit; |
|
36 |
} |
|
37 |
header('content-type: text/html; charset=utf-8'); |
|
38 |
if($action == 'license') { |
|
39 |
if($ispost) { |
|
40 |
setcookie('action', 'env'); |
|
41 |
header('location: ?refresh'); |
|
42 |
exit; |
|
43 |
} |
|
44 |
tpl_install_license(); |
|
45 |
} |
|
46 |
if($action == 'env') { |
|
47 |
if($ispost) { |
|
48 |
setcookie('action', $_POST['do'] == 'continue' ? 'db' : 'license'); |
|
49 |
header('location: ?refresh'); |
|
50 |
exit; |
|
51 |
} |
|
52 |
$ret = array(); |
|
53 |
$ret['server']['os']['value'] = php_uname(); |
|
54 |
if(PHP_SHLIB_SUFFIX == 'dll') { |
|
55 |
$ret['server']['os']['remark'] = '建议使用 Linux 系统以提升程序性能'; |
|
56 |
$ret['server']['os']['class'] = 'warning'; |
|
57 |
} |
|
58 |
$ret['server']['sapi']['value'] = $_SERVER['SERVER_SOFTWARE']; |
|
59 |
if(PHP_SAPI == 'isapi') { |
|
60 |
$ret['server']['sapi']['remark'] = '建议使用 Apache 或 Nginx 以提升程序性能'; |
|
61 |
$ret['server']['sapi']['class'] = 'warning'; |
|
62 |
} |
|
63 |
$ret['server']['php']['value'] = PHP_VERSION; |
|
64 |
$ret['server']['dir']['value'] = IA_ROOT; |
|
65 |
if(function_exists('disk_free_space')) { |
|
66 |
$ret['server']['disk']['value'] = floor(disk_free_space(IA_ROOT) / (1024*1024)).'M'; |
|
67 |
} else { |
|
68 |
$ret['server']['disk']['value'] = 'unknow'; |
|
69 |
} |
|
70 |
$ret['server']['upload']['value'] = @ini_get('file_uploads') ? ini_get('upload_max_filesize') : 'unknow'; |
|
71 |
|
|
72 |
$ret['php']['version']['value'] = PHP_VERSION; |
|
73 |
$ret['php']['version']['class'] = 'success'; |
|
74 |
if(version_compare(PHP_VERSION, '5.3.0') == -1) { |
|
75 |
$ret['php']['version']['class'] = 'danger'; |
|
76 |
$ret['php']['version']['failed'] = true; |
|
77 |
$ret['php']['version']['remark'] = 'PHP版本必须为 5.3.0 以上. <a href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58062">详情</a>'; |
|
78 |
} |
|
79 |
|
|
80 |
$ret['php']['pdo']['ok'] = extension_loaded('pdo') && extension_loaded('pdo_mysql'); |
|
81 |
if($ret['php']['pdo']['ok']) { |
|
82 |
$ret['php']['pdo']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
83 |
$ret['php']['pdo']['class'] = 'success'; |
|
84 |
} else { |
|
85 |
$ret['php']['pdo']['failed'] = true; |
|
86 |
$ret['php']['pdo']['value'] = '<span class="glyphicon glyphicon-remove text-warning"></span>'; |
|
87 |
$ret['php']['pdo']['class'] = 'warning'; |
|
88 |
$ret['php']['pdo']['remark'] = '您的PHP环境不支持PDO, 请开启此扩展. <a target="_blank" href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58074">详情</a>'; |
|
89 |
} |
|
90 |
|
|
91 |
$ret['php']['fopen']['ok'] = @ini_get('allow_url_fopen') && function_exists('fsockopen'); |
|
92 |
if($ret['php']['fopen']['ok']) { |
|
93 |
$ret['php']['fopen']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
94 |
} else { |
|
95 |
$ret['php']['fopen']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
96 |
} |
|
97 |
|
|
98 |
$ret['php']['curl']['ok'] = extension_loaded('curl') && function_exists('curl_init'); |
|
99 |
if($ret['php']['curl']['ok']) { |
|
100 |
$ret['php']['curl']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
101 |
$ret['php']['curl']['class'] = 'success'; |
|
102 |
} else { |
|
103 |
$ret['php']['curl']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
104 |
$ret['php']['curl']['class'] = 'danger'; |
|
105 |
$ret['php']['curl']['remark'] = '您的PHP环境不支持cURL, 也不支持 allow_url_fopen, 系统无法正常运行. <a target="_blank" href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58086">详情</a>'; |
|
106 |
$ret['php']['curl']['failed'] = true; |
|
107 |
} |
|
108 |
|
|
109 |
$ret['php']['ssl']['ok'] = extension_loaded('openssl'); |
|
110 |
if($ret['php']['ssl']['ok']) { |
|
111 |
$ret['php']['ssl']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
112 |
$ret['php']['ssl']['class'] = 'success'; |
|
113 |
} else { |
|
114 |
$ret['php']['ssl']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
115 |
$ret['php']['ssl']['class'] = 'danger'; |
|
116 |
$ret['php']['ssl']['failed'] = true; |
|
117 |
$ret['php']['ssl']['remark'] = '没有启用OpenSSL, 将无法访问公众平台的接口, 系统无法正常运行. <a target="_blank" href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58109">详情</a>'; |
|
118 |
} |
|
119 |
|
|
120 |
$ret['php']['gd']['ok'] = extension_loaded('gd'); |
|
121 |
if($ret['php']['gd']['ok']) { |
|
122 |
$ret['php']['gd']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
123 |
$ret['php']['gd']['class'] = 'success'; |
|
124 |
} else { |
|
125 |
$ret['php']['gd']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
126 |
$ret['php']['gd']['class'] = 'danger'; |
|
127 |
$ret['php']['gd']['failed'] = true; |
|
128 |
$ret['php']['gd']['remark'] = '没有启用GD, 将无法正常上传和压缩图片, 系统无法正常运行. <a target="_blank" href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58110">详情</a>'; |
|
129 |
} |
|
130 |
|
|
131 |
$ret['php']['dom']['ok'] = class_exists('DOMDocument'); |
|
132 |
if($ret['php']['dom']['ok']) { |
|
133 |
$ret['php']['dom']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
134 |
$ret['php']['dom']['class'] = 'success'; |
|
135 |
} else { |
|
136 |
$ret['php']['dom']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
137 |
$ret['php']['dom']['class'] = 'danger'; |
|
138 |
$ret['php']['dom']['failed'] = true; |
|
139 |
$ret['php']['dom']['remark'] = '没有启用DOMDocument, 将无法正常安装使用模块, 系统无法正常运行. <a target="_blank" href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58111">详情</a>'; |
|
140 |
} |
|
141 |
|
|
142 |
$ret['php']['session']['ok'] = ini_get('session.auto_start'); |
|
143 |
if($ret['php']['session']['ok'] == 0 || strtolower($ret['php']['session']['ok']) == 'off') { |
|
144 |
$ret['php']['session']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
145 |
$ret['php']['session']['class'] = 'success'; |
|
146 |
} else { |
|
147 |
$ret['php']['session']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
148 |
$ret['php']['session']['class'] = 'danger'; |
|
149 |
$ret['php']['session']['failed'] = true; |
|
150 |
$ret['php']['session']['remark'] = '系统session.auto_start开启, 将无法正常注册会员, 系统无法正常运行. <a target="_blank" href="http://bbs.we7.cc/forum.php?mod=redirect&goto=findpost&ptid=3564&pid=58111">详情</a>'; |
|
151 |
} |
|
152 |
|
|
153 |
$ret['php']['asp_tags']['ok'] = ini_get('asp_tags'); |
|
154 |
if(empty($ret['php']['asp_tags']['ok']) || strtolower($ret['php']['asp_tags']['ok']) == 'off') { |
|
155 |
$ret['php']['asp_tags']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
156 |
$ret['php']['asp_tags']['class'] = 'success'; |
|
157 |
} else { |
|
158 |
$ret['php']['asp_tags']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
159 |
$ret['php']['asp_tags']['class'] = 'danger'; |
|
160 |
$ret['php']['asp_tags']['failed'] = true; |
|
161 |
$ret['php']['asp_tags']['remark'] = '请禁用可以使用ASP 风格的标志,配置php.ini中asp_tags = Off'; |
|
162 |
} |
|
163 |
|
|
164 |
$ret['write']['root']['ok'] = local_writeable(IA_ROOT . '/'); |
|
165 |
if($ret['write']['root']['ok']) { |
|
166 |
$ret['write']['root']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
167 |
$ret['write']['root']['class'] = 'success'; |
|
168 |
} else { |
|
169 |
$ret['write']['root']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
170 |
$ret['write']['root']['class'] = 'danger'; |
|
171 |
$ret['write']['root']['failed'] = true; |
|
172 |
$ret['write']['root']['remark'] = '本地目录无法写入, 将无法使用自动更新功能, 系统无法正常运行. <a href="http://bbs.we7.cc/">详情</a>'; |
|
173 |
} |
|
174 |
$ret['write']['data']['ok'] = local_writeable(IA_ROOT . '/data'); |
|
175 |
if($ret['write']['data']['ok']) { |
|
176 |
$ret['write']['data']['value'] = '<span class="glyphicon glyphicon-ok text-success"></span>'; |
|
177 |
$ret['write']['data']['class'] = 'success'; |
|
178 |
} else { |
|
179 |
$ret['write']['data']['value'] = '<span class="glyphicon glyphicon-remove text-danger"></span>'; |
|
180 |
$ret['write']['data']['class'] = 'danger'; |
|
181 |
$ret['write']['data']['failed'] = true; |
|
182 |
$ret['write']['data']['remark'] = 'data目录无法写入, 将无法写入配置文件, 系统无法正常安装. '; |
|
183 |
} |
|
184 |
|
|
185 |
$ret['continue'] = true; |
|
186 |
foreach($ret['php'] as $opt) { |
|
187 |
if($opt['failed']) { |
|
188 |
$ret['continue'] = false; |
|
189 |
break; |
|
190 |
} |
|
191 |
} |
|
192 |
if($ret['write']['failed']) { |
|
193 |
$ret['continue'] = false; |
|
194 |
} |
|
195 |
tpl_install_env($ret); |
|
196 |
} |
|
197 |
if($action == 'db') { |
|
198 |
if($ispost) { |
|
199 |
if($_POST['do'] != 'continue') { |
|
200 |
setcookie('action', 'env'); |
|
201 |
header('location: ?refresh'); |
|
202 |
exit(); |
|
203 |
} |
|
204 |
$family = $_POST['family'] == 'x' ? 'x' : 'v'; |
|
205 |
$db = $_POST['db']; |
|
206 |
$user = $_POST['user']; |
|
207 |
try { |
|
208 |
$pieces = explode(':', $db['server']); |
|
209 |
$db['server'] = $pieces[0]; |
|
210 |
$db['port'] = !empty($pieces[1]) ? $pieces[1] : '3306'; |
|
211 |
$link = new PDO("mysql:host={$db['server']};port={$db['port']}", $db['username'], $db['password']); // dns可以没有dbname |
|
212 |
$link->exec("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary"); |
|
213 |
$link->exec("SET sql_mode=''"); |
|
214 |
if ($link->errorCode() != '00000') { |
|
215 |
$errorInfo = $link->errorInfo(); |
|
216 |
$error = $errorInfo[2]; |
|
217 |
} else { |
|
218 |
$statement = $link->query("SHOW DATABASES LIKE '{$db['name']}';"); |
|
219 |
$fetch = $statement->fetch(); |
|
220 |
if (empty($fetch)){ |
|
221 |
if (substr($link->getAttribute(PDO::ATTR_SERVER_VERSION), 0, 3) > '4.1') { |
|
222 |
$link->query("CREATE DATABASE IF NOT EXISTS `{$db['name']}` DEFAULT CHARACTER SET utf8"); |
|
223 |
} else { |
|
224 |
$link->query("CREATE DATABASE IF NOT EXISTS `{$db['name']}`"); |
|
225 |
} |
|
226 |
} |
|
227 |
$statement = $link->query("SHOW DATABASES LIKE '{$db['name']}';"); |
|
228 |
$fetch = $statement->fetch(); |
|
229 |
if (empty($fetch)) { |
|
230 |
$error .= "数据库不存在且创建数据库失败. <br />"; |
|
231 |
} |
|
232 |
if ($link->errorCode() != '00000') { |
|
233 |
$errorInfo = $link->errorInfo(); |
|
234 |
$error .= $errorInfo[2]; |
|
235 |
} |
|
236 |
} |
|
237 |
} catch (PDOException $e) { |
|
238 |
$error = $e->getMessage(); |
|
239 |
if (strpos($error, 'Access denied for user') !== false) { |
|
240 |
$error = '您的数据库访问用户名或是密码错误. <br />'; |
|
241 |
} else { |
|
242 |
$error = iconv('gbk', 'utf8', $error); |
|
243 |
} |
|
244 |
} |
|
245 |
if(empty($error)) { |
|
246 |
$link->exec("USE {$db['name']}"); |
|
247 |
$statement = $link->query("SHOW TABLES LIKE '{$db['prefix']}%';"); |
|
248 |
if ($statement->fetch()) { |
|
249 |
$error = '您的数据库不为空,请重新建立数据库或是清空该数据库或更改表前缀!'; |
|
250 |
} |
|
251 |
} |
|
252 |
if(empty($error)) { |
|
253 |
$config = local_config(); |
|
254 |
$cookiepre = local_salt(4) . '_'; |
|
255 |
$authkey = local_salt(8); |
|
256 |
$config = str_replace(array( |
|
257 |
'{db-server}', '{db-username}', '{db-password}', '{db-port}', '{db-name}', '{db-tablepre}', '{cookiepre}', '{authkey}', '{attachdir}' |
|
258 |
), array( |
|
259 |
$db['server'], $db['username'], $db['password'], $db['port'], $db['name'], $db['prefix'], $cookiepre, $authkey, 'attachment' |
|
260 |
), $config); |
|
261 |
$verfile = IA_ROOT . '/framework/version.inc.php'; |
|
262 |
$dbfile = IA_ROOT . '/data/db.php'; |
|
263 |
|
|
264 |
if($_POST['type'] == 'remote') { |
|
265 |
$link = NULL; |
|
266 |
$ins = remote_install(); |
|
267 |
if(empty($ins)) { |
|
268 |
die('<script type="text/javascript">alert("连接不到服务器, 请稍后重试!");history.back();</script>'); |
|
269 |
} |
|
270 |
if($ins == 'error') { |
|
271 |
die('<script type="text/javascript">alert("版本错误,请确认是否为微擎最新版安装文件!");history.back();</script>'); |
|
272 |
} |
|
273 |
|
|
274 |
$link = new PDO("mysql:dbname={$db['name']};host={$db['server']};port={$db['port']}", $db['username'], $db['password']); |
|
275 |
$link->exec("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary"); |
|
276 |
$link->exec("SET sql_mode=''"); |
|
277 |
|
|
278 |
$tmpfile = IA_ROOT . '/we7source.tmp'; |
|
279 |
file_put_contents($tmpfile, $ins); |
|
280 |
|
|
281 |
$zip = new ZipArchive; |
|
282 |
$res = $zip->open($tmpfile); |
|
283 |
|
|
284 |
if ($res === TRUE) { |
|
285 |
$zip->extractTo(IA_ROOT); |
|
286 |
$zip->close(); |
|
287 |
} else { |
|
288 |
die('<script type="text/javascript">alert("安装失败,请确认当前目录是否有写入权限!");history.back();</script>'); |
|
289 |
} |
|
290 |
unlink($tmpfile); |
|
291 |
} |
|
292 |
|
|
293 |
if(file_exists(IA_ROOT . '/index.php') && is_dir(IA_ROOT . '/web') && file_exists($verfile) && file_exists($dbfile)) { |
|
294 |
$dat = require $dbfile; |
|
295 |
if(empty($dat) || !is_array($dat)) { |
|
296 |
die('<script type="text/javascript">alert("安装包不正确, 数据安装脚本缺失.");history.back();</script>'); |
|
297 |
} |
|
298 |
foreach($dat['schemas'] as $schema) { |
|
299 |
$sql = local_create_sql($schema); |
|
300 |
local_run($sql); |
|
301 |
} |
|
302 |
foreach($dat['datas'] as $data) { |
|
303 |
local_run($data); |
|
304 |
} |
|
305 |
} else { |
|
306 |
die('<script type="text/javascript">alert("你正在使用本地安装, 但未下载完整安装包, 请从微擎官网下载完整安装包后重试.");history.back();</script>'); |
|
307 |
} |
|
308 |
|
|
309 |
$salt = local_salt(8); |
|
310 |
$password = sha1("{$user['password']}-{$salt}-{$authkey}"); |
|
311 |
$link->exec("INSERT INTO {$db['prefix']}users (username, password, salt, joindate, groupid) VALUES('{$user['username']}', '{$password}', '{$salt}', '" . time() . "', 1)"); |
|
312 |
local_mkdirs(IA_ROOT . '/data'); |
|
313 |
file_put_contents(IA_ROOT . '/data/config.php', $config); |
|
314 |
touch(IA_ROOT . '/data/install.lock'); |
|
315 |
setcookie('action', 'finish'); |
|
316 |
header('location: ?refresh'); |
|
317 |
exit(); |
|
318 |
} |
|
319 |
} |
|
320 |
tpl_install_db($error); |
|
321 |
|
|
322 |
} |
|
323 |
if($action == 'finish') { |
|
324 |
setcookie('action', '', -10); |
|
325 |
$dbfile = IA_ROOT . '/data/db.php'; |
|
326 |
@unlink($dbfile); |
|
327 |
define('IN_SYS', true); |
|
328 |
require IA_ROOT . '/framework/bootstrap.inc.php'; |
|
329 |
require IA_ROOT . '/web/common/bootstrap.sys.inc.php'; |
|
330 |
$_W['uid'] = $_W['isfounder'] = 1; |
|
331 |
load()->web('common'); |
|
332 |
load()->web('template'); |
|
333 |
load()->model('setting'); |
|
334 |
load()->model('cache'); |
|
335 |
|
|
336 |
cache_build_frame_menu(); |
|
337 |
cache_build_setting(); |
|
338 |
cache_build_users_struct(); |
|
339 |
cache_build_module_subscribe_type(); |
|
340 |
tpl_install_finish(); |
|
341 |
} |
|
342 |
|
|
343 |
function local_writeable($dir) { |
|
344 |
$writeable = 0; |
|
345 |
if(!is_dir($dir)) { |
|
346 |
@mkdir($dir, 0777); |
|
347 |
} |
|
348 |
if(is_dir($dir)) { |
|
349 |
if($fp = fopen("$dir/test.txt", 'w')) { |
|
350 |
fclose($fp); |
|
351 |
unlink("$dir/test.txt"); |
|
352 |
$writeable = 1; |
|
353 |
} else { |
|
354 |
$writeable = 0; |
|
355 |
} |
|
356 |
} |
|
357 |
return $writeable; |
|
358 |
} |
|
359 |
|
|
360 |
function local_salt($length = 8) { |
|
361 |
$result = ''; |
|
362 |
while(strlen($result) < $length) { |
|
363 |
$result .= sha1(uniqid('', true)); |
|
364 |
} |
|
365 |
return substr($result, 0, $length); |
|
366 |
} |
|
367 |
|
|
368 |
function local_config() { |
|
369 |
$cfg = <<<EOF |
|
370 |
<?php |
|
371 |
defined('IN_IA') or exit('Access Denied'); |
|
372 |
|
|
373 |
\$config = array(); |
|
374 |
|
|
375 |
\$config['db']['master']['host'] = '{db-server}'; |
|
376 |
\$config['db']['master']['username'] = '{db-username}'; |
|
377 |
\$config['db']['master']['password'] = '{db-password}'; |
|
378 |
\$config['db']['master']['port'] = '{db-port}'; |
|
379 |
\$config['db']['master']['database'] = '{db-name}'; |
|
380 |
\$config['db']['master']['charset'] = 'utf8'; |
|
381 |
\$config['db']['master']['pconnect'] = 0; |
|
382 |
\$config['db']['master']['tablepre'] = '{db-tablepre}'; |
|
383 |
|
|
384 |
\$config['db']['slave_status'] = false; |
|
385 |
\$config['db']['slave']['1']['host'] = ''; |
|
386 |
\$config['db']['slave']['1']['username'] = ''; |
|
387 |
\$config['db']['slave']['1']['password'] = ''; |
|
388 |
\$config['db']['slave']['1']['port'] = '3307'; |
|
389 |
\$config['db']['slave']['1']['database'] = ''; |
|
390 |
\$config['db']['slave']['1']['charset'] = 'utf8'; |
|
391 |
\$config['db']['slave']['1']['pconnect'] = 0; |
|
392 |
\$config['db']['slave']['1']['tablepre'] = 'ims_'; |
|
393 |
\$config['db']['slave']['1']['weight'] = 0; |
|
394 |
|
|
395 |
\$config['db']['common']['slave_except_table'] = array('core_sessions'); |
|
396 |
|
|
397 |
// -------------------------- CONFIG COOKIE --------------------------- // |
|
398 |
\$config['cookie']['pre'] = '{cookiepre}'; |
|
399 |
\$config['cookie']['domain'] = ''; |
|
400 |
\$config['cookie']['path'] = '/'; |
|
401 |
|
|
402 |
// -------------------------- CONFIG SETTING --------------------------- // |
|
403 |
\$config['setting']['charset'] = 'utf-8'; |
|
404 |
\$config['setting']['cache'] = 'mysql'; |
|
405 |
\$config['setting']['timezone'] = 'Asia/Shanghai'; |
|
406 |
\$config['setting']['memory_limit'] = '256M'; |
|
407 |
\$config['setting']['filemode'] = 0644; |
|
408 |
\$config['setting']['authkey'] = '{authkey}'; |
|
409 |
\$config['setting']['founder'] = '1'; |
|
410 |
\$config['setting']['development'] = 0; |
|
411 |
\$config['setting']['referrer'] = 0; |
|
412 |
|
|
413 |
// -------------------------- CONFIG UPLOAD --------------------------- // |
|
414 |
\$config['upload']['image']['extentions'] = array('gif', 'jpg', 'jpeg', 'png'); |
|
415 |
\$config['upload']['image']['limit'] = 5000; |
|
416 |
\$config['upload']['attachdir'] = '{attachdir}'; |
|
417 |
\$config['upload']['audio']['extentions'] = array('mp3'); |
|
418 |
\$config['upload']['audio']['limit'] = 5000; |
|
419 |
|
|
420 |
// -------------------------- CONFIG MEMCACHE --------------------------- // |
|
421 |
\$config['setting']['memcache']['server'] = ''; |
|
422 |
\$config['setting']['memcache']['port'] = 11211; |
|
423 |
\$config['setting']['memcache']['pconnect'] = 1; |
|
424 |
\$config['setting']['memcache']['timeout'] = 30; |
|
425 |
\$config['setting']['memcache']['session'] = 1; |
|
426 |
|
|
427 |
// -------------------------- CONFIG PROXY --------------------------- // |
|
428 |
\$config['setting']['proxy']['host'] = ''; |
|
429 |
\$config['setting']['proxy']['auth'] = ''; |
|
430 |
EOF; |
|
431 |
return trim($cfg); |
|
432 |
} |
|
433 |
|
|
434 |
function local_mkdirs($path) { |
|
435 |
if(!is_dir($path)) { |
|
436 |
local_mkdirs(dirname($path)); |
|
437 |
mkdir($path); |
|
438 |
} |
|
439 |
return is_dir($path); |
|
440 |
} |
|
441 |
|
|
442 |
function local_run($sql) { |
|
443 |
global $link, $db; |
|
444 |
|
|
445 |
if(!isset($sql) || empty($sql)) return; |
|
446 |
|
|
447 |
$sql = str_replace("\r", "\n", str_replace(' ims_', ' '.$db['prefix'], $sql)); |
|
448 |
$sql = str_replace("\r", "\n", str_replace(' `ims_', ' `'.$db['prefix'], $sql)); |
|
449 |
$ret = array(); |
|
450 |
$num = 0; |
|
451 |
foreach(explode(";\n", trim($sql)) as $query) { |
|
452 |
$ret[$num] = ''; |
|
453 |
$queries = explode("\n", trim($query)); |
|
454 |
foreach($queries as $query) { |
|
455 |
$ret[$num] .= (isset($query[0]) && $query[0] == '#') || (isset($query[1]) && isset($query[1]) && $query[0].$query[1] == '--') ? '' : $query; |
|
456 |
} |
|
457 |
$num++; |
|
458 |
} |
|
459 |
unset($sql); |
|
460 |
foreach($ret as $query) { |
|
461 |
$query = trim($query); |
|
462 |
if($query) { |
|
463 |
$link->exec($query); |
|
464 |
if($link->errorCode() != '00000') { |
|
465 |
$errorInfo = $link->errorInfo(); |
|
466 |
echo $errorInfo[0] . ": " . $errorInfo[2] . "<br />"; |
|
467 |
exit($query); |
|
468 |
} |
|
469 |
} |
|
470 |
} |
|
471 |
} |
|
472 |
|
|
473 |
function local_create_sql($schema) { |
|
474 |
$pieces = explode('_', $schema['charset']); |
|
475 |
$charset = $pieces[0]; |
|
476 |
$engine = $schema['engine']; |
|
477 |
$sql = "CREATE TABLE IF NOT EXISTS `{$schema['tablename']}` (\n"; |
|
478 |
foreach ($schema['fields'] as $value) { |
|
479 |
if(!empty($value['length'])) { |
|
480 |
$length = "({$value['length']})"; |
|
481 |
} else { |
|
482 |
$length = ''; |
|
483 |
} |
|
484 |
|
|
485 |
$signed = empty($value['signed']) ? ' unsigned' : ''; |
|
486 |
if(empty($value['null'])) { |
|
487 |
$null = ' NOT NULL'; |
|
488 |
} else { |
|
489 |
$null = ''; |
|
490 |
} |
|
491 |
if(isset($value['default'])) { |
|
492 |
$default = " DEFAULT '" . $value['default'] . "'"; |
|
493 |
} else { |
|
494 |
$default = ''; |
|
495 |
} |
|
496 |
if($value['increment']) { |
|
497 |
$increment = ' AUTO_INCREMENT'; |
|
498 |
} else { |
|
499 |
$increment = ''; |
|
500 |
} |
|
501 |
|
|
502 |
$sql .= "`{$value['name']}` {$value['type']}{$length}{$signed}{$null}{$default}{$increment},\n"; |
|
503 |
} |
|
504 |
foreach ($schema['indexes'] as $value) { |
|
505 |
$fields = implode('`,`', $value['fields']); |
|
506 |
if($value['type'] == 'index') { |
|
507 |
$sql .= "KEY `{$value['name']}` (`{$fields}`),\n"; |
|
508 |
} |
|
509 |
if($value['type'] == 'unique') { |
|
510 |
$sql .= "UNIQUE KEY `{$value['name']}` (`{$fields}`),\n"; |
|
511 |
} |
|
512 |
if($value['type'] == 'primary') { |
|
513 |
$sql .= "PRIMARY KEY (`{$fields}`),\n"; |
|
514 |
} |
|
515 |
} |
|
516 |
$sql = rtrim($sql); |
|
517 |
$sql = rtrim($sql, ','); |
|
518 |
|
|
519 |
$sql .= "\n) ENGINE=$engine DEFAULT CHARSET=$charset;\n\n"; |
|
520 |
return $sql; |
|
521 |
} |
|
522 |
|
|
523 |
function remote_install() { |
|
524 |
global $family; |
|
525 |
$token = ''; |
|
526 |
$pars = array(); |
|
527 |
$pars['host'] = $_SERVER['http_HOST']; |
|
528 |
$pars['version'] = '1.0'; |
|
529 |
$pars['type'] = 'install'; |
|
530 |
$pars['method'] = 'application.install'; |
|
531 |
$url = 'http://v2.addons.we7.cc/gateway.php'; |
|
532 |
$urlset = parse_url($url); |
|
533 |
$cloudip = gethostbyname($urlset['host']); |
|
534 |
$headers[] = "Host: {$urlset['host']}"; |
|
535 |
$ch = curl_init(); |
|
536 |
curl_setopt($ch, CURLOPT_URL, $urlset['scheme'] . '://' . $cloudip . $urlset['path']); |
|
537 |
curl_setopt($ch, CURLOPT_POST, 1); |
|
538 |
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($pars, '', '&')); |
|
539 |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
|
540 |
curl_setopt($ch, CURLOPT_httpHEADER, $headers); |
|
541 |
$content = curl_exec($ch); |
|
542 |
curl_close($ch); |
|
543 |
|
|
544 |
if (empty($content)) { |
|
545 |
return showerror(-1, '获取安装信息失败,可能是由于网络不稳定,请重试。'); |
|
546 |
} |
|
547 |
|
|
548 |
return $content; |
|
549 |
} |
|
550 |
|
|
551 |
function tpl_frame() { |
|
552 |
global $action, $actions; |
|
553 |
$action = $_COOKIE['action']; |
|
554 |
$step = array_search($action, $actions); |
|
555 |
$steps = array(); |
|
556 |
for($i = 0; $i <= $step; $i++) { |
|
557 |
if($i == $step) { |
|
558 |
$steps[$i] = ' list-group-item-info'; |
|
559 |
} else { |
|
560 |
$steps[$i] = ' list-group-item-success'; |
|
561 |
} |
|
562 |
} |
|
563 |
$progress = $step * 25 + 25; |
|
564 |
$content = ob_get_contents(); |
|
565 |
ob_clean(); |
|
566 |
$tpl = <<<EOF |
|
567 |
<!DOCTYPE html> |
|
568 |
<html lang="zh-cn"> |
|
569 |
<head> |
|
570 |
<meta charset="utf-8"> |
|
571 |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|
572 |
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
573 |
<title>安装系统 - 微擎 - 公众平台自助开源引擎</title> |
|
574 |
<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.2.0/css/bootstrap.min.css"> |
|
575 |
<style> |
|
576 |
html,body{font-size:13px;font-family:"Microsoft YaHei UI", "微软雅黑", "宋体";} |
|
577 |
.pager li.previous a{margin-right:10px;} |
|
578 |
.header a{color:#FFF;} |
|
579 |
.header a:hover{color:#428bca;} |
|
580 |
.footer{padding:10px;} |
|
581 |
.footer a,.footer{color:#eee;font-size:14px;line-height:25px;} |
|
582 |
</style> |
|
583 |
<!--[if lt IE 9]> |
|
584 |
<script src="http://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script> |
|
585 |
<script src="http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> |
|
586 |
<![endif]--> |
|
587 |
</head> |
|
588 |
<body style="background-color:#28b0e4;"> |
|
589 |
<div class="container"> |
|
590 |
<div class="header" style="margin:15px auto;"> |
|
591 |
<ul class="nav nav-pills pull-right" role="tablist"> |
|
592 |
<li role="presentation" class="active"><a href="javascript:;">安装微擎系统</a></li> |
|
593 |
<li role="presentation"><a href="http://www.we7.cc">微擎官网</a></li> |
|
594 |
<li role="presentation"><a href="http://bbs.we7.cc">访问论坛</a></li> |
|
595 |
</ul> |
|
596 |
<img src="?res=logo" /> |
|
597 |
</div> |
|
598 |
<div class="row well" style="margin:auto 0;"> |
|
599 |
<div class="col-xs-3"> |
|
600 |
<div class="progress" title="安装进度"> |
|
601 |
<div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="{$progress}" aria-valuemin="0" aria-valuemax="100" style="width: {$progress}%;"> |
|
602 |
{$progress}% |
|
603 |
</div> |
|
604 |
</div> |
|
605 |
<div class="panel panel-default"> |
|
606 |
<div class="panel-heading"> |
|
607 |
安装步骤 |
|
608 |
</div> |
|
609 |
<ul class="list-group"> |
|
610 |
<a href="javascript:;" class="list-group-item{$steps[0]}"><span class="glyphicon glyphicon-copyright-mark"></span> 许可协议</a> |
|
611 |
<a href="javascript:;" class="list-group-item{$steps[1]}"><span class="glyphicon glyphicon-eye-open"></span> 环境监测</a> |
|
612 |
<a href="javascript:;" class="list-group-item{$steps[2]}"><span class="glyphicon glyphicon-cog"></span> 参数配置</a> |
|
613 |
<a href="javascript:;" class="list-group-item{$steps[3]}"><span class="glyphicon glyphicon-ok"></span> 成功</a> |
|
614 |
</ul> |
|
615 |
</div> |
|
616 |
</div> |
|
617 |
<div class="col-xs-9"> |
|
618 |
{$content} |
|
619 |
</div> |
|
620 |
</div> |
|
621 |
<div class="footer" style="margin:15px auto;"> |
|
622 |
<div class="text-center"> |
|
623 |
<a href="http://www.we7.cc">关于微擎</a> <a href="http://bbs.we7.cc">微擎帮助</a> <a href="http://www.we7.cc">购买授权</a> |
|
624 |
</div> |
|
625 |
<div class="text-center"> |
|
626 |
Powered by <a href="http://www.we7.cc"><b>微擎</b></a> v1.81 © 2018 <a href="http://www.we7.cc">www.we7.cc</a> |
|
627 |
</div> |
|
628 |
</div> |
|
629 |
</div> |
|
630 |
<script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> |
|
631 |
<script src="http://cdn.bootcss.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> |
|
632 |
</body> |
|
633 |
</html> |
|
634 |
EOF; |
|
635 |
echo trim($tpl); |
|
636 |
} |
|
637 |
|
|
638 |
function tpl_install_license() { |
|
639 |
echo <<<EOF |
|
640 |
<div class="panel panel-default"> |
|
641 |
<div class="panel-heading">阅读许可协议</div> |
|
642 |
<div class="panel-body" style="overflow-y:scroll;max-height:400px;line-height:20px;"> |
|
643 |
<h3>版权所有 (c)2014,-保留所有权利。 </h3> |
|
644 |
<p> |
|
645 |
感谢您选择微擎 - 微信公众平台自助开源引擎(以下简称WE7,WE7基于 PHP + MySQL的技术开发,全部源码开放。 <br /> |
|
646 |
为了使你正确并合法的使用本软件,请你在使用前务必阅读清楚下面的协议条款: |
|
647 |
</p> |
|
648 |
<p> |
|
649 |
<strong>一、本授权协议适用且仅适用于微擎系统(We7, MicroEngine. 以下简称微擎)任何版本,微擎官方对本授权协议的最终解释权。</strong> |
|
650 |
</p> |
|
651 |
<p> |
|
652 |
<strong>二、协议许可的权利 </strong> |
|
653 |
<ol> |
|
654 |
<li>您可以在完全遵守本最终用户授权协议的基础上,将本软件应用于非商业用途,而不必支付软件版权授权费用。</li> |
|
655 |
<li>您可以在协议规定的约束和限制范围内修改微擎源代码或界面风格以适应您的网站要求。</li> |
|
656 |
<li>您拥有使用本软件构建的网站全部内容所有权,并独立承担与这些内容的相关法律义务。</li> |
|
657 |
<li>获得商业授权之后,您可以将本软件应用于商业用途,同时依据所购买的授权类型中确定的技术支持内容,自购买时刻起,在技术支持期限内拥有通过指定的方式获得指定范围内的技术支持服务。商业授权用户享有反映和提出意见的权力,相关意见将被作为首要考虑,但没有一定被采纳的承诺或保证。</li> |
|
658 |
</ol> |
|
659 |
</p> |
|
660 |
<p> |
|
661 |
<strong>三、协议规定的约束和限制 </strong> |
|
662 |
<ol> |
|
663 |
<li>未获商业授权之前,不得将本软件用于商业用途(包括但不限于企业网站、经营性网站、以营利为目的或实现盈利的网站)。</li> |
|
664 |
<li>未经官方许可,不得对本软件或与之关联的商业授权进行出租、出售、抵押或发放子许可证。</li> |
|
665 |
<li>未经官方许可,禁止在微擎的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。</li> |
|
666 |
<li>如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回,并承担相应法律责任。</li> |
|
667 |
</ol> |
|
668 |
</p> |
|
669 |
<p> |
|
670 |
<strong>四、有限担保和免责声明 </strong> |
|
671 |
<ol> |
|
672 |
<li>本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。</li> |
|
673 |
<li>用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未购买产品技术服务之前,我们不承诺对免费用户提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任。</li> |
|
674 |
<li>电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和等同的法律效力。您一旦开始确认本协议并安装 WE7,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。</li> |
|
675 |
<li>如果本软件带有其它软件的整合API示范例子包,这些文件版权不属于本软件官方,并且这些文件是没经过授权发布的,请参考相关软件的使用许可合法的使用。</li> |
|
676 |
</ol> |
|
677 |
</p> |
|
678 |
</div> |
|
679 |
</div> |
|
680 |
<form class="form-inline" role="form" method="post"> |
|
681 |
<ul class="pager"> |
|
682 |
<li class="pull-left" style="display:block;padding:5px 10px 5px 0;"> |
|
683 |
<div class="checkbox"> |
|
684 |
<label> |
|
685 |
<input type="checkbox"> 我已经阅读并同意此协议 |
|
686 |
</label> |
|
687 |
</div> |
|
688 |
</li> |
|
689 |
<li class="previous"><a href="javascript:;" onclick="if(jQuery(':checkbox:checked').length == 1){jQuery('form')[0].submit();}else{alert('您必须同意软件许可协议才能安装!')};">继续 <span class="glyphicon glyphicon-chevron-right"></span></a></li> |
|
690 |
</ul> |
|
691 |
</form> |
|
692 |
EOF; |
|
693 |
tpl_frame(); |
|
694 |
} |
|
695 |
|
|
696 |
function tpl_install_env($ret = array()) { |
|
697 |
if(empty($ret['continue'])) { |
|
698 |
$continue = '<li class="previous disabled"><a href="javascript:;">请先解决环境问题后继续</a></li>'; |
|
699 |
} else { |
|
700 |
$continue = '<li class="previous"><a href="javascript:;" onclick="$(\'#do\').val(\'continue\');$(\'form\')[0].submit();">继续 <span class="glyphicon glyphicon-chevron-right"></span></a></li>'; |
|
701 |
} |
|
702 |
echo <<<EOF |
|
703 |
<div class="panel panel-default"> |
|
704 |
<div class="panel-heading">服务器信息</div> |
|
705 |
<table class="table table-striped"> |
|
706 |
<tr> |
|
707 |
<th style="width:150px;">参数</th> |
|
708 |
<th>值</th> |
|
709 |
<th></th> |
|
710 |
</tr> |
|
711 |
<tr class="{$ret['server']['os']['class']}"> |
|
712 |
<td>服务器操作系统</td> |
|
713 |
<td>{$ret['server']['os']['value']}</td> |
|
714 |
<td>{$ret['server']['os']['remark']}</td> |
|
715 |
</tr> |
|
716 |
<tr class="{$ret['server']['sapi']['class']}"> |
|
717 |
<td>Web服务器环境</td> |
|
718 |
<td>{$ret['server']['sapi']['value']}</td> |
|
719 |
<td>{$ret['server']['sapi']['remark']}</td> |
|
720 |
</tr> |
|
721 |
<tr class="{$ret['server']['php']['class']}"> |
|
722 |
<td>PHP版本</td> |
|
723 |
<td>{$ret['server']['php']['value']}</td> |
|
724 |
<td>{$ret['server']['php']['remark']}</td> |
|
725 |
</tr> |
|
726 |
<tr class="{$ret['server']['dir']['class']}"> |
|
727 |
<td>程序安装目录</td> |
|
728 |
<td>{$ret['server']['dir']['value']}</td> |
|
729 |
<td>{$ret['server']['dir']['remark']}</td> |
|
730 |
</tr> |
|
731 |
<tr class="{$ret['server']['disk']['class']}"> |
|
732 |
<td>磁盘空间</td> |
|
733 |
<td>{$ret['server']['disk']['value']}</td> |
|
734 |
<td>{$ret['server']['disk']['remark']}</td> |
|
735 |
</tr> |
|
736 |
<tr class="{$ret['server']['upload']['class']}"> |
|
737 |
<td>上传限制</td> |
|
738 |
<td>{$ret['server']['upload']['value']}</td> |
|
739 |
<td>{$ret['server']['upload']['remark']}</td> |
|
740 |
</tr> |
|
741 |
</table> |
|
742 |
</div> |
|
743 |
|
|
744 |
<div class="alert alert-info">PHP环境要求必须满足下列所有条件,否则系统或系统部份功能将无法使用。</div> |
|
745 |
<div class="panel panel-default"> |
|
746 |
<div class="panel-heading">PHP环境要求</div> |
|
747 |
<table class="table table-striped"> |
|
748 |
<tr> |
|
749 |
<th style="width:150px;">选项</th> |
|
750 |
<th style="width:180px;">要求</th> |
|
751 |
<th style="width:50px;">状态</th> |
|
752 |
<th>说明及帮助</th> |
|
753 |
</tr> |
|
754 |
<tr class="{$ret['php']['version']['class']}"> |
|
755 |
<td>PHP版本</td> |
|
756 |
<td>5.3或者5.3以上</td> |
|
757 |
<td>{$ret['php']['version']['value']}</td> |
|
758 |
<td>{$ret['php']['version']['remark']}</td> |
|
759 |
</tr> |
|
760 |
<tr class="{$ret['php']['curl']['class']}"> |
|
761 |
<td>cURL</td> |
|
762 |
<td>支持</td> |
|
763 |
<td>{$ret['php']['curl']['value']}</td> |
|
764 |
<td>{$ret['php']['curl']['remark']}</td> |
|
765 |
</tr> |
|
766 |
<tr class="{$ret['php']['pdo']['class']}"> |
|
767 |
<td>PDO</td> |
|
768 |
<td>支持</td> |
|
769 |
<td>{$ret['php']['pdo']['value']}</td> |
|
770 |
<td>{$ret['php']['pdo']['remark']}</td> |
|
771 |
</tr> |
|
772 |
<tr class="{$ret['php']['ssl']['class']}"> |
|
773 |
<td>openSSL</td> |
|
774 |
<td>支持</td> |
|
775 |
<td>{$ret['php']['ssl']['value']}</td> |
|
776 |
<td>{$ret['php']['ssl']['remark']}</td> |
|
777 |
</tr> |
|
778 |
<tr class="{$ret['php']['gd']['class']}"> |
|
779 |
<td>GD2</td> |
|
780 |
<td>支持</td> |
|
781 |
<td>{$ret['php']['gd']['value']}</td> |
|
782 |
<td>{$ret['php']['gd']['remark']}</td> |
|
783 |
</tr> |
|
784 |
<tr class="{$ret['php']['dom']['class']}"> |
|
785 |
<td>DOM</td> |
|
786 |
<td>支持</td> |
|
787 |
<td>{$ret['php']['dom']['value']}</td> |
|
788 |
<td>{$ret['php']['dom']['remark']}</td> |
|
789 |
</tr> |
|
790 |
<tr class="{$ret['php']['session']['class']}"> |
|
791 |
<td>session.auto_start</td> |
|
792 |
<td>关闭</td> |
|
793 |
<td>{$ret['php']['session']['value']}</td> |
|
794 |
<td>{$ret['php']['session']['remark']}</td> |
|
795 |
</tr> |
|
796 |
<tr class="{$ret['php']['asp_tags']['class']}"> |
|
797 |
<td>asp_tags</td> |
|
798 |
<td>关闭</td> |
|
799 |
<td>{$ret['php']['asp_tags']['value']}</td> |
|
800 |
<td>{$ret['php']['asp_tags']['remark']}</td> |
|
801 |
</tr> |
|
802 |
</table> |
|
803 |
</div> |
|
804 |
|
|
805 |
<div class="alert alert-info">系统要求微擎整个安装目录必须可写, 才能使用微擎所有功能。</div> |
|
806 |
<div class="panel panel-default"> |
|
807 |
<div class="panel-heading">目录权限监测</div> |
|
808 |
<table class="table table-striped"> |
|
809 |
<tr> |
|
810 |
<th style="width:150px;">目录</th> |
|
811 |
<th style="width:180px;">要求</th> |
|
812 |
<th style="width:50px;">状态</th> |
|
813 |
<th>说明及帮助</th> |
|
814 |
</tr> |
|
815 |
<tr class="{$ret['write']['root']['class']}"> |
|
816 |
<td>/</td> |
|
817 |
<td>整目录可写</td> |
|
818 |
<td>{$ret['write']['root']['value']}</td> |
|
819 |
<td>{$ret['write']['root']['remark']}</td> |
|
820 |
</tr> |
|
821 |
<tr class="{$ret['write']['data']['class']}"> |
|
822 |
<td>/</td> |
|
823 |
<td>data目录可写</td> |
|
824 |
<td>{$ret['write']['data']['value']}</td> |
|
825 |
<td>{$ret['write']['data']['remark']}</td> |
|
826 |
</tr> |
|
827 |
</table> |
|
828 |
</div> |
|
829 |
<form class="form-inline" role="form" method="post"> |
|
830 |
<input type="hidden" name="do" id="do" /> |
|
831 |
<ul class="pager"> |
|
832 |
<li class="previous"><a href="javascript:;" onclick="$('#do').val('back');$('form')[0].submit();"><span class="glyphicon glyphicon-chevron-left"></span> 返回</a></li> |
|
833 |
{$continue} |
|
834 |
</ul> |
|
835 |
</form> |
|
836 |
EOF; |
|
837 |
tpl_frame(); |
|
838 |
} |
|
839 |
|
|
840 |
function tpl_install_db($error = '') { |
|
841 |
if(!empty($error)) { |
|
842 |
$message = '<div class="alert alert-danger">发生错误: ' . $error . '</div>'; |
|
843 |
} |
|
844 |
$insTypes = array(); |
|
845 |
if(file_exists(IA_ROOT . '/index.php') && is_dir(IA_ROOT . '/app') && is_dir(IA_ROOT . '/web')) { |
|
846 |
$insTypes['local'] = ' checked="checked"'; |
|
847 |
} else { |
|
848 |
$insTypes['remote'] = ' checked="checked"'; |
|
849 |
} |
|
850 |
if (!empty($_POST['type'])) { |
|
851 |
$insTypes = array(); |
|
852 |
$insTypes[$_POST['type']] = ' checked="checked"'; |
|
853 |
} |
|
854 |
$disabled = empty($insTypes['local']) ? ' disabled="disabled"' : ''; |
|
855 |
echo <<<EOF |
|
856 |
{$message} |
|
857 |
<form class="form-horizontal" method="post" role="form"> |
|
858 |
<div class="panel panel-default"> |
|
859 |
<div class="panel-heading">安装选项</div> |
|
860 |
<div class="panel-body"> |
|
861 |
<div class="form-group"> |
|
862 |
<label class="col-sm-2 control-label">安装方式</label> |
|
863 |
<div class="col-sm-10"> |
|
864 |
|
|
865 |
<label class="radio-inline"> |
|
866 |
<input type="radio" name="type" value="local"{$insTypes['local']}{$disabled}> 离线安装 |
|
867 |
</label> |
|
868 |
<label class="radio-inline"> |
|
869 |
<a target="_blank" href="//wpa.qq.com/msgrd?v=3&uin=2711815014&site=qq&menu=yes"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="公众号运营交流" title="公众号运营交流"></a> |
|
870 |
</label> |
|
871 |
|
|
872 |
</div> |
|
873 |
</div> |
|
874 |
</div> |
|
875 |
</div> |
|
876 |
<div class="panel panel-default"> |
|
877 |
<div class="panel-heading">数据库选项</div> |
|
878 |
<div class="panel-body"> |
|
879 |
<div class="form-group"> |
|
880 |
<label class="col-sm-2 control-label">数据库主机</label> |
|
881 |
<div class="col-sm-4"> |
|
882 |
<input class="form-control" type="text" name="db[server]" value="127.0.0.1"> |
|
883 |
</div> |
|
884 |
</div> |
|
885 |
<div class="form-group"> |
|
886 |
<label class="col-sm-2 control-label">数据库用户</label> |
|
887 |
<div class="col-sm-4"> |
|
888 |
<input class="form-control" type="text" name="db[username]" value="root"> |
|
889 |
</div> |
|
890 |
</div> |
|
891 |
<div class="form-group"> |
|
892 |
<label class="col-sm-2 control-label">数据库密码</label> |
|
893 |
<div class="col-sm-4"> |
|
894 |
<input class="form-control" type="text" name="db[password]"> |
|
895 |
</div> |
|
896 |
</div> |
|
897 |
<div class="form-group"> |
|
898 |
<label class="col-sm-2 control-label">表前缀</label> |
|
899 |
<div class="col-sm-4"> |
|
900 |
<input class="form-control" type="text" name="db[prefix]" value="ims_"> |
|
901 |
</div> |
|
902 |
</div> |
|
903 |
<div class="form-group"> |
|
904 |
<label class="col-sm-2 control-label">数据库名称</label> |
|
905 |
<div class="col-sm-4"> |
|
906 |
<input class="form-control" type="text" name="db[name]" value="we7"> |
|
907 |
</div> |
|
908 |
</div> |
|
909 |
</div> |
|
910 |
</div> |
|
911 |
<div class="panel panel-default"> |
|
912 |
<div class="panel-heading">管理选项</div> |
|
913 |
<div class="panel-body"> |
|
914 |
<div class="form-group"> |
|
915 |
<label class="col-sm-2 control-label">管理员账号</label> |
|
916 |
<div class="col-sm-4"> |
|
917 |
<input class="form-control" type="username" name="user[username]"> |
|
918 |
</div> |
|
919 |
</div> |
|
920 |
<div class="form-group"> |
|
921 |
<label class="col-sm-2 control-label">管理员密码</label> |
|
922 |
<div class="col-sm-4"> |
|
923 |
<input class="form-control" type="password" name="user[password]"> |
|
924 |
</div> |
|
925 |
</div> |
|
926 |
<div class="form-group"> |
|
927 |
<label class="col-sm-2 control-label">确认密码</label> |
|
928 |
<div class="col-sm-4"> |
|
929 |
<input class="form-control" type="password""> |
|
930 |
</div> |
|
931 |
</div> |
|
932 |
</div> |
|
933 |
</div> |
|
934 |
<input type="hidden" name="do" id="do" /> |
|
935 |
<ul class="pager"> |
|
936 |
<li class="previous"><a href="javascript:;" onclick="$('#do').val('back');$('form')[0].submit();"><span class="glyphicon glyphicon-chevron-left"></span> 返回</a></li> |
|
937 |
<li class="previous"><a href="javascript:;" onclick="if(check(this)){jQuery('#do').val('continue');if($('input[name=type]:checked').val() == 'remote'){alert('在线安装时,安装程序会下载精简版快速完成安装,完成后请务必注册云服务更新到完整版。')}$('form')[0].submit();}">继续 <span class="glyphicon glyphicon-chevron-right"></span></a></li> |
|
938 |
</ul> |
|
939 |
</form> |
|
940 |
<script> |
|
941 |
var lock = false; |
|
942 |
function check(obj) { |
|
943 |
if(lock) { |
|
944 |
return; |
|
945 |
} |
|
946 |
$('.form-control').parent().parent().removeClass('has-error'); |
|
947 |
var error = false; |
|
948 |
$('.form-control').each(function(){ |
|
949 |
if($(this).val() == '') { |
|
950 |
$(this).parent().parent().addClass('has-error'); |
|
951 |
this.focus(); |
|
952 |
error = true; |
|
953 |
} |
|
954 |
}); |
|
955 |
if(error) { |
|
956 |
alert('请检查未填项'); |
|
957 |
return false; |
|
958 |
} |
|
959 |
if($(':password').eq(0).val() != $(':password').eq(1).val()) { |
|
960 |
$(':password').parent().parent().addClass('has-error'); |
|
961 |
alert('确认密码不正确.'); |
|
962 |
return false; |
|
963 |
} |
|
964 |
lock = true; |
|
965 |
$(obj).parent().addClass('disabled'); |
|
966 |
$(obj).html('正在执行安装'); |
|
967 |
return true; |
|
968 |
} |
|
969 |
</script> |
|
970 |
EOF; |
|
971 |
tpl_frame(); |
|
972 |
} |
|
973 |
|
|
974 |
function tpl_install_finish() { |
|
975 |
$modules = get_store_module(); |
|
976 |
$themes = get_store_theme(); |
|
977 |
echo <<<EOF |
|
978 |
<div class="page-header"><h3>安装完成</h3></div> |
|
979 |
<div class="alert alert-success"> |
|
980 |
恭喜您!已成功安装“微擎 - 公众平台自助开源引擎”系统,您现在可以: <a target="_blank" class="btn btn-success" href="./web/index.php">访问网站首页</a> |
|
981 |
</div> |
|
982 |
|
|
983 |
EOF; |
|
984 |
tpl_frame(); |
|
985 |
} |
|
986 |
|
|
987 |
function tpl_resources() { |
|
988 |
static $res = array( |
|
989 |
'logo' => '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', |
|
990 |
); |
|
991 |
return $res; |
|
992 |
} |
|
993 |
|
|
994 |
function showerror($errno, $message = '') { |
|
995 |
return array( |
|
996 |
'errno' => $errno, |
|
997 |
'error' => $message, |
|
998 |
); |
|
999 |
} |
|
1000 |
|
|
1001 |
function get_store_module() { |
|
1002 |
load()->func('communication'); |
|
1003 |
$response = ihttp_request(APP_STORE_API, array('controller' => 'store', 'action' => 'api', 'do' => 'module')); |
|
1004 |
$response = json_decode($response['content'], true); |
|
1005 |
|
|
1006 |
$modules = ''; |
|
1007 |
foreach ($response['message'] as $key => $module) { |
|
1008 |
if ($key % 3 < 1) { |
|
1009 |
$modules .= '</tr><tr>'; |
|
1010 |
} |
|
1011 |
$module['detail_link'] = APP_STORE_URL . trim($module['detail_link'], '.'); |
|
1012 |
$modules .= '<td>'; |
|
1013 |
$modules .= '<div class="col-sm-4">'; |
|
1014 |
$modules .= '<a href="' . $module['detail_link'] . '" title="查看详情" target="_blank">'; |
|
1015 |
$modules .= '<img src="' . $module['logo']. '"' . ' width="50" height="50" ' . $module['title'] . '" /></a>'; |
|
1016 |
$modules .= '</div>'; |
|
1017 |
$modules .= '<div class="col-sm-8">'; |
|
1018 |
$modules .= '<p><a href="' . $module['detail_link'] .'" title="查看详情" target="_blank">' . $module['title'] . '</a></p>'; |
|
1019 |
$modules .= '<p>安装量:<span class="text-danger">' . $module['purchases'] . '</span></p>'; |
|
1020 |
$modules .= '</div>'; |
|
1021 |
$modules .= '</td>'; |
|
1022 |
} |
|
1023 |
$modules = substr($modules, 5) . '</tr>'; |
|
1024 |
|
|
1025 |
return $modules; |
|
1026 |
} |
|
1027 |
|
|
1028 |
function get_store_theme() { |
|
1029 |
load()->func('communication'); |
|
1030 |
$response = ihttp_request(APP_STORE_API, array('controller' => 'store', 'action' => 'api', 'do' => 'theme')); |
|
1031 |
$response = json_decode($response['content'], true); |
|
1032 |
|
|
1033 |
$themes = '<tr><td colspan="' . count($response['message']) . '">'; |
|
1034 |
$themes .= '<div class="form-group">'; |
|
1035 |
foreach ($response['message'] as $key => $theme) { |
|
1036 |
$theme['detail_link'] = APP_STORE_URL . trim($theme['detail_link'], '.'); |
|
1037 |
$themes .= '<div class="col-sm-2" style="padding-left: 7px;margin-right: 25px;">'; |
|
1038 |
$themes .= '<a href="' . $theme['detail_link'] .'" title="查看详情" target="_blank" /><img src="' . $theme['logo']. '" /></a>'; |
|
1039 |
$themes .= '<p></p><p class="text-right">'; |
|
1040 |
$themes .= '<a href="' . $theme['detail_link']. '" title="查看详情" target="_blank">' . $theme['title'] . '</a></p>'; |
|
1041 |
$themes .= '</div>'; |
|
1042 |
} |
|
1043 |
$themes .= '</div>'; |
|
1044 |
|
|
1045 |
return $themes; |
|
1046 |
} |