ajax.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. <?php
  2. // --------
  3. // 如果你能在浏览器中看到本句话,则证明你没有安装好PHP运行环境。请先安装好PHP运行环境
  4. // --------
  5. ini_set("display_errors", "Off");
  6. error_reporting(E_ALL | E_STRICT);
  7. header("Content-type: text/html; charset=utf-8");
  8. include("common.php");
  9. if($f = file_get_contents("./install.lock")){
  10. ajax_out(L("lock"),10099);
  11. }
  12. if(!new_is_writeable("./")){
  13. ajax_out(L("not_writable_install"),10098);
  14. }
  15. if(!new_is_writeable("../Public/Uploads")){
  16. ajax_out(L("not_writable_upload"),10098);
  17. }
  18. if(!new_is_writeable("../Application/Runtime")){
  19. ajax_out(L("not_writable_runtime"),10095);
  20. }
  21. if(!new_is_writeable("../Application/Common/Conf/config.php")){
  22. ajax_out(L("not_writable_config"),10094);
  23. }
  24. if(!new_is_writeable("../Application/Home/Conf/config.php")){
  25. ajax_out(L("not_writable_home_config"),10098);
  26. }
  27. $db_type = $_POST["db_type"] ? $_POST["db_type"] :"sqlite";
  28. if ($db_type == "sqlite") {
  29. if(!new_is_writeable("../Sqlite")){
  30. ajax_out(L("not_writable_sqlite"),10097);
  31. }
  32. if(!new_is_writeable("../Sqlite/showdoc.db.php")){
  33. ajax_out(L("not_writable_sqlite_db"),10096);
  34. }
  35. user_sqlite();
  36. }
  37. elseif ($db_type == "mysql") {
  38. user_mysql();
  39. }
  40. function user_sqlite(){
  41. clear_runtime();//清除缓存
  42. write_home_config();
  43. $config =
  44. <<<EOD
  45. <?php
  46. return array(
  47. //'配置项'=>'配置值'
  48. //使用sqlite数据库(ShowDoc默认)
  49. 'DB_TYPE' => 'Sqlite',
  50. 'DB_NAME' => 'Sqlite/showdoc.db.php',
  51. //使用mysql数据库
  52. //'DB_TYPE' => 'mysql',
  53. //'DB_NAME' => 'showdoc',
  54. 'DB_HOST' => 'localhost',
  55. 'DB_USER' => 'showdoc',
  56. 'DB_PWD' => 'showdoc123456',
  57. 'DB_PORT' => 3306, // 端口
  58. 'DB_PREFIX' => '', // 数据库表前缀
  59. 'DB_CHARSET'=> 'utf8', // 字符集
  60. 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志
  61. 'URL_HTML_SUFFIX' => '',//url伪静态后缀
  62. 'URL_MODEL' => 3 ,//URL兼容模式
  63. 'URL_ROUTER_ON' => true,
  64. 'URL_ROUTE_RULES'=>array(
  65. ':id\d' => 'Home/Item/Show?item_id=:1',
  66. ':domain\s$' => 'Home/Item/Show?item_domain=:1',//item的个性域名
  67. 'uid/:id\d' => 'Home/Item/showByUid?uid=:1',
  68. ),
  69. 'URL_CASE_INSENSITIVE'=>true,
  70. 'SHOW_ERROR_MSG' => true, // 显示错误信息,这样在部署模式下也能显示错误
  71. );
  72. EOD;
  73. $ret = file_put_contents("../Application/Common/Conf/config.php", $config);
  74. if ($ret) {
  75. file_put_contents("./install.lock","http://www.showdoc.cc/");
  76. ajax_out(L("install_success"));
  77. }else{
  78. ajax_out(L("install_config_not_writable"),10001);
  79. }
  80. }
  81. function user_mysql(){
  82. $db_host = $_POST["db_host"] ;
  83. $db_user = $_POST["db_user"] ;
  84. $db_port = $_POST["db_port"] ? $_POST["db_port"] :3306 ;
  85. $db_name = $_POST["db_name"] ;
  86. $db_password = $_POST["db_password"] ;
  87. clear_runtime();//清除缓存
  88. //检测数据库配置是否能链接得上
  89. $con = mysqli_connect($db_host,$db_user,$db_password,$db_name,$db_port);
  90. if (!$con ) {
  91. ajax_out(L("db_wrong"),10002);
  92. exit();
  93. }
  94. mysqli_query($con, "SET NAMES UTF8");
  95. $row = mysqli_fetch_array(mysqli_query($con, " SELECT COUNT(*) FROM user "));
  96. if ($row) {
  97. ajax_out(L("db_has_data"),10003);
  98. exit();
  99. }
  100. //开始导入mysql数据库
  101. $ret = import_mysql($con);
  102. if (!$ret) {
  103. ajax_out(L("create_table_fail"),10004);
  104. exit();
  105. }
  106. write_home_config();
  107. $config = "<?php ";
  108. $config .= "
  109. return array(
  110. //'配置项'=>'配置值'
  111. //使用sqlite数据库(ShowDoc默认)
  112. //'DB_TYPE' => 'Sqlite',
  113. //'DB_NAME' => 'Sqlite/showdoc.db.php',
  114. //使用mysql数据库
  115. 'DB_TYPE' => 'mysql',
  116. 'DB_NAME' => '{$db_name}',
  117. 'DB_HOST' => '{$db_host}',
  118. 'DB_USER' => '{$db_user}',
  119. 'DB_PWD' => '{$db_password}',
  120. 'DB_PORT' => {$db_port}, // 端口
  121. 'DB_PREFIX' => '', // 数据库表前缀
  122. 'DB_CHARSET'=> 'utf8', // 字符集
  123. 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志
  124. 'URL_HTML_SUFFIX' => '',//url伪静态后缀
  125. 'URL_MODEL' => 3 ,//URL兼容模式
  126. 'URL_ROUTER_ON' => true,
  127. 'URL_ROUTE_RULES'=>array(
  128. ':id\d' => 'Home/Item/Show?item_id=:1',
  129. ':domain\s$' => 'Home/Item/Show?item_domain=:1',//item的个性域名
  130. 'uid/:id\d' => 'Home/Item/showByUid?uid=:1',
  131. ),
  132. 'URL_CASE_INSENSITIVE'=>true,
  133. 'SHOW_ERROR_MSG' => true, // 显示错误信息,这样在部署模式下也能显示错误
  134. );";
  135. $ret = file_put_contents("../Application/Common/Conf/config.php", $config);
  136. if ($ret) {
  137. file_put_contents("./install.lock","http://www.showdoc.cc/");
  138. ajax_out(L("install_success"));
  139. }else{
  140. ajax_out(L("install_config_not_writable"),10001);
  141. }
  142. }
  143. function import_mysql($con){
  144. //创建目录表
  145. $sql = "CREATE TABLE IF NOT EXISTS `catalog` (
  146. `cat_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '目录id',
  147. `cat_name` varchar(20) NOT NULL DEFAULT '' COMMENT '目录名',
  148. `item_id` int(10) NOT NULL DEFAULT '0' COMMENT '所在的项目id',
  149. `s_number` int(10) NOT NULL DEFAULT '99' COMMENT '顺序号。数字越小越靠前。若此值全部相等时则按id排序',
  150. `addtime` int(11) NOT NULL DEFAULT '0',
  151. `parent_cat_id` int(10) NOT NULL DEFAULT '0' COMMENT '上一级目录的id',
  152. `level` int(10) NOT NULL DEFAULT '2' COMMENT '2为二级目录,3为三级目录',
  153. PRIMARY KEY (`cat_id`),
  154. KEY `addtime` (`addtime`),
  155. KEY `s_number` (`s_number`)
  156. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='目录表' AUTO_INCREMENT=1 ";
  157. mysqli_query($con, $sql);
  158. //创建item表
  159. $sql = "CREATE TABLE IF NOT EXISTS `item` (
  160. `item_id` int(10) NOT NULL AUTO_INCREMENT,
  161. `item_name` varchar(50) NOT NULL DEFAULT '',
  162. `item_description` varchar(225) NOT NULL DEFAULT '' COMMENT '项目描述',
  163. `uid` int(10) NOT NULL DEFAULT '0',
  164. `username` varchar(50) NOT NULL DEFAULT '',
  165. `password` varchar(50) NOT NULL DEFAULT '',
  166. `item_domain` varchar(50) NOT NULL DEFAULT '',
  167. `addtime` int(11) NOT NULL DEFAULT '0',
  168. `last_update_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后更新时间',
  169. PRIMARY KEY (`item_id`),
  170. KEY `addtime` (`addtime`)
  171. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='项目表' AUTO_INCREMENT=1 ";
  172. mysqli_query($con, $sql);
  173. //创建项目成员表
  174. $sql = "CREATE TABLE IF NOT EXISTS `item_member` (
  175. `item_member_id` int(10) NOT NULL AUTO_INCREMENT,
  176. `item_id` int(10) NOT NULL DEFAULT '0',
  177. `uid` int(10) NOT NULL DEFAULT '0',
  178. `username` varchar(50) NOT NULL DEFAULT '',
  179. `addtime` int(11) NOT NULL DEFAULT '0',
  180. PRIMARY KEY (`item_member_id`)
  181. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='项目成员表' AUTO_INCREMENT=1 ";
  182. mysqli_query($con, $sql);
  183. //创建项目page表
  184. $sql = "CREATE TABLE IF NOT EXISTS `page` (
  185. `page_id` int(10) NOT NULL AUTO_INCREMENT,
  186. `author_uid` int(10) NOT NULL DEFAULT '0' COMMENT '页面作者uid',
  187. `author_username` varchar(50) NOT NULL DEFAULT '' COMMENT '页面作者名字',
  188. `item_id` int(10) NOT NULL DEFAULT '0',
  189. `cat_id` int(10) NOT NULL DEFAULT '0',
  190. `page_title` varchar(50) NOT NULL DEFAULT '',
  191. `page_content` text NOT NULL,
  192. `s_number` int(10) NOT NULL DEFAULT '99' COMMENT '顺序号。数字越小越靠前。若此值全部相等时则按id排序',
  193. `addtime` int(11) NOT NULL DEFAULT '0',
  194. PRIMARY KEY (`page_id`),
  195. KEY `addtime` (`addtime`),
  196. KEY `s_number` (`s_number`)
  197. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='文章页面表' AUTO_INCREMENT=1 ";
  198. mysqli_query($con, $sql);
  199. //创建项目page_history表
  200. $sql = "CREATE TABLE IF NOT EXISTS `page_history` (
  201. `page_history_id` int(10) NOT NULL AUTO_INCREMENT,
  202. `page_id` int(10) NOT NULL DEFAULT '0',
  203. `author_uid` int(10) NOT NULL DEFAULT '0' COMMENT '页面作者uid',
  204. `author_username` varchar(50) NOT NULL DEFAULT '' COMMENT '页面作者名字',
  205. `item_id` int(10) NOT NULL DEFAULT '0',
  206. `cat_id` int(10) NOT NULL DEFAULT '0',
  207. `page_title` varchar(50) NOT NULL DEFAULT '',
  208. `page_content` text NOT NULL,
  209. `s_number` int(10) NOT NULL DEFAULT '99' COMMENT '顺序号。数字越小越靠前。若此值全部相等时则按id排序',
  210. `addtime` int(11) NOT NULL DEFAULT '0',
  211. PRIMARY KEY (`page_history_id`),
  212. KEY `addtime` (`addtime`),
  213. KEY `page_id` (`page_id`)
  214. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='页面历史表' AUTO_INCREMENT=1 ";
  215. mysqli_query($con, $sql);
  216. //创建项目user表
  217. $sql = "CREATE TABLE IF NOT EXISTS `user` (
  218. `uid` int(10) NOT NULL AUTO_INCREMENT,
  219. `username` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT '',
  220. `groupid` tinyint(2) NOT NULL DEFAULT '2' COMMENT '1为超级管理员,2为普通用户',
  221. `name` varchar(15) CHARACTER SET utf8 DEFAULT '',
  222. `avatar` varchar(200) CHARACTER SET utf8 DEFAULT '' COMMENT '头像',
  223. `avatar_small` varchar(200) DEFAULT '',
  224. `email` varchar(50) CHARACTER SET utf8 DEFAULT '',
  225. `password` varchar(50) CHARACTER SET utf8 NOT NULL,
  226. `cookie_token` varchar(50) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '实现cookie自动登录的token凭证',
  227. `cookie_token_expire` int(11) NOT NULL DEFAULT '0',
  228. `reg_time` int(11) NOT NULL DEFAULT '0',
  229. `last_login_time` int(11) NOT NULL DEFAULT '0',
  230. PRIMARY KEY (`uid`),
  231. UNIQUE KEY `username` (`username`) USING BTREE
  232. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='用户表' AUTO_INCREMENT=1 ";
  233. $ret = mysqli_query($con, $sql);
  234. if ($ret) {
  235. return true;
  236. }else{
  237. return false;
  238. }
  239. }
  240. function write_home_config(){
  241. $lang = $_REQUEST['lang'] ? $_REQUEST['lang'] :"zh";
  242. if ($lang == 'en') {
  243. $DEFAULT_LANG = 'en-us';
  244. }else{
  245. $DEFAULT_LANG = 'zh-cn';
  246. }
  247. $config = "<?php ";
  248. $config .= "
  249. return array(
  250. //'配置项'=>'配置值'
  251. 'LANG_SWITCH_ON' => true, // 开启语言包功能
  252. 'LANG_AUTO_DETECT' => false, // 自动侦测语言 开启多语言功能后有效
  253. 'DEFAULT_LANG' => '{$DEFAULT_LANG}', // 默认语言
  254. 'LANG_LIST' => 'zh-cn,en-us', // 允许切换的语言列表 用逗号分隔
  255. 'VAR_LANGUAGE' => 'l', // 默认语言切换变量
  256. );";
  257. $ret = file_put_contents("../Application/Home/Conf/config.php", $config);
  258. }