PageRenderTime 91ms CodeModel.GetById 23ms RepoModel.GetById 4ms app.codeStats 0ms

/fwoq/install/index.php

http://phpfor.googlecode.com/
PHP | 316 lines | 80 code | 16 blank | 220 comment | 19 complexity | 02fedbac7758018669a558d86580d08b MD5 | raw file
  1. <?php
  2. define('FCPATH',__FILE__);
  3. define('ROOTDIR',dirname(dirname(FCPATH)).DIRECTORY_SEPARATOR);
  4. define('INSDIR',dirname(FCPATH).DIRECTORY_SEPARATOR);
  5. header("Content-type: text/html; charset=utf-8");
  6. require_once(INSDIR.'include/install_func.php');
  7. define('COREDIR',ROOTDIR.'core'.DIRECTORY_SEPARATOR);
  8. define('LIBDIR',COREDIR.'libs'.DIRECTORY_SEPARATOR);
  9. define('INCDIR',COREDIR.'include'.DIRECTORY_SEPARATOR);
  10. define('CTLDIR',COREDIR.'ctls'.DIRECTORY_SEPARATOR);
  11. define('VIEWDIR',COREDIR.'views'.DIRECTORY_SEPARATOR);
  12. define('MODELDIR',COREDIR.'models'.DIRECTORY_SEPARATOR);
  13. define('DATADIR',ROOTDIR.'data'.DIRECTORY_SEPARATOR);
  14. define('PLUGINDIR',ROOTDIR.'plugins'.DIRECTORY_SEPARATOR);
  15. if (floor(PHP_VERSION) < 5){
  16. define('PHPVer',4);
  17. }else{
  18. define('PHPVer',5);
  19. }
  20. require_once(COREDIR.'loader.php');
  21. require_once(INCDIR.'plugin.php');
  22. require_once(INCDIR.'functions.php');
  23. require_once(INSDIR.'include/install_var.php');
  24. if(r('lang')){
  25. setCookie('install_lang',r('lang'));
  26. define('INS_LANG',r('lang'));
  27. }else{
  28. if(isset($_COOKIE['install_lang']) && file_exists(COREDIR.'lang/'.$_COOKIE['install_lang'].'.lang.php')){
  29. define('INS_LANG',$_COOKIE['install_lang']);
  30. }else{
  31. define('INS_LANG','zh_cn');
  32. }
  33. }
  34. if(file_exists(INSDIR.'lang/'.INS_LANG.'.lang.php')){
  35. require_once(INSDIR.'lang/'.INS_LANG.'.lang.php');
  36. }else{
  37. require_once(INSDIR.'lang/zh_cn.lang.php');
  38. }
  39. $allow_method = array('license', 'env','db_init', 'feedback', 'complete');
  40. $step = intval(r('step')) ? intval(r('step')) : 0;
  41. $method = r('method');
  42. if(empty($method) || !in_array($method, $allow_method)) {
  43. $method = isset($allow_method[$step]) ? $allow_method[$step] : '';
  44. }
  45. timezone_set();
  46. if(empty($method)) {
  47. show_msg('method_undefined', $method, 0);
  48. }
  49. if(file_exists($lockfile) && $method != 'complete') {
  50. show_msg('install_locked', '', 0);
  51. }
  52. if($method == 'license'){
  53. show_license();
  54. }elseif($method == 'env'){
  55. env_check($env_items);
  56. dirfile_check($dirfile_items);
  57. show_env_result($env_items, $dirfile_items, $func_items);
  58. }elseif($method == 'db_init'){
  59. $default_config = $CONFIG = array();
  60. $default_configfile = './conf/config.default.php';
  61. if(!file_exists(ROOTDIR.$default_configfile)) {
  62. exit('config_default.php was lost, please reupload this file.');
  63. } else {
  64. include ROOTDIR.$default_configfile;
  65. $default_config = $CONFIG;
  66. }
  67. if(file_exists($confile)) {
  68. include $confile;
  69. } else {
  70. $CONFIG = $default_config;
  71. }
  72. $dbhost = $CONFIG['database']['default']['host'];
  73. $dbname = $CONFIG['database']['default']['dbname'];
  74. $dbport = $CONFIG['database']['default']['port'];
  75. $dbpw = $CONFIG['database']['default']['dbpass'];
  76. $dbuser = $CONFIG['database']['default']['dbuser'];
  77. $tablepre = $CONFIG['database']['default']['pre'];
  78. $adminemail = 'admin@admin.com';
  79. $PHP_SELF = htmlspecialchars($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);
  80. $url = htmlspecialchars('http://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api|archiver|wap)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))));
  81. $siteurl = substr($url, 0, -7);
  82. $sitename = lang('myalbum');
  83. $submit = true;
  84. $error_msg = array();
  85. $dbadapter = p('dbadapter');
  86. if(isset($form_db_init_items) && is_array($form_db_init_items)) {
  87. foreach($form_db_init_items as $key => $items) {
  88. $$key = p($key);
  89. if($dbadapter == 'sqlite' && $key == 'mysqldbinfo'){
  90. continue;
  91. }
  92. if(!isset($$key) || !is_array($$key)) {
  93. $submit = false;
  94. break;
  95. }
  96. foreach($items as $k => $v) {
  97. $tmp = $$key;
  98. $$k = isset($tmp[$k])?$tmp[$k]:'';
  99. if(empty($$k) || !preg_match($v['reg'], $$k)) {
  100. if(empty($$k) && !$v['required']) {
  101. continue;
  102. }
  103. $submit = false;
  104. $error_msg[$key][$k] = 1;
  105. }
  106. }
  107. }
  108. } else {
  109. $submit = false;
  110. }
  111. if($submit && $_SERVER['REQUEST_METHOD'] == 'POST') {
  112. if($password != $password2) {
  113. $error_msg['admininfo']['password2'] = 1;
  114. $submit = false;
  115. }
  116. $forceinstall = isset($_POST['mysqldbinfo']['forceinstall']) ? $_POST['mysqldbinfo']['forceinstall'] : '';
  117. $dbname_not_exists = true;
  118. if(!empty($dbhost) && $dbadapter=='mysql' && empty($forceinstall)) {
  119. $dbname_not_exists = check_db($dbhost, $dbuser, $dbpw, $dbname, $tablepre);
  120. if(!$dbname_not_exists) {
  121. $form_db_init_items['mysqldbinfo']['forceinstall'] = array('type' => 'checkbox', 'required' => 0, 'reg' => '/^.*+/');
  122. $error_msg['mysqldbinfo']['forceinstall'] = 1;
  123. $submit = false;
  124. $dbname_not_exists = false;
  125. }
  126. }
  127. $forceinstall = isset($_POST['sqlite']['forceinstall']) ? $_POST['sqlite']['forceinstall'] : '';
  128. if($dbadapter=='sqlite' && file_exists(ROOTDIR.$dst_dbfile) && empty($forceinstall)){
  129. $form_db_init_items['sqlite']['forceinstall'] = array('type' => 'checkbox', 'required' => 0, 'reg' => '/^.*+/');
  130. $error_msg['sqlite']['forceinstall'] = 1;
  131. $submit = false;
  132. }
  133. }
  134. if($submit) {
  135. if($dbadapter == 'mysql'){
  136. if($username && $email && $password) {
  137. if(strlen($username) > 15 || preg_match("/^$|^c:\\con\\con$|?|[,\"\s\t\<\>&]|^Guest/is", $username)) {
  138. show_msg('admin_username_invalid', $username, 0);
  139. } elseif(!strstr($email, '@') || $email != stripslashes($email) || $email != htmlspecialchars($email)) {
  140. show_msg('admin_email_invalid', $email, 0);
  141. }
  142. } else {
  143. show_msg('admininfo_invalid', '', 0);
  144. }
  145. $step = $step + 1;
  146. if(empty($dbname)) {
  147. show_msg('dbname_invalid', $dbname, 0);
  148. } else {
  149. if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpw)) {
  150. $errno = mysql_errno($link);
  151. $error = mysql_error($link);
  152. if($errno == 1045) {
  153. show_msg('database_errno_1045', $error, 0);
  154. } elseif($errno == 2003) {
  155. show_msg('database_errno_2003', $error, 0);
  156. } else {
  157. show_msg('database_connect_error', $error, 0);
  158. }
  159. }
  160. if(mysql_get_server_info() > '4.1') {
  161. mysql_query("SET?NAMES 'utf8'");
  162. mysql_query("CREATE DATABASE IF NOT EXISTS `$dbname` DEFAULT CHARACTER SET utf8", $link);
  163. } else {
  164. mysql_query("CREATE DATABASE IF NOT EXISTS `$dbname`", $link);
  165. }
  166. if(mysql_errno()) {
  167. show_msg('database_errno_1044', mysql_error(), 0);
  168. }
  169. mysql_close($link);
  170. }
  171. if(strpos($tablepre, '.') !== false) {
  172. show_msg('tablepre_invalid', $tablepre, 0);
  173. }
  174. if(function_exists('mysqli_connect')){
  175. $CONFIG['database']['default']['adapter'] = 'mysqli';
  176. }else{
  177. $CONFIG['database']['default']['adapter'] = 'mysql';
  178. }
  179. $CONFIG['database']['default']['host'] = $dbhost;
  180. $CONFIG['database']['default']['port'] = $dbport;
  181. $CONFIG['database']['default']['dbname'] = $dbname;
  182. $CONFIG['database']['default']['dbuser'] = $dbuser;
  183. $CONFIG['database']['default']['dbpass'] = $dbpw;
  184. $CONFIG['database']['default']['pre'] = $tablepre;
  185. $CONFIG['cookie_name'] = 'MPIC_'.random(4);
  186. $CONFIG['cookie_auth_key'] = random(12);
  187. $CONFIG['img_engine'] = class_exists('imagick')?'imagick':'gd';
  188. save_config_file($confile, $CONFIG, $default_config);
  189. $db =& loader::database();
  190. show_header();
  191. show_install();
  192. $sql = file_get_contents($sqlfile);
  193. $sql = str_replace("\r\n", "\n", $sql);
  194. runquery($sql);
  195. }elseif($dbadapter == 'sqlite'){
  196. $step = $step + 1;
  197. show_header();
  198. show_install();
  199. $tablepre = 'meu_';
  200. $CONFIG['database']['default']['adapter'] = 'sqlite';
  201. $CONFIG['database']['default']['dbpath'] = $dst_dbfile;
  202. $CONFIG['database']['default']['pre'] = $tablepre;
  203. $CONFIG['cookie_name'] = 'MPIC_'.random(4);
  204. $CONFIG['cookie_auth_key'] = random(12);
  205. $CONFIG['img_engine'] = class_exists('imagick')?'imagick':'gd';
  206. save_config_file($confile, $CONFIG, $default_config);
  207. if(file_exists(ROOTDIR.$dst_dbfile)){
  208. @unlink(ROOTDIR.$dst_dbfile);
  209. }
  210. @touch(ROOTDIR.$dst_dbfile);
  211. $db =& loader::database();
  212. $sql = file_get_contents($sqlite_sqlfile);
  213. $sql = str_replace("\r\n", "\n", $sql);
  214. runquery($sql);
  215. }
  216. $datasql = file_get_contents($datasqlfile);
  217. runquery($datasql);
  218. $sql = $db->insert('#@nav',array('type'=>0,'name'=>lang('home'),'url' =>'default','sort'=>'100'));
  219. $db->query($sql);
  220. $sql = $db->insert('#@nav',array('type'=>0,'name'=>lang('tags'),'url' =>'tags','sort'=>'100'));
  221. $db->query($sql);
  222. $sql = $db->insert('#@nav',array('type'=>0,'name'=>lang('category'),'url' =>'category','sort'=>'100'));
  223. $db->query($sql);
  224. showjsmessage(lang('install_data_sql').lang('succeed'));
  225. cleardir(ROOTDIR.'cache/data');
  226. cleardir(ROOTDIR.'cache/templates');
  227. cleardir(ROOTDIR.'cache/tmp');
  228. $db->insert('#@users',array('user_name'=>$username,'user_nicename'=>$username,'user_pass'=>md5($password),'create_time'=>time()));
  229. if($db->query()){
  230. $userid = $db->insertid();
  231. $db->insert('#@usermeta',array('userid'=>$userid,'meta_key'=>'email','meta_value'=>$email));
  232. $db->query();
  233. showjsmessage(lang('create_admin_account').lang('succeed'));
  234. }else{
  235. showjsmessage(lang('create_admin_account').lang('failed'));
  236. }
  237. $siteurl = rtrim($siteurl,'/').'/';
  238. $mdl_setting = loader::model('setting');
  239. $mdl_setting->set_conf('system.version',MPIC_VERSION);
  240. $mdl_setting->set_conf('system.installed_time',time());
  241. $mdl_setting->set_conf('system.gravatar_url','http://www.gravatar.com/avatar.php?rating=G&size=48&default='.$siteurl.'statics/img/no_avatar.jpg&gravatar_id={idstring}');
  242. $mdl_setting->set_conf('system.enable_auto_update',true);
  243. $mdl_setting->set_conf('system.show_process_info',false);
  244. $mdl_setting->set_conf('system.language',INS_LANG);
  245. $mdl_setting->set_conf('system.timezone',8);
  246. $mdl_setting->set_conf('site.title',$sitename);
  247. $mdl_setting->set_conf('site.url',$siteurl);
  248. $mdl_setting->set_conf('site.footer','');
  249. $mdl_setting->set_conf('site.email',$email);
  250. $mdl_setting->set_conf('site.share_title',lang('share_title'));
  251. $mdl_setting->set_conf('site.keywords',lang('site_keywords'));
  252. $mdl_setting->set_conf('site.description',lang('site_desc'));
  253. showjsmessage(lang('update_user_setting'));
  254. $plugin =& loader::lib('plugin');
  255. $plugin->install_plugin('copyimg');
  256. $plugin->enable_plugin('copyimg');
  257. showjsmessage(lang('install_default_plugins'));
  258. echo '<script type="text/javascript">document.getElementById("laststep").disabled=false;document.getElementById("laststep").value = \''.lang('installed_complete').'\';</script><script type="text/javascript">setTimeout(function(){window.location=\'index.php?method=complete\'}, 2000);</script>'."\r\n";
  259. @touch(ROOTDIR.'conf/install.lock');
  260. getstatinfo();
  261. show_footer();
  262. }else{
  263. show_form($form_db_init_items, $error_msg);
  264. }
  265. }elseif($method == 'complete'){
  266. $step = 4;
  267. show_header();
  268. echo '<ul style="line-height: 200%; margin-left: 30px;">';
  269. echo '<li><a href="../">'.lang('install_succeed').'</a><br>';
  270. echo '<script>setTimeout(function(){window.location=\'../\'}, 2000);</script>'.lang('auto_redirect').'</li>';
  271. echo '</ul></div>';
  272. show_footer();
  273. }