static function boot() { $pathinfo = request::getPathInfo(); // 生成part if (isset($pathinfo[1])) { if ($p = strpos($pathinfo, '/', 2)) { $part = substr($pathinfo, 0, $p); } else { $part = $pathinfo; } } else { $part = '/'; } if ($part == '/openapi') { return kernel::single('base_rpc_service')->process($pathinfo); } elseif ($part == '/app-doc') { //cachemgr::init(); return kernel::single('base_misc_doc')->display($pathinfo); } // 确认是否安装流程. 如果是安装流程则开启debug. 如果不是则检查是否安装, 如果未安装则跳到安装流程 // 目前其他的url, 都应移到routes中进行 // if ($part == '/setup') { config::set('app.debug', true); } else { static::checkInstalled(); } cacheobject::init(); static::registRouteMiddleware(); $response = route::dispatch(request::instance()); // 临时处理方式 kernel::single('base_session')->close(); $response->send(); exit; }
function run($params = array()) { $this->check_params = $params; $return = array(); $totalScore = 0; $allow_install = true; $func_prefix = 'test_'; foreach (get_class_methods($this) as $func) { if (substr($func, 0, 5) == $func_prefix) { $score = 0; $result = $this->{$func}($score); if ($result['items']) { $group[$result['group']]['type'] = $result['type']; $group[$result['group']]['items'] = array_merge($group[$result['group']['items']] ? $group[$result['group']['items']] : array(), $result['items']); if ($allow_install && isset($result['allow_install'])) { $allow_install = $result['allow_install']; } if ($result['key']) { $return[$result['key']] =& $group[$result['group']]['items']; } } $totalScore += $score; } } $score = floor($totalScore / 100) + 1; $rank = min($score, $this->maxLevel + 1); $level = array('E', 'D', 'C', 'B', 'A', 'S'); $return['data'] = $group; $return['score'] = $totalScore; $return['level'] = $level[$rank - 1]; $return['rank'] = $rank; $return['allow_install'] = $allow_install; $return['path_info'] = request::getPathInfo(); return $return; }
function test_server_req(&$score) { $rst = version_compare(PHP_VERSION, '5.0', '>='); $items['PHP5以上'] = array('value' => PHP_VERSION, 'result' => $rst); if (!$rst) { $allow_install = false; } $rst = !get_cfg_var('zend.ze1_compatibility_mode'); $items['zend.ze1_compatibility_mode 关闭'] = array('value' => $rst ? 'Off' : 'On', 'result' => $rst); if (!$rst) { $allow_install = false; } $tmpfname = tempnam(TMP_DIR, "foo"); $handle = fopen($tmpfname, "w"); $rst = flock($handle, LOCK_EX); fclose($handle); $items['支持文件锁(flock)'] = array('value' => $rst ? app::get('dev')->_('支持') : app::get('dev')->_('不支持'), 'result' => $rst); if (!$rst) { $allow_install = false; } $rst = function_exists('xml_parse_into_struct'); $items['php可以解析xml文件'] = array('value' => $rst ? app::get('dev')->_('支持') : app::get('dev')->_('不支持'), 'result' => $rst); if (!$rst) { $allow_install = false; } $rst = function_exists('mysql_connect') && function_exists('mysql_get_server_info'); $items['MySQL函数库可用'] = array('value' => $rst ? mysql_get_client_info() : app::get('dev')->_('未安装'), 'result' => $rst); $username = config::get('database.username'); $host = config::get('database.host'); $password = config::get('database.password'); $database = config::get('database.database'); if (!$rst) { $allow_install = false; } else { $rst = false; if (!is_null($host)) { if (!is_null($password)) { $rs = mysql_connect($host, $username, $password); } elseif (!is_null($username)) { $rs = mysql_connect($host, $username); } else { $rs = mysql_connect($host); } $db_ver = mysql_get_server_info($rs); } elseif ($db_ver = mysql_get_server_info()) { $host = ''; } else { $sock = get_cfg_var('mysql.default_socket'); if (PHP_OS != 'WINNT' && file_exists($sock) && is_writable($sock)) { $host = $sock; } else { $host = ini_get('mysql.default_host'); $port = ini_get('mysql.default_port'); if (!$host) { $host = '127.0.0.1'; } if (!$port) { $port = 3306; } $host = $host . ':' . $port; } } if (!$db_ver) { if (substr($host, 0, 1) == '/') { $fp = @fsockopen("unix://" . $host); } else { if ($p = strrpos($host, ':')) { $port = substr($host, $p + 1); $host = substr($host, 0, $p); } else { $port = 3306; $host = $host; } $fp = @fsockopen("tcp://" . $host, $port, $errno, $errstr, 2); } if (!$fp) { $db_ver = app::get('dev')->_('无法连接'); } else { fwrite($fp, "\n"); $db_ver = fread($fp, 20); fclose($fp); if (preg_match('/([2-8]\\.[0-9\\.]+)/', $db_ver, $match)) { $db_ver = $match[1]; $rst = version_compare($db_ver, '4.0', '>='); } else { $db_ver = app::get('dev')->_('无法识别'); } } } else { $rst = version_compare($db_ver, '4.1', '>='); } $this->db_ver = $db_ver; $mysql_key = app::get('dev')->_('数据库Mysql 4.1以上') . ' <i style="color:#060">' . $host . '</i>'; if ($this->allow_change_db) { $mysql_key .= '<form method="get" action="" style="margin:0;padding:0"><table><tr><td><label for="db_host">' . app::get('dev')->_('MySQL主机') . '</label></td><td> </td></tr><tr><td><input id="db_host" value="' . $host . '" name="db_host" style="width:100px;" type="text" /></td><td><input type="submit" value="' . app::get('dev')->_('连接') . '"></td></tr></table></form>'; } $items[$mysql_key] = array('value' => $db_ver, 'result' => $rst); if (!$rst) { $allow_install = false; } $pathinfo = request::getPathInfo(); if (!$pathinfo) { $allow_install = false; } $items['pathinfo()的支持'] = array('value' => $pathinfo ? app::get('dev')->_('支持') : app::get('dev')->_('不支持'), 'result' => $pathinfo); return array('group' => app::get('dev')->_('基本需求'), 'items' => $items, 'type' => 'require', 'allow_install' => $allow_install); } if (ini_get('safe_mode')) { $rst = is_callable('ftp_connect'); if (!$rst) { $allow_install = false; } $items['当安全模式开启时,ftp函数可用'] = array('value' => $rst ? app::get('dev')->_('可用') : app::get('dev')->_('不可用'), 'result' => $rst); } $rst = preg_match('/[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+/', gethostbyname('www.example.com')); $items['DNS配置完成,本机上能通过域名访问网络'] = array('value' => $rst ? app::get('dev')->_('成功') : app::get('dev')->_('失败 (将影响部分功能)'), 'result' => $rst); return array('group' => app::get('dev')->_('基本需求'), 'key' => 'require', 'items' => $items, 'type' => 'require', 'allow_install' => $allow_install); }