InstallModule.class.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <?php
  2. /**
  3. * @name eolinker ams open source,eolinker开源版本
  4. * @link https://www.eolinker.com/
  5. * @package eolinker
  6. * @author www.eolinker.com 广州银云信息科技有限公司 ©2015-2018
  7. * eoLinker是目前全球领先、国内最大的在线API接口管理平台,提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能,旨在解决由于前后端分离导致的开发效率低下问题。
  8. * 如在使用的过程中有任何问题,欢迎加入用户讨论群进行反馈,我们将会以最快的速度,最好的服务态度为您解决问题。
  9. *
  10. * eoLinker AMS开源版的开源协议遵循Apache License 2.0,如需获取最新的eolinker开源版以及相关资讯,请访问:https://www.eolinker.com/#/os/download
  11. *
  12. * 官方网站:https://www.eolinker.com/
  13. * 官方博客以及社区:http://blog.eolinker.com/
  14. * 使用教程以及帮助:http://help.eolinker.com/
  15. * 商务合作邮箱:market@eolinker.com
  16. * 用户讨论QQ群:284421832
  17. */
  18. class InstallModule
  19. {
  20. /**
  21. * 检测环境
  22. * @param $dbURL string 数据库主机地址
  23. * @param $dbName string 数据库名
  24. * @param $dbUser string 数据库用户名
  25. * @param $dbPassword string 数据库密码
  26. * @return array
  27. */
  28. public function checkoutEnv(&$dbURL, &$dbName, &$dbUser, &$dbPassword)
  29. {
  30. $result = array('fileWrite' => 0, 'db' => 0, 'curl' => 0, 'mbString' => 0, 'sessionPath' => 0, 'isInstalled' => 0);
  31. //检测配置目录写入权限
  32. try {
  33. if (file_put_contents(PATH_FW . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'fileWriteTest.txt', 'ok')) {
  34. $result['fileWrite'] = 1;
  35. unlink(PATH_FW . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'fileWriteTest.txt');
  36. //检测导出目录写入权限
  37. if (file_put_contents('./dump' . DIRECTORY_SEPARATOR . 'fileWriteTest.txt', 'ok')) {
  38. $result['fileWrite'] = 1;
  39. unlink('./dump' . DIRECTORY_SEPARATOR . 'fileWriteTest.txt');
  40. //检测根目录写入权限
  41. if (file_put_contents('../fileWriteTest.txt', 'ok')) {
  42. $result['fileWrite'] = 1;
  43. unlink('../fileWriteTest.txt');
  44. } else
  45. $result['fileWrite'] = 0;
  46. } else
  47. $result['fileWrite'] = 0;
  48. } else
  49. $result['fileWrite'] = 0;
  50. } catch (\Exception $e) {
  51. $result['fileWrite'] = '0';
  52. $result['fileWriteError'] = $e->getMessage();
  53. }
  54. //检测数据库连接
  55. try {
  56. $dbURL = explode(':', $dbURL);
  57. if (empty($dbURL[1]))
  58. $dbURL[1] = '3306';
  59. if (!class_exists('PDO')) {
  60. $result['db'] = 0;
  61. } else {
  62. $conInfo = 'mysql:host=' . $dbURL[0] . ';port=' . $dbURL[1] . ';dbname=' . $dbName . ';charset=utf8';
  63. if ($con = new \PDO($conInfo, $dbUser, $dbPassword)) {
  64. $result['db'] = 1;
  65. //检测数据库是否有内容(已经安装过)
  66. $stat = $con->query("SELECT * FROM eo_user;");
  67. if($stat) {
  68. $table_name = $stat -> fetch(\PDO::FETCH_ASSOC);
  69. if ($table_name) {
  70. $result['isInstalled'] = 1;
  71. } else {
  72. $result['isInstalled'] = 0;
  73. }
  74. }else{
  75. $result['isInstalled'] = 0;
  76. }
  77. } else {
  78. $result['db'] = 0;
  79. }
  80. }
  81. } catch (\Exception $e) {
  82. $result['db'] = 0;
  83. $result['dbError'] = $e->getMessage();
  84. }
  85. //检测CURL
  86. try {
  87. if (!function_exists('curl_init')) {
  88. $result['curl'] = 0;
  89. } else {
  90. $ch = curl_init(realpath('./index.php'));
  91. if ($ch) {
  92. curl_close($ch);
  93. $result['curl'] = 1;
  94. } else
  95. $result['curl'] = 0;
  96. }
  97. } catch (\Exception $e) {
  98. $result['curl'] = 0;
  99. $result['curlError'] = $e->getMessage();
  100. }
  101. //检测mbString
  102. try {
  103. if (!function_exists('mb_strlen')) {
  104. $result['mbString'] = 0;
  105. } else {
  106. $len = mb_strlen('test', 'utf8');
  107. if ($len) {
  108. $result['mbString'] = 1;
  109. } else {
  110. $result['mbString'] = 0;
  111. }
  112. }
  113. } catch (\Exception $e) {
  114. $result['mbString'] = 0;
  115. $result['mbStringError'] = $e->getMessage();
  116. }
  117. //检测session路径写入权限
  118. try {
  119. if (session_save_path() == '') {
  120. $session_path = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? 'C:/Windows/Temp' : '/tmp';
  121. } else {
  122. $session_path = session_save_path();
  123. }
  124. if (is_writable($session_path)) {
  125. $result['sessionPath'] = 1;
  126. } else {
  127. $result['sessionPath'] = 0;
  128. }
  129. } catch (\Exception $e) {
  130. $result['sessionPath'] = 0;
  131. $result['sessionPathError'] = $e->getMessage();
  132. }
  133. return $result;
  134. }
  135. /**
  136. * 写入配置文件
  137. * @param $dbURL string 数据库主机地址
  138. * @param $dbName string 数据库名
  139. * @param $dbUser string 数据库用户名
  140. * @param $dbPassword string 数据库密码
  141. * @param $websiteName string 网站名称
  142. * @param $language string 语言
  143. * @return bool
  144. */
  145. public function createConfigFile(&$dbURL, &$dbName, &$dbUser, &$dbPassword, &$websiteName, &$language)
  146. {
  147. if (file_exists(PATH_FW . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'eo_config.php')) {
  148. //不存在配置文件,需要跳转至引导页面进行安装
  149. unlink(realpath(PATH_FW . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'eo_config.php'));
  150. }
  151. $dbURL = explode(':', $dbURL);
  152. if (empty($dbURL[1]))
  153. $dbURL[1] = '3306';
  154. $websiteName = isset($websiteName) ? $websiteName : 'eolinker开源版';
  155. $config = "<?php
  156. //主机地址
  157. defined('DB_URL') or define('DB_URL', '{$dbURL[0]}');
  158. //主机端口,默认mysql为3306
  159. defined('DB_PORT') or define('DB_PORT', '{$dbURL[1]}');
  160. //连接数据库的用户名
  161. defined('DB_USER') or define('DB_USER', '{$dbUser}');
  162. //连接数据库的密码,推荐使用随机生成的字符串
  163. defined('DB_PASSWORD') or define('DB_PASSWORD', '{$dbPassword}');
  164. //数据库名
  165. defined('DB_NAME') or define('DB_NAME', '{$dbName}');
  166. //是否允许新用户注册
  167. defined('ALLOW_REGISTER') or define('ALLOW_REGISTER', TRUE);
  168. //是否允许更新项目,如果设置为FALSE,那么自动更新和手动更新都将失效
  169. defined('ALLOW_UPDATE') or define('ALLOW_UPDATE', TRUE);
  170. //网站名称
  171. defined('WEBSITE_NAME') or define('WEBSITE_NAME', '{$websiteName}');
  172. //数据表前缀
  173. defined('DB_TABLE_PREFIXION') or define('DB_TABLE_PREFIXION', 'eo');
  174. //语言
  175. defined('LANGUAGE') or define ('LANGUAGE', '{$language}');
  176. ?>";
  177. if ($configFile = file_put_contents(PATH_FW . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'eo_config.php', $config))
  178. return TRUE;
  179. else
  180. return FALSE;
  181. }
  182. /**
  183. * 安装数据库
  184. */
  185. public
  186. function installDatabase()
  187. {
  188. //读取数据库文件
  189. $sql = file_get_contents(PATH_FW . DIRECTORY_SEPARATOR . 'db/eolinker_os_mysql.sql');
  190. $sqlArray = array_filter(explode(';', $sql));
  191. $dao = new InstallDao;
  192. $result = $dao->installDatabase($sqlArray);
  193. return $result;
  194. }
  195. }
  196. ?>