Science.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?php
  2. namespace app\admin\controller\setting;
  3. use app\admin\controller\Controller;
  4. /**
  5. * 环境检测
  6. * Class Science
  7. * @package app\admin\controller\setting
  8. */
  9. class Science extends Controller
  10. {
  11. /**
  12. * 状态class
  13. * @var array
  14. */
  15. private $statusClass = [
  16. 'normal' => '',
  17. 'warning' => 'am-active',
  18. 'danger' => 'am-danger'
  19. ];
  20. /**
  21. * 环境检测
  22. */
  23. public function index()
  24. {
  25. return $this->fetch('index', [
  26. 'statusClass' => $this->statusClass,
  27. 'phpinfo' => $this->phpinfo(), // PHP环境要求
  28. 'server' => $this->server(), // 服务器信息
  29. 'writeable' => $this->writeable(), // 目录权限监测
  30. ]);
  31. }
  32. /**
  33. * 服务器信息
  34. * @return array
  35. */
  36. private function server()
  37. {
  38. return [
  39. 'system' => [
  40. 'name' => '服务器操作系统',
  41. 'value' => PHP_OS,
  42. 'status' => PHP_SHLIB_SUFFIX === 'dll' ? 'warning' : 'normal',
  43. 'remark' => '建议使用 Linux 系统以提升程序性能'
  44. ],
  45. 'webserver' => [
  46. 'name' => 'Web服务器环境',
  47. 'value' => $this->request->server('SERVER_SOFTWARE'),
  48. 'status' => PHP_SAPI === 'isapi' ? 'warning' : 'normal',
  49. 'remark' => '建议使用 Apache 或 Nginx 以提升程序性能'
  50. ],
  51. 'php' => [
  52. 'name' => 'PHP版本',
  53. 'value' => PHP_VERSION,
  54. 'status' => version_compare(PHP_VERSION, '5.4.0') === -1 ? 'danger' : 'normal',
  55. 'remark' => 'PHP版本必须为 5.4.0 以上'
  56. ],
  57. 'upload_max' => [
  58. 'name' => '文件上传限制',
  59. 'value' => @ini_get('file_uploads') ? ini_get('upload_max_filesize') : 'unknow',
  60. 'status' => 'normal',
  61. 'remark' => ''
  62. ],
  63. 'web_path' => [
  64. 'name' => '程序运行目录',
  65. 'value' => str_replace('\\', '/', WEB_PATH),
  66. 'status' => 'normal',
  67. 'remark' => ''
  68. ],
  69. ];
  70. }
  71. /**
  72. * PHP环境要求
  73. * @return array
  74. */
  75. private function phpinfo()
  76. {
  77. // pre( get_loaded_extensions() );
  78. return [
  79. 'php_version' => [
  80. 'name' => 'PHP版本',
  81. 'value' => '5.4.0及以上',
  82. 'status' => version_compare(PHP_VERSION, '5.4.0') === -1 ? 'danger' : 'normal',
  83. 'remark' => 'PHP版本必须为 5.4.0及以上'
  84. ],
  85. 'curl' => [
  86. 'name' => 'CURL',
  87. 'value' => '支持',
  88. 'status' => extension_loaded('curl') && function_exists('curl_init') ? 'normal' : 'danger',
  89. 'remark' => '您的PHP环境不支持CURL, 系统无法正常运行'
  90. ],
  91. 'openssl' => [
  92. 'name' => 'OpenSSL',
  93. 'value' => '支持',
  94. 'status' => extension_loaded('openssl') ? 'normal' : 'danger',
  95. 'remark' => '没有启用OpenSSL, 将无法访问微信平台的接口'
  96. ],
  97. 'pdo' => [
  98. 'name' => 'PDO',
  99. 'value' => '支持',
  100. 'status' => extension_loaded('PDO') && extension_loaded('pdo_mysql') ? 'normal' : 'danger',
  101. 'remark' => '您的PHP环境不支持PDO, 系统无法正常运行'
  102. ],
  103. 'gd' => [
  104. 'name' => 'GD',
  105. 'value' => '支持',
  106. 'status' => extension_loaded('gd') ? 'normal' : 'danger',
  107. 'remark' => '您的PHP环境不支持GD, 系统无法正常生成图片'
  108. ],
  109. 'bcmath' => [
  110. 'name' => 'BCMath',
  111. 'value' => '支持',
  112. 'status' => extension_loaded('bcmath') ? 'normal' : 'danger',
  113. 'remark' => '您的PHP环境不支持BCMath, 系统无法正常运行'
  114. ],
  115. 'mbstring' => [
  116. 'name' => 'mbstring',
  117. 'value' => '支持',
  118. 'status' => extension_loaded('mbstring') ? 'normal' : 'danger',
  119. 'remark' => '您的PHP环境不支持mbstring, 系统无法正常运行'
  120. ],
  121. 'SimpleXML' => [
  122. 'name' => 'SimpleXML',
  123. 'value' => '支持',
  124. 'status' => extension_loaded('SimpleXML') ? 'normal' : 'danger',
  125. 'remark' => '您的PHP环境不支持SimpleXML, 系统无法解析xml 无法使用微信支付'
  126. ],
  127. ];
  128. }
  129. /**
  130. * 目录权限监测
  131. */
  132. private function writeable()
  133. {
  134. $paths = [
  135. 'uploads' => realpath(WEB_PATH) . '/uploads/',
  136. 'temp' => realpath(WEB_PATH) . '/temp/',
  137. 'wxpay_log' => realpath(APP_PATH) . '/common/library/wechat/logs/',
  138. 'wxpay_cert' => realpath(APP_PATH) . '/common/library/wechat/cert/',
  139. 'behavior_log' => realpath(APP_PATH) . '/task/behavior/logs/',
  140. ];
  141. return [
  142. 'uploads' => [
  143. 'name' => '文件上传目录',
  144. 'value' => str_replace('\\', '/', $paths['uploads']),
  145. 'status' => $this->checkWriteable($paths['uploads']) ? 'normal' : 'danger',
  146. 'remark' => '目录不可写,系统将无法正常上传文件'
  147. ],
  148. 'temp' => [
  149. 'name' => '临时文件目录',
  150. 'value' => str_replace('\\', '/', $paths['temp']),
  151. 'status' => $this->checkWriteable($paths['temp']) ? 'normal' : 'danger',
  152. 'remark' => '目录不可写,系统将无法正常写入文件'
  153. ],
  154. 'wxpay_log' => [
  155. 'name' => '微信支付日志目录',
  156. 'value' => str_replace('\\', '/', $paths['wxpay_log']),
  157. 'status' => $this->checkWriteable($paths['wxpay_log']) ? 'normal' : 'danger',
  158. 'remark' => '目录不可写,系统将无法正常写入文件'
  159. ],
  160. 'wxpay_cert' => [
  161. 'name' => '微信支付证书目录',
  162. 'value' => str_replace('\\', '/', $paths['wxpay_cert']),
  163. 'status' => $this->checkWriteable($paths['wxpay_cert']) ? 'normal' : 'danger',
  164. 'remark' => '目录不可写,系统将无法正常写入文件'
  165. ],
  166. // 'behavior_log' => [
  167. // 'name' => '自动任务日志目录',
  168. // 'value' => str_replace('\\', '/', $paths['behavior_log']),
  169. // 'status' => $this->checkWriteable($paths['behavior_log']) ? 'normal' : 'danger',
  170. // 'remark' => '目录不可写,系统将无法正常上传文件'
  171. // ],
  172. ];
  173. }
  174. /**
  175. * 检查目录是否可写
  176. * @param $path
  177. * @return bool
  178. */
  179. private function checkWriteable($path)
  180. {
  181. try {
  182. !is_dir($path) && mkdir($path, 0755);
  183. if (!is_dir($path))
  184. return false;
  185. $fileName = $path . '/_test_write.txt';
  186. if ($fp = fopen($fileName, 'w')) {
  187. return fclose($fp) && unlink($fileName);
  188. }
  189. } catch (\Exception $e) {
  190. }
  191. return false;
  192. }
  193. }