PageRenderTime 40ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/install/index.php

https://gitlab.com/Ltaimao/wecenter
PHP | 422 lines | 335 code | 70 blank | 17 comment | 51 complexity | 01d596c2c66c03b7d3cab153e11bc73f MD5 | raw file
  1. <?php
  2. /*
  3. +--------------------------------------------------------------------------
  4. | WeCenter [#RELEASE_VERSION#]
  5. | ========================================
  6. | by WeCenter Software
  7. | © 2011 - 2014 WeCenter. All Rights Reserved
  8. | http://www.wecenter.com
  9. | ========================================
  10. | Support: WeCenter@qq.com
  11. |
  12. +---------------------------------------------------------------------------
  13. */
  14. require_once('../system/init.php');
  15. HTTP::no_cache_header();
  16. if (file_exists(AWS_PATH . 'config/install.lock.php'))
  17. {
  18. H::redirect_msg(load_class('core_lang')->_t('您的程序已经安装, 要重新安装请删除 system/config/install.lock.php'));
  19. }
  20. @set_time_limit(0);
  21. TPL::assign('page_title', 'WeCenter - Install');
  22. TPL::assign('static_url', '../static');
  23. switch ($_POST['step'])
  24. {
  25. default :
  26. $system_require = array();
  27. if (version_compare(PHP_VERSION, ENVIRONMENT_PHP_VERSION, '>=') AND get_cfg_var('safe_mode') == false)
  28. {
  29. $system_require['php'] = TRUE;
  30. }
  31. if (class_exists('PDO', false))
  32. {
  33. if (defined('PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'))
  34. {
  35. $system_require['db'] = 'PDO_MYSQL';
  36. }
  37. }
  38. if (!$system_require['db'] AND function_exists('mysqli_close'))
  39. {
  40. $system_require['db'] = 'MySQLi';
  41. }
  42. if (function_exists('session_start'))
  43. {
  44. $system_require['session'] = TRUE;
  45. }
  46. if (function_exists('iconv'))
  47. {
  48. $system_require['convert_encoding'] = TRUE;
  49. }
  50. if (isset($_COOKIE))
  51. {
  52. $system_require['cookie'] = TRUE;
  53. }
  54. if (function_exists('gd_info'))
  55. {
  56. $system_require['image_lib'] = 'GD';
  57. }
  58. if ($system_require['image_lib'] AND class_exists('Imagick', false))
  59. {
  60. $system_require['image_lib'] = 'ImageMagick';
  61. }
  62. if (function_exists('ctype_xdigit'))
  63. {
  64. $system_require['ctype'] = TRUE;
  65. }
  66. if (function_exists('curl_exec'))
  67. {
  68. $system_require['curl'] = TRUE;
  69. }
  70. if (function_exists('imageftbbox'))
  71. {
  72. $system_require['ft_font'] = TRUE;
  73. }
  74. if (function_exists('mcrypt_module_open'))
  75. {
  76. $system_require['mcrypt'] = TRUE;
  77. }
  78. if (function_exists('gzcompress'))
  79. {
  80. $system_require['zlib'] = TRUE;
  81. }
  82. // 检测 AWS_PATH 是否有写权限
  83. if (is_really_writable(AWS_PATH) OR defined('IN_SAE'))
  84. {
  85. $system_require['config_writable_core'] = TRUE;
  86. }
  87. // 检测 AWS_PATH /config/ 是否有写权限
  88. if (is_really_writable(AWS_PATH . 'config/') OR defined('IN_SAE'))
  89. {
  90. $system_require['config_writable_config'] = TRUE;
  91. }
  92. $base_dir = str_replace("\\", "",dirname(dirname($_SERVER['PHP_SELF'])));
  93. if (!defined('IN_SAE'))
  94. {
  95. if (!@file_get_contents('http://api.weibo.com/'))
  96. {
  97. $error_messages[] = load_class('core_lang')->_t('你的主机无法与微博通讯, 相关功能将不能使用');
  98. }
  99. if (!@gethostbyname('graph.qq.com'))
  100. {
  101. $error_messages[] = load_class('core_lang')->_t('你的主机无法与 QQ 通讯, QQ 登录功能将不能使用');
  102. }
  103. }
  104. TPL::assign('error_messages', $error_messages);
  105. TPL::assign('system_require', $system_require);
  106. TPL::assign('base_dir', $base_dir);
  107. TPL::output('install/index');
  108. break;
  109. case 2 :
  110. if (!defined('IN_SAE'))
  111. {
  112. $data_dir = array(
  113. 'tmp',
  114. 'cache',
  115. 'uploads'
  116. );
  117. foreach ($data_dir as $key => $dir_name)
  118. {
  119. if (! is_dir(ROOT_PATH . $dir_name))
  120. {
  121. if (! @mkdir(ROOT_PATH . $dir_name))
  122. {
  123. $error_messages[] = load_class('core_lang')->_t('目录: %s 无法创建,请将网站根目录权限设置为 777, 或者创建这个目录设置权限为 777', ROOT_PATH . $dir_name);
  124. }
  125. }
  126. }
  127. if (! is_really_writable(AWS_PATH))
  128. {
  129. $error_messages[] = load_class('core_lang')->_t('目录: %s 无法写入,请将此目录权限设置为 777', AWS_PATH);
  130. }
  131. }
  132. if (class_exists('PDO', false))
  133. {
  134. if (defined('PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'))
  135. {
  136. TPL::assign('pdo_support', TRUE);
  137. }
  138. }
  139. if (function_exists('mysqli_close'))
  140. {
  141. TPL::assign('mysqi_support', TRUE);
  142. }
  143. TPL::assign('error_messages', $error_messages);
  144. TPL::output('install/settings');
  145. break;
  146. case 3 :
  147. if (defined('IN_SAE'))
  148. {
  149. $db_config = array(
  150. 'host' => SAE_MYSQL_HOST_M,
  151. 'port' => SAE_MYSQL_PORT,
  152. 'username' => SAE_MYSQL_USER,
  153. 'password' => SAE_MYSQL_PASS,
  154. 'dbname' => SAE_MYSQL_DB,
  155. 'charset' => 'utf8'
  156. );
  157. }
  158. else
  159. {
  160. $db_config = array(
  161. 'charset' => 'utf8',
  162. 'host' => $_POST['db_host'],
  163. 'username' => $_POST['db_username'],
  164. 'password' => $_POST['db_password'],
  165. 'dbname' => $_POST['db_dbname']
  166. );
  167. if ($_POST['db_port'])
  168. {
  169. $db_config['port'] = $_POST['db_port'];
  170. }
  171. if ($_POST['db_driver'])
  172. {
  173. $db_driver = $_POST['db_driver'];
  174. }
  175. else if (class_exists('PDO', false))
  176. {
  177. if (defined('PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'))
  178. {
  179. $db_driver = 'PDO_MYSQL';
  180. }
  181. }
  182. }
  183. if (!$db_driver)
  184. {
  185. $db_driver = 'MySQLi';
  186. }
  187. if (!$_POST['db_engine'])
  188. {
  189. $_POST['db_engine'] = 'MyISAM';
  190. }
  191. try
  192. {
  193. $db = Zend_Db::factory($db_driver, $db_config);
  194. }
  195. catch (Exception $e)
  196. {
  197. H::redirect_msg(load_class('core_lang')->_t('数据库连接失败, 错误信息:') . ' ' . strip_tags($e->getMessage()), './');
  198. }
  199. try
  200. {
  201. $tables = $db->fetchAll('SHOW TABLES');
  202. }
  203. catch (Exception $e)
  204. {
  205. H::redirect_msg(load_class('core_lang')->_t('数据库连接失败, 错误信息:') . ' ' . strip_tags($e->getMessage()), './');
  206. }
  207. if (number_format($db->getServerVersion(), 1) < 5)
  208. {
  209. H::redirect_msg(load_class('core_lang')->_t('安装中止: WeCenter 要求使用 MySQL 5.0 以上版本的数据库支持, 您的服务器当前 MySQL 版本为: %s', $db->getServerVersion()), './');
  210. }
  211. if (!$_POST['db_prefix'] AND count($tables) > 0)
  212. {
  213. H::redirect_msg(load_class('core_lang')->_t('数据库已经存在数据表, 不允许安装, 如要重新安装请先清空数据表'), './');
  214. }
  215. foreach ($tables AS $key => $table_info)
  216. {
  217. if (!is_array($table_info))
  218. {
  219. break;
  220. }
  221. foreach ($table_info AS $_key => $table)
  222. {
  223. if (substr($table, 0, strlen($_POST['db_prefix'])) == $_POST['db_prefix'])
  224. {
  225. H::redirect_msg(load_class('core_lang')->_t('数据库已经存在相同前缀的数据表, 不允许安装, 如要重新安装请先清空数据表'), './');
  226. break;
  227. }
  228. }
  229. }
  230. if (!defined('IN_SAE'))
  231. {
  232. $config = array(
  233. 'charset' => 'utf8',
  234. 'prefix' => $_POST['db_prefix'],
  235. 'driver' => $db_driver,
  236. 'master' => $db_config,
  237. 'slave' => false
  238. );
  239. if ($_POST['db_port'])
  240. {
  241. $config['port'] = $_POST['db_port'];
  242. }
  243. load_class('core_config')->set('database', $config);
  244. }
  245. // 创建数据表
  246. $db_table_querys = explode(";\r", str_replace(array('[#DB_PREFIX#]', '[#DB_ENGINE#]', "\n"), array($_POST['db_prefix'], $_POST['db_engine'], "\r"), file_get_contents(ROOT_PATH . 'install/db/mysql.sql')));
  247. foreach ($db_table_querys as $_sql)
  248. {
  249. if ($query_string = trim(str_replace(array(
  250. "\r",
  251. "\n",
  252. "\t"
  253. ), '', $_sql)))
  254. {
  255. $db->query($query_string);
  256. }
  257. }
  258. $db->insert($_POST['db_prefix'] . 'system_setting', array(
  259. 'varname' => 'db_engine',
  260. 'value' => 's:' . strlen($_POST['db_engine']) . ':"' . $_POST['db_engine'] . '";',
  261. ));
  262. TPL::output('install/final');
  263. break;
  264. case 4 :
  265. $db = load_class('core_db')->setObject('master');
  266. $db_prefix = load_class('core_config')->get('database')->prefix;
  267. $salt = fetch_salt(4);
  268. $data = array(
  269. 'user_name' => $_POST['user_name'],
  270. 'password' => compile_password($_POST['password'], $salt),
  271. 'email' => $_POST['email'],
  272. 'salt' => $salt,
  273. 'group_id' => 1,
  274. 'reputation_group' => 5,
  275. 'valid_email' => 1,
  276. 'is_first_login' => 1,
  277. 'reg_time' => time(),
  278. 'reg_ip' => ip2long(fetch_ip()),
  279. 'last_login' => time(),
  280. 'last_ip' => ip2long(fetch_ip()),
  281. 'last_active' => time(),
  282. 'invitation_available' => 10,
  283. 'integral' => 2000
  284. );
  285. $db->insert($db_prefix . 'users', $data);
  286. $db->insert($db_prefix . 'users_attrib', array('uid' => 1, 'signature' => ''));
  287. $db->insert($db_prefix . 'integral_log', array(
  288. 'uid' => 1,
  289. 'action' => 'REGISTER',
  290. 'integral' => 2000,
  291. 'note' => load_class('core_lang')->_t('初始资本'),
  292. 'balance' => 2000,
  293. 'time' => time()
  294. ));
  295. //加载网站配置
  296. $base_dir = dirname(dirname($_SERVER['PHP_SELF']));
  297. $base_dir = ($base_dir == DIRECTORY_SEPARATOR) ? '' : $base_dir;
  298. $insert_query = file_get_contents(ROOT_PATH . 'install/db/system_setting.sql');
  299. $insert_query = str_replace('[#DB_PREFIX#]', $db_prefix, $insert_query);
  300. if (defined('IN_SAE'))
  301. {
  302. $insert_query = str_replace('[#UPLOAD_URL#]', serialize($_POST['upload_url']), $insert_query);
  303. $insert_query = str_replace('[#UPLOAD_DIR#]', serialize('saestor://uploads'), $insert_query);
  304. }
  305. else
  306. {
  307. $base_url = base_url();
  308. if (substr($base_url, -8) == '/install')
  309. {
  310. $base_url = substr_replace($base_url, '', -8);
  311. }
  312. $insert_query = str_replace('[#UPLOAD_URL#]', serialize($base_url . "/uploads"), $insert_query);
  313. $insert_query = str_replace('[#UPLOAD_DIR#]', serialize(str_replace("\\", "/", ROOT_PATH) . "uploads"), $insert_query);
  314. }
  315. $insert_query = str_replace('[#FROM_EMAIL#]', serialize($_POST['email']), $insert_query);
  316. $insert_query = str_replace('[#DB_VERSION#]', serialize(G_VERSION_BUILD), $insert_query);
  317. //$db->query($insert_query);
  318. $sql_query = str_replace("\n", "\r", $insert_query);
  319. $db_table_querys = explode(";\r", $sql_query);
  320. foreach ($db_table_querys as $_sql)
  321. {
  322. if ($query_string = trim(str_replace(array(
  323. "\r",
  324. "\n",
  325. "\t"
  326. ), '', $_sql)))
  327. {
  328. try {
  329. $db->query($query_string);
  330. }
  331. catch (Exception $e)
  332. {
  333. die('SQL Error: ' . $e->getMessage() . '<br /><br />Query: ' . $query_string);
  334. }
  335. }
  336. }
  337. $db->insert($db_prefix . 'system_setting', array(
  338. 'varname' => 'register_agreement',
  339. 'value' => serialize(file_get_contents(ROOT_PATH . 'install/db/register_agreement.txt')),
  340. ));
  341. if (!defined('IN_SAE'))
  342. {
  343. $config_file = file_get_contents(AWS_PATH . 'config.dist.php');
  344. $config_file = str_replace('{G_COOKIE_PREFIX}', fetch_salt(3) . '_', $config_file);
  345. $config_file = str_replace('{G_SECUKEY}', fetch_salt(12), $config_file);
  346. $config_file = str_replace('{G_COOKIE_HASH_KEY}', fetch_salt(15), $config_file);
  347. file_put_contents(AWS_PATH . 'config.inc.php', $config_file);
  348. file_put_contents(AWS_PATH . 'config/install.lock.php', time());
  349. }
  350. TPL::output('install/success');
  351. break;
  352. }