• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/site_checker.php
  • Класс: CSiteCheckerTest
  • Вызов: CSiteCheckerTest::__construct
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';
}