Пример #1
0
 function CheckShortInstall()
 {
     global $DB, $DBType, $DBHost, $DBLogin, $DBPassword, $DBName, $DBDebug, $DBSQLServerType;
     if (defined("SHORT_INSTALL_CHECK")) {
         return true;
     }
     //PHP
     $requireStep = new RequirementStep();
     if (!$requireStep->CheckRequirements($DBType)) {
         BXInstallServices::ShowStepErrors($requireStep);
     }
     //UTF-8
     if (defined("BX_UTF") && !BXInstallServices::IsUTF8Support()) {
         BXInstallServices::ShowStepErrors(InstallGetMessage("INST_UTF8_NOT_SUPPORT"));
     } elseif (defined("BX_UTF") && $DBType == "mssql") {
         BXInstallServices::ShowStepErrors(InstallGetMessage("INST_UTF8_NOT_SUPPORT"));
     }
     //Check connection
     require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/" . $DBType . "/database.php";
     require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/" . $DBType . "/main.php";
     require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/tools.php";
     IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/main.php");
     $DB = new CDatabase();
     if (!$DB->Connect($DBHost, $DBName, $DBLogin, $DBPassword)) {
         BXInstallServices::ShowStepErrors(InstallGetMessage("COULD_NOT_CONNECT") . " " . $DB->db_Error);
     }
     $databaseStep = new CreateDBStep();
     $databaseStep->DB =& $DB;
     $databaseStep->dbType = $DBType;
     $databaseStep->dbName = $DBName;
     $databaseStep->filePermission = defined("BX_FILE_PERMISSIONS") ? BX_FILE_PERMISSIONS : 0;
     $databaseStep->folderPermission = defined("BX_DIR_PERMISSIONS") ? BX_DIR_PERMISSIONS : 0;
     $databaseStep->createDBType = defined("MYSQL_TABLE_TYPE") ? MYSQL_TABLE_TYPE : "";
     $databaseStep->utf8 = defined("BX_UTF");
     $databaseStep->createCharset = null;
     $databaseStep->needCodePage = false;
     if ($databaseStep->IsBitrixInstalled()) {
         BXInstallServices::ShowStepErrors($databaseStep);
     }
     //Database check
     if ($DBType == "mysql") {
         $dbResult = $DB->Query("select VERSION() as ver", true);
         if ($dbResult && ($arVersion = $dbResult->Fetch())) {
             $mysqlVersion = trim($arVersion["ver"]);
             if (!BXInstallServices::VersionCompare($mysqlVersion, "5.0.0")) {
                 BXInstallServices::ShowStepErrors(InstallGetMessage("SC_DB_VERS_MYSQL_ER"));
             }
             $databaseStep->needCodePage = true;
             if (!$databaseStep->needCodePage && defined("BX_UTF")) {
                 BXInstallServices::ShowStepErrors(InstallGetMessage("INS_CREATE_DB_CHAR_NOTE"));
             }
         }
         //Code page
         if ($databaseStep->needCodePage) {
             $codePage = false;
             if (LANGUAGE_ID == "ru") {
                 $codePage = "cp1251";
             } elseif ($databaseStep->createCharset != '') {
                 $codePage = $databaseStep->createCharset;
             } else {
                 $codePage = 'latin1';
             }
             if ($databaseStep->utf8) {
                 $DB->Query("ALTER DATABASE `" . $databaseStep->dbName . "` CHARACTER SET UTF8 COLLATE utf8_unicode_ci", true);
             } elseif ($codePage) {
                 $DB->Query("ALTER DATABASE `" . $databaseStep->dbName . "` CHARACTER SET " . $codePage, true);
             }
         }
         if (strlen($databaseStep->createDBType) > 0) {
             $DB->Query("SET storage_engine = '" . $databaseStep->createDBType . "'", false);
         }
         //SQL mode
         $dbResult = $DB->Query("SELECT @@sql_mode", true);
         if ($dbResult && ($arResult = $dbResult->Fetch())) {
             $sqlMode = trim($arResult["@@sql_mode"]);
             if (strpos($sqlMode, "STRICT_TRANS_TABLES") !== false) {
                 $databaseStep->sqlMode = preg_replace("~,?STRICT_TRANS_TABLES~i", "", $sqlMode);
                 $databaseStep->sqlMode = ltrim($databaseStep->sqlMode, ",");
             }
         }
     } elseif ($DBType == "oracle" && $databaseStep->utf8) {
         $query = "SELECT * FROM nls_database_parameters WHERE PARAMETER='NLS_CHARACTERSET' OR PARAMETER='NLS_NCHAR_CHARACTERSET'";
         $dbResult = $DB->Query($query, true);
         if ($dbResult && ($arResult = $dbResult->Fetch())) {
             $arOracleParams = array("NLS_CHARACTERSET" => "", "NLS_NCHAR_CHARACTERSET" => "");
             foreach ($arResult as $arParam) {
                 $arOracleParams[$arParam["PARAMETER"]] = $arParam["VALUE"];
             }
             if ($arOracleParams["NLS_CHARACTERSET"] != "AL32UTF8" || $arOracleParams["NLS_NCHAR_CHARACTERSET"] != "UTF8") {
                 BXInstallServices::ShowStepErrors(InstallGetMessage("INST_ORACLE_UTF_ERROR"));
             }
         } else {
             BXInstallServices::ShowStepErrors(InstallGetMessage("INST_ORACLE_CHARSET_ERROR"));
         }
     }
     //Create after_connect.php if not exists
     if (!file_exists($_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/php_interface/after_connect.php") && $databaseStep->CreateAfterConnect() === false) {
         BXInstallServices::ShowStepErrors($databaseStep);
     }
     if (!$databaseStep->CheckDBOperation()) {
         BXInstallServices::ShowStepErrors($databaseStep);
     }
     $filePath = $_SERVER["DOCUMENT_ROOT"] . BX_PERSONAL_ROOT . "/php_interface/dbconn.php";
     if ($fileContent = file_get_contents($filePath)) {
         $fileContent = "<" . "? define(\"SHORT_INSTALL_CHECK\", true);?" . ">" . $fileContent;
         file_put_contents($filePath, $fileContent);
     }
     return true;
 }