index.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <?php
  2. /**
  3. *
  4. * 多用户商城 instller
  5. *
  6. *
  7. */
  8. error_reporting (0);
  9. define('InShopNC',true);
  10. // 设置最大执行时间
  11. set_time_limit(0);
  12. error_reporting(E_ALL & ~E_NOTICE);
  13. define('ROOT_PATH', dirname(dirname(__FILE__)));
  14. define('DBCHARSET','UTF8');//编码 分为 UTF8 GBK
  15. input($_GET);input($_POST);
  16. if(function_exists('date_default_timezone_set')){
  17. date_default_timezone_set('Asia/Shanghai');
  18. }
  19. function input(&$data){
  20. foreach ((array)$data as $key => $value) {
  21. if (is_string($value)) {
  22. if (!get_magic_quotes_gpc()) {
  23. $value = htmlentities($value, ENT_NOQUOTES);
  24. $value = addslashes(trim($value));
  25. }
  26. }else{
  27. $data[$key] = input($value);
  28. }
  29. }
  30. }
  31. //Detection identifies the file exists, if it exists, then stop the installation
  32. if (file_exists('lock') && $_GET['step'] != 5){
  33. @header("Content-type: text/html; charset=UTF-8");
  34. echo "系统已经安装过了,如果要重新安装,那么请删除install目录下的lock文件";
  35. exit;
  36. }
  37. //define variable
  38. $html_title = '最新版SHOPNC官方安装程序';
  39. $html_header = <<<EOF
  40. <div class="header">
  41. <div class="layout">
  42. <div class="title">
  43. <h5>最新版SHOPNC官方安装程序</h5>
  44. <h2>系统安装向导</h2>
  45. </div>
  46. <div class="version">版本: 2015.7</div>
  47. </div>
  48. </div>
  49. EOF;
  50. $html_footer = <<<EOF
  51. <div class="footer">
  52. <h6><a href="http://www.abc.com" target="_blank"></a></h6>
  53. </div>
  54. EOF;
  55. require('./include/function.php');
  56. if (!in_array($_GET['step'],array(1,2,3,4,5))) $_GET['step'] = 0;
  57. switch ($_GET['step']) {
  58. case 1:
  59. require('./include/var.php');
  60. env_check($env_items);
  61. dirfile_check($dirfile_items);
  62. function_check($func_items);
  63. break;
  64. case 3:
  65. $install_error = '';
  66. $install_recover = '';
  67. $demo_data = file_exists('./data/utf8_add.sql') ? true : false;
  68. step3($install_error,$install_recover);
  69. break;
  70. case 4:
  71. step4();
  72. break;
  73. case 5:
  74. $sitepath = strtolower(substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')));
  75. $sitepath = str_replace('/shop/install',"",$sitepath);
  76. $auto_site_url = strtolower('http://'.$_SERVER['HTTP_HOST'].$sitepath);
  77. break;
  78. default:
  79. break;
  80. }
  81. function step3(&$install_error,&$install_recover){
  82. global $html_title,$html_header,$html_footer;
  83. if ($_POST['submitform'] != 'submit') return;
  84. $db_host = $_POST['db_host'];
  85. $db_port = $_POST['db_port'];
  86. $db_user = $_POST['db_user'];
  87. $db_pwd = $_POST['db_pwd'];
  88. $db_name = $_POST['db_name'];
  89. $db_prefix = $_POST['db_prefix'];
  90. $admin = $_POST['admin'];
  91. $password = $_POST['password'];
  92. if (!$db_host || !$db_port || !$db_user || !$db_pwd || !$db_name || !$db_prefix || !$admin || !$password){
  93. $install_error = '输入不完整,请检查';
  94. }
  95. if(strpos($db_prefix, '.') !== false) {
  96. $install_error .= '数据表前缀为空,或者格式错误,请检查';
  97. }
  98. if(strlen($admin) > 15 || preg_match("/^$|^c:\\con\\con$| |[,\"\s\t\<\>&]|^游客|^Guest/is", $admin)) {
  99. $install_error .= '非法用户名,用户名长度不应当超过 15 个英文字符,且不能包含特殊字符,一般是中文,字母或者数字';
  100. }
  101. if ($install_error != '') reutrn;
  102. if(!@mysql_connect($db_host.":".$db_port, $db_user, $db_pwd)) {
  103. $install_error = '数据库连接失败';return;
  104. }
  105. if(mysql_get_server_info() > '5.0') {
  106. mysql_query("CREATE DATABASE IF NOT EXISTS `$db_name` DEFAULT CHARACTER SET ".DBCHARSET);
  107. } else {
  108. $install_error = '数据库必须为MySQL5.0版本以上';return;
  109. }
  110. if(mysql_errno()) {
  111. $install_error = mysql_error();return ;
  112. }
  113. if($_POST['install_recover'] != 'yes' && ($query = mysql_query("SHOW TABLES FROM $db_name"))) {
  114. while($row = mysql_fetch_row($query)) {
  115. if(preg_match("/^$db_prefix/", $row[0])) {
  116. $install_error = '数据表已存在,继续安装将会覆盖已有数据';
  117. $install_recover = 'yes';
  118. return;
  119. }
  120. }
  121. }
  122. require ('step_4.php');
  123. $sitepath = strtolower(substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')));
  124. $sitepath = str_replace('/install',"",$sitepath);
  125. $auto_site_url = strtolower('http://'.$_SERVER['HTTP_HOST'].$sitepath);
  126. write_config($auto_site_url);
  127. //execute sql
  128. $db = new db;
  129. $db->connect($db_host.":".$db_port, $db_user, $db_pwd, $db_name, DBCHARSET);
  130. if (strtoupper(DBCHARSET) == 'GBK'){
  131. $_charset = 'gbk';
  132. }else{
  133. $_charset = 'utf8';
  134. }
  135. /*$sql = file_get_contents("data/{$_charset}.sql");
  136. $sql .= "\r\n".file_get_contents("data/{$_charset}_cms.sql");
  137. $sql .= "\r\n".file_get_contents("data/{$_charset}_circle.sql");
  138. $sql .= "\r\n".file_get_contents("data/{$_charset}_microshop.sql");*/
  139. $sql = file_get_contents("data/{$_charset}.sql");
  140. /*if ($_POST['demo_data'] == '1'){
  141. $sql .= file_get_contents("data/{$_charset}_add.sql");
  142. }*/
  143. $sql = str_replace("\r\n", "\n", $sql);
  144. runquery($sql,$db_prefix,$db);
  145. showjsmessage('初始化数据 ... 成功 ');
  146. /**
  147. * 转码
  148. */
  149. if (strtoupper(DBCHARSET) == 'GBK'){
  150. $sitename = iconv('UTF-8','GBK',$_POST['site_name']);
  151. $username = iconv('UTF-8','GBK',$_POST['admin']);
  152. $password = iconv('UTF-8','GBK',$_POST['password']);
  153. $store_name = iconv('UTF-8', 'GBK', $_POST['store_name']);
  154. $member_name = iconv('UTF-8', 'GBK', $_POST['member_name']);
  155. $seller_name = iconv('UTF-8', 'GBK', $_POST['seller_name']);
  156. $member_password = iconv('UTF-8', 'GBK', $_POST['member_password']);
  157. }else{
  158. $sitename = $_POST['site_name'];
  159. $username = $_POST['admin'];
  160. $password = $_POST['password'];
  161. $store_name = $_POST['store_name'];
  162. $member_name = $_POST['member_name'];
  163. $seller_name = $_POST['seller_name'];
  164. $member_password = $_POST['member_password'];
  165. }
  166. /**
  167. * 产生随机的md5_key,来替换系统默认的md5_key值
  168. */
  169. $md5_key = md5(random(4).substr(md5($_SERVER['SERVER_ADDR'].$_SERVER['HTTP_USER_AGENT'].$db_host.$db_user.$db_pwd.$db_name.substr(time(), 0, 6)), 8, 6).random(10));
  170. $db->query("UPDATE {$db_prefix}setting SET value='".$sitename."' WHERE name='site_name'");
  171. $db->query("UPDATE {$db_prefix}setting SET value='".$md5_key."' WHERE name='md5_key'");
  172. //更新管理员账号和密码
  173. $password=md5($password);
  174. $member_password=md5($member_password);
  175. $db->query("UPDATE `{$db_prefix}admin` SET `admin_name` = '{$username}' ,`admin_password` = '{$password}' WHERE `admin_id`=1;");
  176. //更新店铺
  177. $db->query("UPDATE `{$db_prefix}member` SET `member_name` = '{$member_name}' ,`member_passwd` = '{$member_password}' WHERE `member_id`=1;");
  178. $db->query("UPDATE `{$db_prefix}store` SET `store_name` = '{$store_name}' ,`member_name` = '{$member_name}',`seller_name` = '{$seller_name}' WHERE `store_id`=1;");
  179. $db->query("UPDATE `{$db_prefix}store_joinin` SET `member_name` = '{$member_name}' ,`seller_name` = '{$seller_name}',`store_name` = '{$store_name}' WHERE `member_id`=1;");
  180. $db->query("UPDATE `{$db_prefix}seller` SET `seller_name` = '{$seller_name}' WHERE `seller_id`=1;");
  181. //管理员帐号密码
  182. /*$db->query("INSERT INTO {$db_prefix}admin (`admin_id`,`admin_name`,`admin_password`,`admin_login_time`,`admin_login_num`,`admin_is_super`) VALUES ('1','$username','". md5($password) ."', '".time()."' ,'0',1);");
  183. // 创建店铺
  184. $db->query("INSERT INTO {$db_prefix}member (`member_id`,`member_name`,`member_passwd`,`member_email`,`member_time`,`member_login_time`,`member_old_login_time`) VALUES ('1', '{$member_name}','". md5($member_password) ."', '', '". time() ."', '". time() ."', '". time() ."')");
  185. $db->query("INSERT INTO {$db_prefix}member_common (`member_id`) VALUES ('1')");
  186. $db->query("INSERT INTO {$db_prefix}store (`store_id`,`store_name`,`grade_id`,`member_id`,`member_name`,`seller_name`,`store_state`,`store_time`) VALUES ('1','{$store_name}','1','1','{$member_name}','{$seller_name}','1', '". time() ."')");
  187. $db->query("INSERT INTO {$db_prefix}store_joinin (`member_id`,`member_name`,`seller_name`,`store_name`,`joinin_state`) VALUES ('1', '{$member_name}', '{$seller_name}', '{$store_name}', '40')");
  188. $db->query("INSERT INTO {$db_prefix}seller (`seller_id`,`seller_name`,`member_id`,`seller_group_id`,`store_id`,`is_admin`) VALUES ('1', '{$seller_name}', '1', '0', '1', '1')");*/
  189. //$db->query("UPDATE `{$db_prefix}navigation` SET nav_url=CONCAT('{$auto_site_url}/',nav_url)");
  190. //$db->query("UPDATE `{$db_prefix}cms_navigation` SET navigation_link=CONCAT('{$auto_site_url}/',navigation_link)");
  191. if ($_POST['demo_data'] == '1'){
  192. $db->query("UPDATE {$db_prefix}store SET `live_store_name`='小信',`live_store_address`='天津市南开区南门外大街2号大悦城购物中心北区4L-27',`live_store_tel`='022-87288577',`live_store_bus`='829路、832路、837路、855路、841路、860路 地铁2号线' WHERE `store_id`=1");
  193. $db->query("UPDATE `{$db_prefix}goods` SET `store_name` = '{$store_name}'");
  194. $db->query("UPDATE `{$db_prefix}goods_common` SET `store_name` = '{$store_name}'");
  195. $db->query("UPDATE `{$db_prefix}groupbuy` SET `store_name` = '{$store_name}'");
  196. $db->query("UPDATE `{$db_prefix}groupbuy_quota` SET `member_name` = '{$member_name}' ,`store_name` = '{$store_name}';");
  197. $db->query("UPDATE `{$db_prefix}p_xianshi` SET `member_name` = '{$member_name}' ,`store_name` = '{$store_name}';");
  198. $db->query("UPDATE `{$db_prefix}p_xianshi_quota` SET `member_name` = '{$member_name}' ,`store_name` = '{$store_name}';");
  199. }
  200. //新增一个标识文件,用来屏蔽重新安装
  201. $fp = @fopen('lock','wb+');
  202. @fclose($fp);
  203. exit("<script type=\"text/javascript\">document.getElementById('install_process').innerHTML = '安装完成,下一步...';document.getElementById('install_process').href='index.php?step=5&sitename={$sitename}&username={$username}&password={$password}';</script>");
  204. exit();
  205. }
  206. include ("step_{$_GET['step']}.php");
  207. //execute sql
  208. function runquery($sql, $db_prefix, $db) {
  209. // global $lang, $tablepre, $db;
  210. if(!isset($sql) || empty($sql)) return;
  211. $sql = str_replace("\r", "\n", str_replace('#__', $db_prefix, $sql));
  212. $ret = array();
  213. $num = 0;
  214. foreach(explode(";\n", trim($sql)) as $query) {
  215. $ret[$num] = '';
  216. $queries = explode("\n", trim($query));
  217. foreach($queries as $query) {
  218. $ret[$num] .= (isset($query[0]) && $query[0] == '#') || (isset($query[1]) && isset($query[1]) && $query[0].$query[1] == '--') ? '' : $query;
  219. }
  220. $num++;
  221. }
  222. unset($sql);
  223. foreach($ret as $query) {
  224. $query = trim($query);
  225. if($query) {
  226. if(substr($query, 0, 12) == 'CREATE TABLE') {
  227. $line = explode('`',$query);
  228. $data_name = $line[1];
  229. showjsmessage('数据表 '.$data_name.' ... 创建成功');
  230. $db->query(droptable($data_name));
  231. /**
  232. * 转码
  233. */
  234. if (strtoupper(DBCHARSET) == 'GBK'){
  235. $query = iconv('GBK','UTF-8',$query);
  236. }
  237. $db->query($query);
  238. unset($line,$data_name);
  239. } else {
  240. $db->query($query);
  241. }
  242. }
  243. }
  244. }
  245. //抛出JS信息
  246. function showjsmessage($message) {
  247. echo '<script type="text/javascript">showmessage(\''.addslashes($message).' \');</script>'."\r\n";
  248. flush();
  249. ob_flush();
  250. }
  251. //写入config文件
  252. function write_config($url) {
  253. extract($GLOBALS, EXTR_SKIP);
  254. $config = 'data/config.ini.php';
  255. $configfile = @file_get_contents($config);
  256. $configfile = trim($configfile);
  257. $configfile = substr($configfile, -2) == '?>' ? substr($configfile, 0, -2) : $configfile;
  258. if (strtoupper(DBCHARSET) == 'GBK'){
  259. $charset = 'GBK';
  260. }else {
  261. $charset = 'UTF-8';
  262. }
  263. $db_host = $_POST['db_host'];
  264. $db_port = $_POST['db_port'];
  265. $db_user = $_POST['db_user'];
  266. $db_pwd = $_POST['db_pwd'];
  267. $db_name = $_POST['db_name'];
  268. $db_prefix = $_POST['db_prefix'];
  269. $admin = $_POST['admin'];
  270. $password = $_POST['password'];
  271. $db_type = (extension_loaded('mysqli')) ? 'mysqli' : 'mysql';
  272. $cookie_pre = strtoupper(substr(md5(random(6).substr($_SERVER['HTTP_USER_AGENT'].md5($_SERVER['SERVER_ADDR'].$db_host.$db_user.$db_pwd.$db_name.substr(time(), 0, 6)), 8, 6).random(5)),0,4)).'_';
  273. $configfile = str_replace("===url===", $url, $configfile);
  274. $configfile = str_replace("===node_ip===", $_SERVER["SERVER_ADDR"], $configfile);
  275. $configfile = str_replace("===db_prefix===", $db_prefix, $configfile);
  276. $configfile = str_replace("===db_driver===", $db_type, $configfile);
  277. $configfile = str_replace("===db_charset===", $charset, $configfile);
  278. $configfile = str_replace("===db_host===", $db_host, $configfile);
  279. $configfile = str_replace("===db_user===", $db_user, $configfile);
  280. $configfile = str_replace("===db_pwd===", $db_pwd, $configfile);
  281. $configfile = str_replace("===db_name===", $db_name, $configfile);
  282. $configfile = str_replace("===db_port===", $db_port, $configfile);
  283. $configfile = str_replace("===setup_date===", date("Y-m-d H:i:s",time()), $configfile);
  284. $configfile = str_replace("===cookie_pre===", $cookie_pre, $configfile);
  285. @file_put_contents('../data/config/config.ini.php', $configfile);
  286. }
  287. ?>