Files
OMS/app/setup/lib/serverinfo.php
2026-01-04 19:08:31 +08:00

336 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
require_once(dirname(__FILE__) . '../../../base/lib/db/compat.php');
class setup_serverinfo
{
var $allow_change_db = false;
var $maxLevel = 6;
var $check_params = array();
function run($params=array()){
$this->check_params = $params;
$return=array();
$totalScore = 0;
$allow_install = true;
$func_prefix = (ECAE_MODE) ? 'ecae_' : '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(is_array($result['group'])&&$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'] = kernel::request()->get_path_info();
return $return;
}
function ecae_server_req(&$socre)
{
$allow_install = true;
$rst = defined('ECAE_MYSQL_HOST_M');
$items['Mysql'] = array(
'value' => $rst ? '已经激活 Mysql' : '请激活 Mysql',
'result'=> $rst,
);
if(!$rst) $allow_install = false;
$rst = defined('ECAE_MEMCACHE_HOST');
$items['Memcache'] = array(
'value' => $rst ? '已经激活 Memcache' : '请激活 Memcache',
'result'=> $rst,
);
if(!$rst) $allow_install = false;
$rst = defined('ECAE_MONGO_HOST');
$items['Mongo'] = array(
'value' => $rst ? '已经激活 Mongo' : '请激活 Mongo',
'result'=> $rst,
);
if(!$rst) $allow_install = false;
$res = ecae_api_call('storage_list_group');
$rst = (is_array($res) && in_array('private:private', $res)) ? true : false;
$items['Storage Private'] = array(
'value' => $rst ? '已经创建 Storage Private' : '请创建 Storage Private',
'result'=> $rst,
);
if(!$rst) $allow_install = false;
$rst = (is_array($res) && in_array('public:public', $res)) ? true : false;
$items['Storage Public'] = array(
'value' => $rst ? '已经创建 Storage Public' : '请创建 Storage Public',
'result'=> $rst,
);
if(!$rst) $allow_install = false;
$rst = (is_array($res) && in_array('images:public', $res)) ? true : false;
$items['Storage Images'] = array(
'value' => $rst ? '已经创建 Storage Images' : '请创建 Storage Images',
'result'=> $rst,
);
if(!$rst) $allow_install = false;
return array('group'=>'基本需求','key'=>'require','items'=>$items,'type'=>'require','allow_install'=>$allow_install);
}//End Function
function test_server_req(&$score){
$rst = version_compare(PHP_VERSION,'7.4','>=');
$items['PHP5以上'] = array(
'value'=>$rst?'您的php版本是'.PHP_VERSION:'您的php版本是'.PHP_VERSION.'不符合要求请安装php5以上的版本',
'result'=>$rst,
);
if(!$rst){
$allow_install = false;
}
$rst = !get_cfg_var('zend.ze1_compatibility_mode');
$items['zend.ze1_compatibility_mode 关闭'] = array(
'value'=>$rst?'zend.ze1_compatibility_mode 已关闭':'您的zend.ze1_compatibility_mode 需关闭',
'result'=>$rst,
);
if(!$rst){
$allow_install = false;
}
$deploy = base_setup_config::deploy_info();
$writeable_dir = $deploy['installer']['writeable_check']['dir'];
if(is_array($writeable_dir)){
$unablewrite = array();
foreach($writeable_dir AS $dir){
$file = ROOT_DIR . '/' . $dir . '/test.html';
if($fp = @fopen($file, 'w')){
@fclose($fp);
@unlink($file);
}else{
$unablewrite[] = $dir;
}
}
if(count($unablewrite)){
$items['目录可写性检测'] = array(
'value'=> join(',', $unablewrite) . '目录不可写',
'result'=>false,
);
$allow_install = false;
}else{
$items['目录检测'] = array(
'value'=> '全部检测通过',
'result'=>true,
);
}
}
$tmpfname = tempnam(ROOT_DIR . "/data/cache", "foo");
$handle = fopen($tmpfname, "w");
$rst = flock($handle,LOCK_EX);
fclose($handle);
unlink($tmpfname);
$items['支持文件锁(flock)'] = array(
'value'=>$rst?'支持文件锁(flock)':'您不支持文件锁(flock)',
'result'=>$rst,
);
if(!$rst){
$allow_install = false;
}
$rst = function_exists('xml_parse_into_struct');
$items['php可以解析xml文件'] = array(
'value'=>$rst?'php可以解析xml文件':'您的php不支持解析xml文件',
'result'=>$rst,
);
if(!$rst){
$allow_install = false;
}
$rst = function_exists('mysql_connect') && function_exists('mysql_get_server_info');
$items['MySQL函数库可用'] = array(
'value'=>$rst?'您的MySQL函数库是'.mysql_get_client_info():'您的MySQL函数库未安装',
'result'=>$rst,
);
if(!$rst){
$allow_install = false;
}else{
$rst = false;
// Prefer installer input, then environment overrides, then existing constants
$envDbHost = getenv('ONEX_OMS_DB_HOST');
$envDbUser = getenv('ONEX_OMS_DB_USER');
$envDbPassword = getenv('ONEX_OMS_DB_PASSWORD');
if ($envDbUser && !defined('DB_USER')) {
define('DB_USER', $envDbUser);
}
if ($envDbPassword && !defined('DB_PASSWORD')) {
define('DB_PASSWORD', $envDbPassword);
}
if ($envDbHost && !defined('DB_HOST')) {
define('DB_HOST', $envDbHost);
}
if(isset($this->check_params['mysql_host'])){
define('DB_HOST',$this->check_params['mysql_host']);
}elseif(defined('DB_HOST')){
if(defined('DB_PASSWORD')){
$rs = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
}elseif(defined('DB_USER')){
$rs = mysql_connect(DB_HOST,DB_USER);
}else{
$rs = mysql_connect(DB_HOST);
}
$db_ver = mysql_get_server_info($rs);
}
// elseif($db_ver = @mysql_get_server_info($rs)){
// define('DB_HOST','');
// }
else{
$sock = get_cfg_var('mysql.default_socket');
if(PHP_OS!='WINNT' && file_exists($sock) && is_writable($sock)){
define('DB_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;
define('DB_HOST',$host.':'.$port);
}
}
if(!$db_ver){
if(substr(DB_HOST,0,1)=='/'){
$fp = @fsockopen("unix://".DB_HOST);
}else{
if($p = strrpos(DB_HOST,':')){
$port = substr(DB_HOST,$p+1);
$host = substr(DB_HOST,0,$p);
}else{
$port = 3306;
$host = DB_HOST;
}
$fp = @fsockopen("tcp://".$host, $port, $errno, $errstr,2);
}
if (!$fp){
$db_ver = '无法连接';
} 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 = '无法识别';
}
}
}else{
$rst = version_compare($db_ver,'4.1','>=');
}
$this->db_ver = $db_ver;
$mysql_key = '数据库Mysql 4.1以上&nbsp;<i style="color:#060">'.DB_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">MySQL主机</label></td><td>&nbsp;</td></tr><tr><td><input id="db_host" value="'.DB_HOST.'" name="db_host" style="width:100px;" type="text" /></td><td><input type="submit" value="连接"></td></tr></table></form>';
}
if($db_ver == '无法连接'){
$error_msg = '您的Mysql数据库无法连接';
}elseif($db_ver == '无法连接'){
$error_msg = '您的Mysql数据库版本无法识别';
}else{
$error_msg = '您的Mysql数据库版本是'.$db_ver.'版本过低请使用高于4.1的版本.';
}
$items[$mysql_key] = array(
'value'=>$rst?'您的Mysql数据库版本是'.$db_ver:$error_msg.'<br>自定义MySQL地址:<input type="text" name="installer_check[mysql_host]" value="" />',
'result'=>$rst,
);
if(!$rst){
$allow_install = false;
}
}
/*
if(ini_get('safe_mode')){
$rst = is_callable('ftp_connect');
if(!$rst){
$allow_install = false;
}
$items['当安全模式开启时,ftp函数可用'] = array(
'value'=>$rst?'可用':'不可用',
'result'=>$rst,
);
}
*/
if(is_callable('imagecreatetruecolor')){
try{
$image = imagecreatetruecolor(100, 200);
imagedestroy($image);
$rst = true;
}catch(Exception $e){
$rst = false;
}
}else{
$rst = false;
}
$items['是否正常安装GD库'] = array(
'value'=>$rst?'成功':'失败 (将影响部分功能)',
'result'=>$rst,
);
$rst = preg_match('/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/',gethostbyname('www.example.com'));
$items['DNS配置完成,本机上能通过域名访问网络'] = array(
'value'=>$rst?'成功':'失败 (将影响部分功能)',
'result'=>$rst,
);
$rst = extension_loaded('xlswriter');
$items['是否正常安装xlswriter扩展'] = array(
'value'=>$rst?'成功':'失败 (将影响程序解码及TASK任务功能)',
'result'=>$rst,
);
$rst = extension_loaded('swoole');
$items['是否正常安装swoole扩展'] = array(
'value'=>$rst?'成功':'失败 (将影响导入导出功能)',
'result'=>$rst,
);
return array('group'=>'基本需求','key'=>'require','items'=>$items,'type'=>'require','allow_install'=>$allow_install);
}
}//End Class