public function __construct($step = 0, $fast = 0, $fix_mode = 0)
{
if (!$this->step = intval($step))
$this->arTestVars['site_checker_success'] = 'Y';
$this->test_percent = 0;
$this->strError = '';
$this->timeout = 10; // sec for one step
$this->strResult = '';
$this->fix_mode = intval($fix_mode);
$this->cafile = $_SERVER['DOCUMENT_ROOT'].'/bitrix/tmp/cacert.pem';
$this->force_repair = defined('SITE_CHECKER_FORCE_REPAIR') && SITE_CHECKER_FORCE_REPAIR === true;
$this->host = isset($_REQUEST['HTTP_HOST']) && $_REQUEST['HTTP_HOST'] ? $_REQUEST['HTTP_HOST'] : 'localhost';
if (!$fix_mode) // no need to know the host in fix mode
{
if (!preg_match('/^[a-z0-9.-]+$/i', $this->host)) // cyrillic domain hack
{
$host = $this->host;
$host0 = BitrixMainTextEncoding::convertEncoding($host, 'utf8', 'cp1251');
if (preg_match("/[xC0-xFF]/",$host0))
{
// utf-8;
if (!defined('BX_UTF') || BX_UTF !== true)
$host = $host0;
}
elseif (preg_match("/[xC0-xFF]/",$host))
{
// windows-1251
if (defined('BX_UTF') && BX_UTF === true)
$host = BitrixMainTextEncoding::convertEncoding($host, 'cp1251', 'utf8');
}
$converter = new CBXPunycode();
$host = $converter->Encode($host);
$this->host = $host;
}
}
$this->ssl = isset($_REQUEST['HTTPS']) && $_REQUEST['HTTPS'] == 'on';
$this->port = isset($_REQUEST['SERVER_PORT']) && $_REQUEST['SERVER_PORT'] ? $_REQUEST['SERVER_PORT'] : ($this->ssl ? 443 : 80);
$arTestGroup = array();
$arGroupName = array();
$arGroupName[1] = IsModuleInstalled('intranet') ? GetMessage("MAIN_SC_GENERAL") : GetMessage("MAIN_SC_GENERAL_SITE");
$arGroupDesc[1] = GetMessage("MAIN_SC_REQUIRED_MODS_DESC");
$arTestGroup[1] = array(
array('check_php_modules' =>GetMessage('SC_T_MODULES')),
array('check_php_settings' =>GetMessage('SC_T_PHP')),
array('check_security' => GetMessage('SC_T_APACHE')),
array('check_server_vars' =>GetMessage('SC_T_SERVER')),
array('check_session' => GetMessage('SC_T_SESS')),
array('check_mbstring' =>GetMessage('SC_T_MBSTRING')),
array('check_install_scripts' => GetMessage('SC_T_INSTALL_SCRIPTS')),
array('check_socket' => GetMessage('SC_T_SOCK')),
array('check_bx_crontab' => GetMessage("MAIN_SC_AGENTS_CRON")),
);
$arGroupName[2] = GetMessage("MAIN_SC_BUSINESS");
$arGroupDesc[2] = GetMessage("MAIN_SC_CORRECT_DESC");
$arTestGroup[2] = array(
array('check_pull_stream' => GetMessage("MAIN_SC_TEST_PUSH_SERVER")),
array('check_pull_comments' => GetMessage("MAIN_SC_TEST_COMMENTS")),
array('check_turn' => GetMessage("MAIN_SC_TEST_VIDEO")),
array('check_access_mobile' => GetMessage("MAIN_SC_TEST_MOBILE")),
array('check_push_bitrix' => GetMessage("MAIN_SC_TEST_PUSH")),
array('check_access_docs' => GetMessage("MAIN_SC_TEST_DOCS")),
array('check_fast_download' => GetMessage("MAIN_SC_TEST_FAST_FILES")),
array('check_search' => GetMessage("MAIN_SC_TEST_SEARCH_CONTENTS")),
array('check_mail' => GetMessage("MAIN_SC_MAIL_TEST")),
array('check_ca_file' => GetMessage("MAIN_SC_CLOUD_TEST")),
array('check_connect_mail' => GetMessage("MAIN_SC_TEST_MAIL_INTEGRATION")),
array('check_socnet' => GetMessage("MAIN_SC_TEST_SOCNET_INTEGRATION")),
array('check_rest' => GetMessage("MAIN_SC_TEST_REST")),
array('check_mail_push' => GetMessage("MAIN_SC_TEST_MAIL_PUSH")),
);
if (IsModuleInstalled('extranet'))
$arTestGroup[2][] = array('check_extranet' => GetMessage("MAIN_SC_EXTRANET_ACCESS"));
$arGroupName[4] = GetMessage("MAIN_SC_WINDOWS_ENV");
$arGroupDesc[4] = '';
$arTestGroup[4] = array(
array('check_webdav' => GetMessage("MAIN_SC_DOCS_EDIT_MS_OFFICE")),
array('check_socket_ssl' => GetMessage("MAIN_SC_EXTERNAL_APPS_TEST")),
array('check_ad' => GetMessage("MAIN_SC_TEST_LDAP")),
array('check_ntlm' => GetMessage("MAIN_SC_TEST_NTLM")),
);
$arGroupName[8] = GetMessage("MAIN_SC_PERFORM");
$arGroupDesc[8] = '';
$arTestGroup[8] = array(
array('check_perf' => GetMessage("MAIN_SC_PERF_TEST")),
array('check_compression' => GetMessage("MAIN_SC_COMPRESSION_TEST")),
);
$arGroupName[16] = GetMessage('SC_GR_EXTENDED');
$arTestGroup[16] = array(
array('check_dbconn_settings' => GetMessage('SC_T_DBCONN_SETTINGS')),
array('check_dbconn' => GetMessage('SC_T_DBCONN')),
array('check_session_ua' => GetMessage('SC_T_SESS_UA')),
array('check_sites' => GetMessage('SC_T_SITES')),
array('check_pcre_recursion' => GetMessage('SC_T_RECURSION')),
array('check_upload' => GetMessage('SC_T_UPLOAD')),
array('check_upload_big' => GetMessage('SC_T_UPLOAD_BIG')),
array('check_upload_raw' => GetMessage('SC_T_UPLOAD_RAW')),
array('check_post' => GetMessage('SC_T_POST')),
array('check_mail' => GetMessage('SC_T_MAIL')),
array('check_mail_big' => GetMessage('SC_T_MAIL_BIG')),
array('check_mail_b_event' => GetMessage('SC_T_MAIL_B_EVENT')),
array('check_localredirect' => GetMessage('SC_T_REDIRECT')),
array('check_memory_limit' => GetMessage('SC_T_MEMORY')),
array('check_cache' => GetMessage('SC_T_CACHE')),
array('check_update' => GetMessage('SC_UPDATE_ACCESS')),
array('check_http_auth' => GetMessage('SC_T_AUTH')),
array('check_exec' => GetMessage('SC_T_EXEC')),
array('check_getimagesize' => GetMessage('SC_T_GETIMAGESIZE')),
);
$arGroupName[32] = GetMessage('SC_GR_MYSQL');
$arTestGroup[32] = array(
array('check_mysql_bug_version' => GetMessage('SC_T_MYSQL_VER')),
array('check_mysql_time' => GetMessage('SC_T_TIME')),
array('check_mysql_mode' => GetMessage('SC_T_SQL_MODE')),
array('check_mysql_connection_charset' => GetMessage('SC_CONNECTION_CHARSET')),
array('check_mysql_db_charset' => GetMessage('SC_DB_CHARSET')),
// array('check_mysql_table_status' => GetMessage('SC_T_CHECK')),
array('check_mysql_table_charset' => GetMessage('SC_T_CHARSET')),
array('check_mysql_table_structure' => GetMessage('SC_T_STRUCTURE')),
);
$arGroupName[64] = GetMessage('SC_GR_MYSQL');
$arTestGroup[64] = array(
array('check_pgsql_version' => GetMessage('SC_T_PGSQL_VER')),
array('check_mysql_time' => GetMessage('SC_T_TIME')),
array('check_pgsql_connection_charset' => GetMessage('SC_CONNECTION_CHARSET')),
);
if ($this->fix_mode)
{
switch ($this->fix_mode)
{
case 1:
$this->arTest = array(
array('check_mysql_table_status' => GetMessage('SC_T_CHECK')),
);
break;
case 2:
$this->arTest = array(
array('check_mysql_connection_charset' => GetMessage('SC_CONNECTION_CHARSET')),
array('check_mysql_db_charset' => GetMessage('SC_DB_CHARSET')),
array('check_mysql_table_charset' => GetMessage('SC_T_CHARSET')),
array('check_mysql_table_structure' => GetMessage('SC_T_STRUCTURE')),
);
break;
case 3:
$this->arTest = array(
array('check_mysql_table_structure' => GetMessage('SC_T_STRUCTURE')),
);
break;
case 4:
$this->arTest = array(
array('check_mbstring' => GetMessage('SC_T_MBSTRING')),
);
break;
default:
$this->arTest = array(
array('check_server_vars' => GetMessage('SC_T_SERVER')),
);
break;
}
}
else
{
$profile = 1;
if ($fast)
{
if (IsModuleInstalled('intranet'))
{
$profile |= 2;
$profile |= 4;
$profile |= 8;
}
}
else
{
$profile |= 16;
switch (BitrixMainApplication::getConnection()->getType())
{
case 'mysql':
$profile |= 32;
break;
case 'pgsql':
$profile |= 64;
break;
}
}
$this->arTest = array();
$step0 = $step;
foreach($arTestGroup as $i => $ar)
{
if ($i & $profile)
{
if (!$this->group_name)
{
$c = count($ar);
if ($step0 >= $c)
$step0 -= $c;
else
{
$this->group_name = $arGroupName[$i] ?? '';
$this->group_desc = $arGroupDesc[$i] ?? '';
}
}
$this->arTest = array_merge($this->arTest, $ar);
}
}
}
$this->function = key($this->arTest[$this->step]);
$this->strCurrentTestName = current($this->arTest[$this->step]);
$this->strNextTestName = $this->strCurrentTestName;
$LICENSE_KEY = '';
if (file_exists($file = $_SERVER['DOCUMENT_ROOT'].'/bitrix'.'/license_key.php'))
{
include($file);
}
if ($LICENSE_KEY == '')
{
$LICENSE_KEY = 'DEMO';
}
if (!defined('LICENSE_HASH'))
{
define('LICENSE_HASH', md5('CONNECTION_TEST'));
}
$this->LogFile = '/bitrix'.'/site_checker_'.md5('SITE_CHECKER'.$LICENSE_KEY).'.log';
}