心理咨询网
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Check.php 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * @copyright (C)2016-2099 Hnaoyun Inc.
  4. * @author XingMeng
  5. * @email hnxsh@foxmail.com
  6. * @date 2016年11月6日
  7. * 系统环境检查类
  8. */
  9. namespace core\basic;
  10. use core\basic\Config;
  11. class Check
  12. {
  13. // 启动应用检查
  14. public static function checkApp()
  15. {
  16. if (! is_dir(APP_PATH)) {
  17. error('您的系统文件无法正常读取,请检查是否上传完整!');
  18. }
  19. // 判断自动转换状态
  20. if (PHP_VERSION < '7.0' && function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) {
  21. error('您的服务器环境PHP.ini中magic_quotes_gpc配置为On状态,会导致数据存储异常,请设置为Off状态或切换为更高版本PHP。');
  22. }
  23. // 判断目录列表函数
  24. if (! function_exists('scandir')) {
  25. error('您的服务器环境PHP.ini配置中已经禁用scandir函数,会导致无法正常读取配置及模板文件,请先去除。');
  26. }
  27. // 检查gd扩展
  28. if (! extension_loaded('gd')) {
  29. error('您的服务器环境不支持gd扩展,将无法使用验证码!');
  30. }
  31. // 检查mbstring扩展
  32. if (! extension_loaded('mbstring')) {
  33. error('您的服务器环境不支持mbstring扩展,请先安装并启用!');
  34. }
  35. // 检查curl扩展
  36. if (! extension_loaded('curl')) {
  37. error('您的服务器环境不支持curl扩展,请先安装并启用!');
  38. }
  39. }
  40. // 检查PHP版本
  41. public static function checkPHP()
  42. {
  43. if (version_compare(phpversion(),'7.0.0','<')) {
  44. error('您服务器的PHP版本太低,本程序要求版本不小于 7.0');
  45. }
  46. }
  47. // 检查mysqli扩展库
  48. public static function checkMysqli()
  49. {
  50. if (! extension_loaded('mysqli')) {
  51. error('您的服务器环境不支持mysqli扩展,将无法正常使用数据库!');
  52. }
  53. }
  54. // 检查curl扩展库
  55. public static function checkCurl()
  56. {
  57. if (! extension_loaded('curl')) {
  58. error('您的服务器环境不支持curl扩展,将无法使用API模式!');
  59. }
  60. }
  61. // 目录路径检查,不存在时根据配置文件选择是否自动创建
  62. public static function checkBasicDir()
  63. {
  64. if (Config::get('debug')) {
  65. check_dir(APP_PATH, true);
  66. check_dir(APP_PATH . '/common', true);
  67. check_dir(CONF_PATH, true);
  68. }
  69. // 目录权限判断
  70. if (! check_dir(RUN_PATH, true)) {
  71. error('缓存目录创建失败,可能写入权限不足!' . RUN_PATH);
  72. }
  73. if (! check_dir(DOC_PATH . STATIC_DIR . '/upload', true)) {
  74. error('上传目录创建失败,可能写入权限不足!' . DOC_PATH . STATIC_DIR . '/upload');
  75. }
  76. }
  77. // 检查系统默认首页的文件是否存在,不存在进行自动创建
  78. public static function checkAppFile()
  79. {
  80. $apps = Config::get('public_app', true);
  81. check_dir(APP_CONTROLLER_PATH, true);
  82. check_file(CONF_PATH . '/config.php', true, "<?php \r\n return array(\r\n\t //'控制项'=>'值' 以分号,分割\r\n);");
  83. check_file(APP_CONTROLLER_PATH . '/IndexController.php', true, "<?php \r\r namespace app\\" . M . "\\controller;\r\r use core\\basic\\Controller; \r\r class IndexController extends Controller{\r\r\tpublic function index(){\r\t\t\$this->display('index.html');\r\t} \r\r}");
  84. check_file(APP_PATH . '/common/' . ucfirst(M) . 'Controller.php', true, "<?php \r\rnamespace app\\common;\r\ruse core\\basic\\Controller; \r\rclass " . ucfirst(M) . "Controller extends Controller{ \r\r}");
  85. // check_file(APP_PATH . '/common/' . ucfirst(M) . 'Model.php', true, "<?php \r\rnamespace app\\common;\r\ruse core\\basic\\Model; \r\rclass " . ucfirst(M) . "Model extends Model{ \r\r}");
  86. }
  87. // 检查客户端浏览器是否被允许,在同时设置黑白名单时,黑名单具有优先级更高,在设置了白名单时,将只允许白名单访问
  88. public static function checkBs()
  89. {
  90. $allow_bs = Config::get('access_rule.allow_bs', true);
  91. $deny_bs = Config::get('access_rule.deny_bs', true);
  92. // 都未设置时,直接通过
  93. if (! $allow_bs && ! $deny_bs)
  94. return true;
  95. // 客户端使用的系统
  96. $user_bs = get_user_bs();
  97. // 如果在黑名单则直接拒绝
  98. if (in_array($user_bs, $deny_bs)) {
  99. error('本站点设置了不允许' . $user_bs . '内核浏览器访问,请使用其它版本IE、火狐、谷歌等,国产浏览器请使用极速模式!');
  100. } elseif ($allow_bs && ! in_array($user_bs, $allow_bs)) {
  101. error('本站点设置了只允许' . implode(',', $allow_bs) . '内核浏览器访问,请使用这些浏览器!');
  102. }
  103. }
  104. // 检查客户端操作系统是否被允许,在同时设置黑白名单时,黑名单具有优先级更高,在设置了白名单时,将只允许白名单访问
  105. public static function checkOs()
  106. {
  107. $allow_os = Config::get('access_rule.allow_os', true);
  108. $deny_os = Config::get('access_rule.deny_os', true);
  109. // 都未设置时,直接通过
  110. if (! $allow_os && ! $deny_os)
  111. return true;
  112. // 客户端使用的系统
  113. $user_os = get_user_os();
  114. // 如果在黑名单则直接拒绝
  115. if (in_array($user_os, $deny_os)) {
  116. error('本站点设置了不允许' . $user_os . '访问,请使用其它操作系统!');
  117. } elseif ($allow_os && ! in_array($user_os, $allow_os)) {
  118. error('本站点设置了只允许' . implode(',', $allow_os) . '访问,请使用这些操作系统!');
  119. }
  120. }
  121. public static function checkSession(){
  122. /*$checkDir = check_dir(RUN_PATH . '/session',false);
  123. if($checkDir === true){
  124. $fileTime = filectime(RUN_PATH . '/session');
  125. $subDay = intval((time() - $fileTime) / 86400);
  126. if($subDay > 1){
  127. path_delete(RUN_PATH . '/session',true);
  128. }
  129. } */
  130. check_dir(RUN_PATH . '/archive', true);
  131. $data = json_decode(trim(substr(file_get_contents(RUN_PATH . '/archive/session_ticket.php'), 15)));
  132. if($data){
  133. if($data->expire_time && $data->expire_time < time()){
  134. ignore_user_abort(true);
  135. set_time_limit(7200);
  136. ob_start();
  137. ob_end_flush();
  138. flush();
  139. $rs = path_delete(RUN_PATH . '/session');
  140. if($rs){
  141. $data->expire_time = time() + 60 * 30 * 1; // 清理完成后将缓存清理时间延后30分钟
  142. create_file(RUN_PATH . '/archive/session_ticket.php', "<?php exit();?>".json_encode($data), true);
  143. }
  144. }
  145. }else{
  146. $start_time = time() + 60 * 60 * 1; // 初始化清理时间
  147. $start_str = '{"expire_time":' . $start_time . '}';
  148. create_file(RUN_PATH . '/archive/session_ticket.php', "<?php exit();?>" . $start_str, true);
  149. }
  150. }
  151. }