"") define("BX_PERSONAL_ROOT", $_SERVER["BX_PERSONAL_ROOT"]); else define("BX_PERSONAL_ROOT", "/bitrix"); if(!defined("START_EXEC_TIME")) define("START_EXEC_TIME", microtime(true)); define("STEP_TIME", defined('VMBITRIX') ? 30 : 15); # define("DELAY", defined('VMBITRIX') ? 0 : 3); // reserved if (function_exists('mb_internal_encoding')) { switch (ini_get("mbstring.func_overload")) { case 0: $bUTF_serv = false; break; case 2: $bUTF_serv = mb_internal_encoding() == 'UTF-8'; break; default: die('PHP parameter mbstring.func_overload='.ini_get("mbstring.func_overload").'. The only supported values are 0 or 2.'); break; } mb_internal_encoding('ISO-8859-1'); } else $bUTF_serv = false; # http://bugs.php.net/bug.php?id=48886 - We have 2Gb file limit on Linux #@set_time_limit(0); ob_start(); if (@preg_match('#ru#i',$_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = 'ru'; elseif (@preg_match('#de#i',$_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = 'de'; if ($_REQUEST['lang']) $lang = $_REQUEST['lang']; if (!in_array($lang,array('ru','en'))) $lang = 'en'; define("LANG", $lang); if (LANG=='ru' && !headers_sent()) header("Content-type:text/html; charset=windows-1251"); $dbconn = $_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/dbconn.php"; $arc_name = $_REQUEST["arc_name"]; $mArr_ru = array( "WINDOW_TITLE" => "Восстановление архива", "BACK" => "Назад", "BEGIN" => "

Документация: http://dev.1c-bitrix.ru/api_help/main/going_remote.php

", "ARC_DOWN" => "Скачать архив с дальнего сайта", "ARC_LOCAL_NAME" => "Имя архива:", "DB_SELECT" => "Выберите дамп БД:", "DB_SETTINGS" => "Данные для подключения к базе данных", "DB_DEF" => "по умолчанию для выделенного сервера или виртуальной машины", "DB_ENV" => "восстановление в "Битрикс: Веб-окружение"", "DB_OTHER" => "установить значения вручную", "DB_SKIP" => "пропустить восстановление базы данных", "ARC_DOWN_SITE" => "адрес сайта (www.site.ru):", "DELETE_FILES" => "Удалить архив и служебные скрипты", "ARC_DOWN_NAME" => "имя архива (2010-09-20.12-43-39.a269376c.tar.gz):", "OR" => "ИЛИ", "ARC_DOWN_URL" => "Ссылка на архив:", "NO_FILES" => "нет архивов", "TITLE0" => "Шаг 1: Подготовка архива", "TITLE1" => "Шаг 2: Распаковка архива", "TITLE_PROCESS1" => "Шаг 2: Выполняется распаковка архива", "TITLE_PROCESS2" => "Шаг 3: Выполняется восстановление базы данных", "TITLE2" => "Шаг 3: Восстановление базы данных", "SELECT_LANG" => "Выберите язык", "ARC_SKIP" => "Архив уже распакован", "ARC_SKIP_DESC" => "переход к восстановлению базы данных", "ARC_NAME" => "Архив загружен в корневую папку сервера", "ARC_DOWN_PROCESS" => "Загружается:", "ARC_LOCAL" => "Загрузить с локального диска", "MAX_TIME" => "Шаг выполнения (сек.)", "ERR_NO_ARC" => "Не выбран архив для распаковки!", "BUT_TEXT1" => "Далее", "BUT_TEXT_BACK" => "Назад", "DUMP_NAME" => "Файл резервной копии базы:", "USER_NAME" => "Имя пользователя базы данных", "USER_PASS" => "Пароль", "BASE_NAME" => "Имя базы данных", "BASE_HOST" => "Адрес сервера базы данных", "BASE_RESTORE" => "Восстановить", "ERR_NO_DUMP" => "Не выбран архив базы данных для восстановления!", "ERR_EXTRACT" => "Ошибка", "ERR_UPLOAD" => "Не удалось загрузить файл на сервер", "ERR_DUMP_RESTORE" => "Ошибка восстановления базы данных", "ERR_DB_CONNECT" => "Ошибка соединения с базой данных", "ERR_CREATE_DB" => "Ошибка создания базы", "ERR_TAR_TAR" => "Присутствуют файлы с расширением tar.tar. Вместо них должны быть архивы с номерами: tar.1, tar.2 и т.д.", "FINISH" => "Операция выполнена успешно", "FINISH_MSG" => "Операция восстановления системы завершена.", "EXTRACT_FINISH_TITLE" => "Распаковка архива", "EXTRACT_FINISH_MSG" => "Распаковка архива завершена.", "BASE_CREATE_DB" => "Создать базу данных", "BASE_CLOUDS" => "Файлы из облачных хранилищ:", "BASE_CLOUDS_Y" => "сохранить локально", "BASE_CLOUDS_N" => "оставить в облаке", "EXTRACT_FINISH_DELL" => "Обязательно удалите скрипт restore.php и файл резервной копии из корневой директории сайта.", "EXTRACT_FULL_FINISH_DELL" => "Обязательно удалите скрипт restore.php, файл резервной копии из корневой директории сайта, а также дамп базы.", "BUT_DELL" => "Удалить", "FINISH_ERR_DELL" => "Не удалось удалить все временные файлы! Обязательно удалите их вручную.", "FINISH_ERR_DELL_TITLE" => "Ошибка удаления файлов!", "NO_READ_PERMS" => "Нет прав на чтение корневой папки сайта", "UTF8_ERROR1" => "Внимание! Сайт работал в кодировке UTF-8. Конфигурация сервера не соответствует требованиям, установите mbstring.func_overload=2 и mbstring.internal_encoding=UTF-8.", "UTF8_ERROR2" => "Внимание! Сайт работал в однобайтовой кодировке, а конфигурация сервера рассчитана на кодировку UTF-8. Установите mbstring.func_overload=0 или mbstring.internal_encoding=ISO-8859-1.", "DOC_ROOT_WARN" => "Внимание! В настройках сайта указан путь к корневой папке, убедитесь, что путь установлен правильно, иначе возникнут проблемы с доступом к публичной части.", "HTACCESS_WARN" => "Внимание! Файл .htaccess из архива был сохранен в корне сайта под именем .htaccess.restore, т.к. он может содержать директивы, недопустимые на данном сервере. Пожалуйста, переименуйте его вручную через FTP.", "NOT_SAAS_ENV" => "Вы используете дистрибутив SaaS, он может быть развернут только на SaaS окружении", "NOT_SAAS_DISTR" => "Вы работаете на SaaS окружении, необходимо использовать редакцию SaaS", 'TAR_WRONG_BLOCK_SIZE' => 'Неверный размер блока: ', 'TAR_ERR_FORMAT' => 'Архив поврежден, ошибочный блок: ', 'TAR_EMPTY_FILE' => 'Пустое имя файла, ошибочный блок: ', 'TAR_ERR_CRC' => 'Ошибка контрольной суммы на файле: ', 'TAR_ERR_FOLDER_CREATE' => 'Не удалось создать папку: ', 'TAR_ERR_FILE_CREATE' => 'Не удалось создать файл: ', 'TAR_ERR_FILE_OPEN' => 'Не удалось открыть файл: ', 'TAR_ERR_FILE_SIZE' => 'Размер файла отличается: ', 'TAR_ERR_WRITE_HEADER' => 'Ошибка записи заголовка', 'TAR_PATH_TOO_LONG' => 'Слишком длинный путь: ', 'TAR_ERR_FILE_READ' => 'Ошибка чтения файла: ', 'TAR_ERR_FILE_WRITE' => 'Ошибка записи на файле: ', 'TAR_ERR_FILE_NO_ACCESS' => 'Нет доступа к файлу: ', 'TAR_NO_GZIP' => 'Не доступна функция gzopen', ); $mArr_en = array( "WINDOW_TITLE" => "Restoring", "BACK" => "Back", "BEGIN" => "

Documentation: learning course

", "ARC_DOWN" => "Download from remote server", "ARC_LOCAL_NAME" => "Archive name:", "DB_SELECT" => "Select Database Dump:", "DB_SETTINGS" => "Database settings", "DB_DEF" => "default values for Dedicated Server or Virtual Machine", "DB_ENV" => "restoring in Bitrix Environment", "DB_OTHER" => "custom database settings", "DB_SKIP" => "skip database restore", "ARC_DOWN_SITE" => "Server URL (www.site.com):", "DELETE_FILES" => "Delete archive and temporary scripts", "ARC_DOWN_NAME" => "Archive name (2010-09-20.12-43-39.a269376c.tar.gz):", "OR" => "OR", "ARC_DOWN_URL" => "Archive URL:", "NO_FILES" => "no archives found", "TITLE0" => "Step 1: Archive Creation", "TITLE1" => "Step 2: Archive Extracting", "TITLE_PROCESS1" => "Step 2: Extracting an archive...", "TITLE_PROCESS2" => "Step 3: Restoring database...", "TITLE2" => "Step 3: Database restore", "SELECT_LANG" => "Choose the language", "ARC_SKIP" => "Archive is already extracted", "ARC_SKIP_DESC" => "Starting database restore", "ARC_NAME" => "Archive is stored in document root folder", "ARC_DOWN_PROCESS" => "Downloading:", "ARC_LOCAL" => "Upload from local disk", "MAX_TIME" => "Step (sec.)", "ERR_NO_ARC" => "Archive for extracting is not specified!", "BUT_TEXT1" => "Continue", "BUT_TEXT_BACK" => "Back", "DUMP_NAME" => "Database dump file:", "USER_NAME" => "Database User Name", "USER_PASS" => "Password", "BASE_NAME" => "Database Name", "BASE_HOST" => "Database Host", "BASE_RESTORE" => "Restore", "ERR_NO_DUMP" => "Database dump file is not specified!", "ERR_EXTRACT" => "Error", "ERR_UPLOAD" => "Unable to upload file", "ERR_DUMP_RESTORE" => "Error restoring the database:", "ERR_DB_CONNECT" => "Error connecting the database:", "ERR_CREATE_DB" => "Error creating the database", "ERR_TAR_TAR" => "There are files with tar.tar extension presents. Should be tar.1, tar.2 and so on", "FINISH" => "Successfully completed", "FINISH_MSG" => "Restoring of the system was completed.", "EXTRACT_FINISH_TITLE" => "Archive extracting", "EXTRACT_FINISH_MSG" => "Archive extracting was completed.", "BASE_CREATE_DB" => "Create database", "BASE_CLOUDS" => "Cloud files:", "BASE_CLOUDS_Y" => "store locally", "BASE_CLOUDS_N" => "leave in the cloud", "EXTRACT_FINISH_DELL" => "Warning! You should delete restore.php script and backup copy file from the root folder of your site!", "EXTRACT_FULL_FINISH_DELL" => "Warning! You should delete restore.php script, backup copy file and database dump from the root folder of your site!", "BUT_DELL" => "Delete", "FINISH_ERR_DELL" => "Failed to delete temporary files! You should delete them manually", "FINISH_ERR_DELL_TITLE" => "Error deleting the files!", "NO_READ_PERMS" => "No permissions for reading Web Server root", "UTF8_ERROR1" => "Warning! Your server is not configured for UTF-8 encoding. Please set mbstring.func_overload=2 and mbstring.internal_encoding=UTF-8.", "UTF8_ERROR2" => "Warning! Your server is configured for UTF-8 encoding. Please set mbstring.func_overload=0 or mbstring.internal_encoding=ISO-8859-1.", "DOC_ROOT_WARN" => "Warning: In the site settings, make sure that the path to the root folder is correct, otherwise access to the public part will be promblematic or impossible.", "HTACCESS_WARN" => "Warning! The file .htaccess was saved as .htaccess.restore, because it may contain directives which are not permitted on this server. Please rename it manually using FTP.", 'TAR_WRONG_BLOCK_SIZE' => 'Wrong Block size: ', 'TAR_ERR_FORMAT' => 'Archive is currupted, error block: ', 'TAR_EMPTY_FILE' => 'Empty filename, block: ', 'TAR_ERR_CRC' => 'Checksum error on file: ', 'TAR_ERR_FOLDER_CREATE' => 'Can\'t create folder: ', 'TAR_ERR_FILE_CREATE' => 'Can\'t create file: ', 'TAR_ERR_FILE_OPEN' => 'Can\'t open file: ', 'TAR_ERR_FILE_SIZE' => 'Filesize differs: ', 'TAR_ERR_WRITE_HEADER' => 'Error writing header', 'TAR_PATH_TOO_LONG' => 'Path is too long: ', 'TAR_ERR_FILE_READ' => 'Error reading file: ', 'TAR_ERR_FILE_WRITE' => 'Error adding file: ', 'TAR_ERR_FILE_NO_ACCESS' => 'No access to file: ', 'TAR_NO_GZIP' => 'PHP extension GZIP is not available', ); $MESS = array(); if (LANG=="ru") { $MESS["LOADER_SUBTITLE1"] = "Загрузка архива"; $MESS["LOADER_SUBTITLE1_ERR"] = "Ошибка загрузки"; $MESS["STATUS"] = "% выполнено..."; $MESS["LOADER_MENU_UNPACK"] = "Распаковка файла"; $MESS["LOADER_TITLE_LIST"] = "Выбор файла"; $MESS["LOADER_TITLE_LOAD"] = "Загрузка файла на сайт"; $MESS["LOADER_TITLE_UNPACK"] = "Распаковка файла"; $MESS["LOADER_TITLE_LOG"] = "Отчет по загрузке"; $MESS["LOADER_NEW_LOAD"] = "Загрузить"; $MESS["LOADER_BACK_2LIST"] = "Вернуться в список файлов"; $MESS["LOADER_LOG_ERRORS"] = "Загрузка архива не удалась"; $MESS["LOADER_NO_LOG"] = "Log-файл не найден"; $MESS["LOADER_KB"] = "кб"; $MESS["LOADER_LOAD_QUERY_SERVER"] = "Подключение к серверу..."; $MESS["LOADER_LOAD_QUERY_DISTR"] = "Запрашиваю файл #DISTR#"; $MESS["LOADER_LOAD_CONN2HOST"] = "Подключение к серверу #HOST#..."; $MESS["LOADER_LOAD_NO_CONN2HOST"] = "Не могу соединиться с #HOST#:"; $MESS["LOADER_LOAD_QUERY_FILE"] = "Запрашиваю файл..."; $MESS["LOADER_LOAD_WAIT"] = "Ожидаю ответ..."; $MESS["LOADER_LOAD_SERVER_ANSWER"] = "Ошибка загрузки. Сервер ответил: #ANS#"; $MESS["LOADER_LOAD_SERVER_ANSWER1"] = "Ошибка загрузки. У вас нет прав на доступ к этому файлу. Сервер ответил: #ANS#"; $MESS["LOADER_LOAD_NEED_RELOAD"] = "Ошибка загрузки. Докачка файла невозможна."; $MESS["LOADER_LOAD_NO_WRITE2FILE"] = "Не могу открыть файл #FILE# на запись"; $MESS["LOADER_LOAD_LOAD_DISTR"] = "Загружаю файл #DISTR#"; $MESS["LOADER_LOAD_ERR_SIZE"] = "Ошибка размера файла"; $MESS["LOADER_LOAD_ERR_RENAME"] = "Не могу переименовать файл #FILE1# в файл #FILE2#"; $MESS["LOADER_LOAD_CANT_OPEN_WRITE"] = "Не могу открыть файл #FILE# на запись"; $MESS["LOADER_LOAD_CANT_OPEN_READ"] = "Не могу открыть файл #FILE# на чтение"; $MESS["LOADER_LOAD_LOADING"] = "Загружаю файл... дождитесь окончания загрузки..."; $MESS["LOADER_LOAD_FILE_SAVED"] = "Файл сохранен: #FILE# [#SIZE# байт]"; $MESS["LOADER_UNPACK_ACTION"] = "Распаковываю файл... дождитесь окончания распаковки..."; $MESS["LOADER_UNPACK_UNKNOWN"] = "Неизвестная ошибка. Повторите процесс еще раз или обратитесь в службу технической поддержки"; $MESS["LOADER_UNPACK_SUCCESS"] = "Файл успешно распакован"; $MESS["LOADER_UNPACK_ERRORS"] = "Файл распакован с ошибками"; $MESS["LOADER_KEY_DEMO"] = "Демонстрационная версия"; $MESS["LOADER_KEY_COMM"] = "Коммерческая версия"; $MESS["UPDATE_SUCCESS"] = "Обновлено успешно. Открыть."; $MESS["LOADER_NEW_VERSION"] = "Доступна новая версия скрипта восстановления, но загрузить её не удалось"; } else { $MESS["LOADER_SUBTITLE1"] = "Loading"; $MESS["LOADER_SUBTITLE1_ERR"] = "Loading Error"; $MESS["STATUS"] = "% done..."; $MESS["LOADER_MENU_LIST"] = "Select package"; $MESS["LOADER_MENU_UNPACK"] = "Unpack file"; $MESS["LOADER_TITLE_LIST"] = "Select file"; $MESS["LOADER_TITLE_LOAD"] = "Uploading file to the site"; $MESS["LOADER_TITLE_UNPACK"] = "Unpack file"; $MESS["LOADER_TITLE_LOG"] = "Upload report"; $MESS["LOADER_NEW_ED"] = "package edition"; $MESS["LOADER_NEW_AUTO"] = "automatically start unpacking after loading"; $MESS["LOADER_NEW_STEPS"] = "load gradually with interval:"; $MESS["LOADER_NEW_STEPS0"] = "unlimited"; $MESS["LOADER_NEW_LOAD"] = "Download"; $MESS["LOADER_BACK_2LIST"] = "Back to packages list"; $MESS["LOADER_LOG_ERRORS"] = "Error occured"; $MESS["LOADER_NO_LOG"] = "Log file not found"; $MESS["LOADER_KB"] = "kb"; $MESS["LOADER_LOAD_QUERY_SERVER"] = "Connecting server..."; $MESS["LOADER_LOAD_QUERY_DISTR"] = "Requesting package #DISTR#"; $MESS["LOADER_LOAD_CONN2HOST"] = "Connection to #HOST#..."; $MESS["LOADER_LOAD_NO_CONN2HOST"] = "Cannot connect to #HOST#:"; $MESS["LOADER_LOAD_QUERY_FILE"] = "Requesting file..."; $MESS["LOADER_LOAD_WAIT"] = "Waiting for response..."; $MESS["LOADER_LOAD_SERVER_ANSWER"] = "Error while downloading. Server reply was: #ANS#"; $MESS["LOADER_LOAD_SERVER_ANSWER1"] = "Error while downloading. Your can not download this package. Server reply was: #ANS#"; $MESS["LOADER_LOAD_NEED_RELOAD"] = "Error while downloading. Cannot resume download."; $MESS["LOADER_LOAD_NO_WRITE2FILE"] = "Cannot open file #FILE# for writing"; $MESS["LOADER_LOAD_LOAD_DISTR"] = "Downloading package #DISTR#"; $MESS["LOADER_LOAD_ERR_SIZE"] = "File size error"; $MESS["LOADER_LOAD_ERR_RENAME"] = "Cannot rename file #FILE1# to #FILE2#"; $MESS["LOADER_LOAD_CANT_OPEN_WRITE"] = "Cannot open file #FILE# for writing"; $MESS["LOADER_LOAD_CANT_OPEN_READ"] = "Cannot open file #FILE# for reading"; $MESS["LOADER_LOAD_LOADING"] = "Download in progress. Please wait..."; $MESS["LOADER_LOAD_FILE_SAVED"] = "File saved: #FILE# [#SIZE# bytes]"; $MESS["LOADER_UNPACK_ACTION"] = "Unpacking the package. Please wait..."; $MESS["LOADER_UNPACK_UNKNOWN"] = "Unknown error occured. Please try again or consult the technical support service"; $MESS["LOADER_UNPACK_SUCCESS"] = "The file successfully unpacked"; $MESS["LOADER_UNPACK_ERRORS"] = "Errors occured while unpacking the file"; $MESS["LOADER_KEY_DEMO"] = "Demo version"; $MESS["LOADER_KEY_COMM"] = "Commercial version"; $MESS["UPDATE_SUCCESS"] = "Successful update. Open."; $MESS["LOADER_NEW_VERSION"] = "Error occured while updating restore.php script!"; } $strErrMsg = ''; if (defined('VMBITRIX')) { $this_script_name = basename(__FILE__); $bx_host = 'www.1c-bitrix.ru'; $bx_url = '/download/files/scripts/'.$this_script_name; $form = ''; // Check for updates $res = @fsockopen($bx_host, 80, $errno, $errstr, 3); if($res) { $strRequest = "HEAD ".$bx_url." HTTP/1.1\r\n"; $strRequest.= "Host: ".$bx_host."\r\n"; $strRequest.= "\r\n"; fputs($res, $strRequest); while ($line = fgets($res, 4096)) { if (@preg_match("/Content-Length: *([0-9]+)/i", $line, $regs)) { if (filesize(__FILE__) != trim($regs[1])) { $tmp_name = $this_script_name.'.tmp'; if (LoadFile('http://'.$bx_host.$bx_url, $tmp_name)) { if (rename($_SERVER['DOCUMENT_ROOT'].'/'.$tmp_name,__FILE__)) { bx_accelerator_reset(); echo ''.LoaderGetMessage('UPDATE_SUCCESS'); die(); } else $strErrMsg = str_replace("#FILE#", $this_script_name, LoaderGetMessage("LOADER_LOAD_CANT_OPEN_WRITE")); } else $strErrMsg = LoaderGetMessage('LOADER_NEW_VERSION'); } break; } } fclose($res); } } $bSelectDumpStep = false; if ($_REQUEST['source']=='dump') $bSelectDumpStep = true; $Step = IntVal($_REQUEST["Step"]); if ($Step == 2 && !$bSelectDumpStep) { if ($_REQUEST['source']=='download') { $url = $_REQUEST['arc_down_url']; if (!$url) $url = $_REQUEST['arc_down_site'].'/bitrix/backup/'.$_REQUEST['arc_down_name']; if (!preg_match('#http://#',$url)) $url = 'http://'.$url; $arc_name = trim(basename($url)); if (!preg_match("#\.tar(\.gz)?(.[0-9]+)?$#",$arc_name)) $arc_name = 'archive.tar.gz'; $strLog = ''; $status = ''; if ($_REQUEST['continue']) $res = LoadFile($url, $_SERVER['DOCUMENT_ROOT'].'/'.$arc_name, $strRealUrl); else { $res = 2; SetCurrentProgress(0); } if (!$res) { $ar = array( 'TITLE' => LoaderGetMessage('LOADER_SUBTITLE1_ERR'), 'TEXT' => nl2br($strLog), 'BOTTOM' => ' ' ); html($ar); die(); } elseif ($res==2) // частичная закачка { $text = getMsg('ARC_DOWN_PROCESS').' '.htmlspecialchars($arc_name).'' . $status . ''. ''. ''. ''; } else { $next_arc_name = CTar::getNextName($arc_name); $next_url = str_replace($arc_name, $next_arc_name, $url); $res = LoadFile($next_url, $next_arc_name, $strNextRealUrl); if ($res != false && $strRealUrl != $strNextRealUrl) { $text = getMsg('ARC_DOWN_PROCESS').' '.htmlspecialchars($next_arc_name).'' . $status . ''. ''. ''. ''; } else { $text = $status . ''. ''; } } $bottom = ' '; showMsg(LoaderGetMessage('LOADER_SUBTITLE1'),$text,$bottom); ?>'. ''; showMsg(LoaderGetMessage('LOADER_SUBTITLE1'),$text); ?> getMsg('ERR_EXTRACT'), 'TEXT' => getMsg('ERR_UPLOAD'), 'BOTTOM' => ' ' ); html($ar); die(); } } } elseif($Step == 3) { if ($_REQUEST['db_settings'] == 'skip') $Step++; else { $d_pos = (double) $_REQUEST["d_pos"]; if ($d_pos < 0) $d_pos = 0; if ($_REQUEST['db_settings']=='default' || $_REQUEST['db_settings'] == 'env') { $_REQUEST['db_host'] = 'localhost'.($_REQUEST['db_settings'] == 'env' ? ':31006' : ''); $_REQUEST['db_name'] = 'bitrix'; $_REQUEST['db_user'] = 'root'; $_REQUEST['db_pass'] = ''; $_REQUEST['create_db'] = 'Y'; } $oDB = new CDBRestore($_REQUEST["db_host"], $_REQUEST["db_name"], $_REQUEST["db_user"], $_REQUEST["db_pass"], $_REQUEST["dump_name"], $d_pos); $oDB->LocalCloud = $_REQUEST['LocalCloud']; if(!$oDB->Connect()) { $strErrMsg = $oDB->getError(); $Step = 2; $bSelectDumpStep = true; } } } if(!$Step) { $ar = array( 'TITLE' => getMsg("TITLE0", LANG), 'TEXT' => ($strErrMsg ? '
'.$strErrMsg.'
' : ''). getMsg('BEGIN') . '
' . (file_exists($img = 'images/dump'.(LANG=='ru'?'_ru':'').'.png') ? '' : ''), 'BOTTOM' => (defined('VMBITRIX') ? ' ' : ''). '' ); html($ar); } elseif($Step == 1) { $arc_down_url = $_REQUEST['arc_down_url'] ? $_REQUEST['arc_down_url'] : 'http://example.com/bitrix/backup/2012-05-02.18-27-04.s1.368e07e6.tar.gz'; $local_arc_name = htmlspecialchars(ltrim($_REQUEST['local_arc_name'],'/')); $option = getArcList(); $ar = array( 'TITLE' => getMsg("TITLE1", LANG), 'TEXT' => $local_arc_name ? '
'.getMsg("ARC_LOCAL_NAME", LANG).' '.$local_arc_name.'
' : ($strErrMsg ? '
'.$strErrMsg.'
' : ''). '
'. ($option === false ? '
'.getMsg('NO_READ_PERMS', LANG).'
' : ''). '
'. '
'. '
' , 'BOTTOM' => ' '. '' ); html($ar); ?> path = $_SERVER['DOCUMENT_ROOT']; $tar->ReadBlockCurrent = intval($_REQUEST['ReadBlockCurrent']); $bottom = ' '; if ((file_exists($f = $_SERVER['DOCUMENT_ROOT'].'/'.$arc_name)) && $tar->openRead($f)) { $DataSize = intval($_REQUEST['DataSize']); if(!isset($_REQUEST['Block'])) // first step { $DataSize = $tar->getArchiveSize(); while(file_exists($file = $tar->getNextName($file))) $DataSize += $tar->getArchiveSize($file); SetCurrentProgress(0); $r = true; } else { $Block = intval($_REQUEST['Block']); $tar->Skip($Block); while(($r = $tar->extractFile()) && haveTime()); } if($r === false) // Error showMsg(getMsg("ERR_EXTRACT", LANG), implode('
',$tar->err), $bottom); elseif ($r === 0) // Finish $bSelectDumpStep = true; else { SetCurrentProgress(($tar->BlockHeader + $tar->ReadBlockCurrent) * 512,$DataSize, $red=false); $text = $status . ''. ''. ''. ''; showMsg(getMsg('TITLE_PROCESS1'),$text,$bottom); ?>close(); } else showMsg(getMsg("ERR_EXTRACT", LANG), getMsg('TAR_ERR_FILE_OPEN', LANG).htmlspecialchars($f),$bottom); } if ($bSelectDumpStep) { if(file_exists($dbconn)) { include($dbconn); $bUTF_conf = (defined('BX_UTF') && BX_UTF === true); if ($bUTF_conf && !$bUTF_serv) $strErrMsg = getMsg('UTF8_ERROR1').'

'.$strErrMsg; elseif (!$bUTF_conf && $bUTF_serv) $strErrMsg = getMsg('UTF8_ERROR2').'

'.$strErrMsg; } $arDName = getDumpList(); $strDName = ''; foreach($arDName as $db) $strDName .= ''; if(count($arDName)) { $ar = array( 'TITLE' => getMsg("TITLE2", LANG), 'TEXT' => ($strErrMsg ? '
'.$strErrMsg.'
' : ''). ''. (count($arDName)>1 ? getMsg("DB_SELECT").' ' : '' ) . '

'.getMsg("DB_SETTINGS", LANG).'

'. '

'. getMsg("BASE_HOST", LANG).'0 ? htmlspecialchars($_REQUEST['db_host']) : "localhost").'">
'. getMsg("USER_NAME", LANG).'0 ? htmlspecialchars($_REQUEST["db_user"]) : "").'">
'. getMsg("USER_PASS", LANG).'0 ? htmlspecialchars($_REQUEST["db_pass"]) : "").'">
'. getMsg("BASE_NAME", LANG).'0 ? htmlspecialchars($_REQUEST["db_name"]) : "").'">
'. getMsg("BASE_CREATE_DB", LANG).'
'. ( file_exists($_SERVER['DOCUMENT_ROOT'].'/bitrix/backup/clouds') ? '
'.getMsg("BASE_CLOUDS", LANG).'
' : '' ) , 'BOTTOM' => ' '. '' ); html($ar); ?> '.$strErrMsg.'' : ''). (file_exists($_SERVER['DOCUMENT_ROOT'].'/.htaccess.restore') ? '
'.getMsg('HTACCESS_WARN').'
' : '') . getMsg("EXTRACT_FINISH_MSG", LANG) . ' '; $bottom = ' '. ''; showMsg(getMsg("EXTRACT_FINISH_TITLE", LANG), $text, $bottom); } } } elseif($Step == 3) { $d_pos = (double) $_REQUEST["d_pos"]; if ($d_pos < 0) $d_pos = 0; if (!isset($_REQUEST['d_pos'])) // start { if(file_exists($dbconn)) { include($dbconn); $arReplace = array( 'DBHost' => 'db_host', 'DBLogin' => 'db_user', 'DBPassword' => 'db_pass', 'DBName' => 'db_name' ); $arFile = file($dbconn); $bCron = false; foreach($arFile as $line) { if (preg_match("#^[ \t]*".'\$'."(DB[a-zA-Z]+)#",$line,$regs)) { $key = $regs[1]; $new_val = $_REQUEST[$arReplace[$key]]; if (isset($new_val) && $$key != $new_val) { $strFile.='#'.$line. '$'.$key.' = "'.addslashes(str_replace('$','\$',$new_val)).'";'."\n\n"; } else $strFile.=$line; } else $strFile.=$line; if (preg_match('#BX_CRONTAB_SUPPORT#',$line)) // почта уже на кроне $bCron = true; } if (defined('VMBITRIX') && !$bCron) $strFile = '<'.'?define("BX_CRONTAB_SUPPORT", true);?'.'>'.$strFile; $f = fopen($dbconn,"wb"); fputs($f,$strFile); fclose($f); } SetCurrentProgress(0); $r = true; } else $r = $oDB->restore(); $bottom = ' '; if($r && !$oDB->is_end()) { $d_pos = $oDB->getPos(); $oDB->close(); $arc_name = $_REQUEST["arc_name"]; SetCurrentProgress($d_pos,filesize($_SERVER['DOCUMENT_ROOT'].'/bitrix/backup/'.$_REQUEST['dump_name'])); $text = $status . ' 0 ? htmlspecialchars($_REQUEST["db_pass"]) : "").'"> '; showMsg(getMsg('TITLE_PROCESS2'),$text,$bottom); ?>getError() != "") showMsg(getMsg("ERR_DUMP_RESTORE", LANG), '
'.$oDB->getError().'
', $bottom); else { $rs = $oDB->Query('SELECT DOC_ROOT FROM b_lang WHERE DOC_ROOT IS NOT NULL'); $text = getMsg("FINISH_MSG", LANG) . (($rs && mysql_fetch_array($rs)) ? '
'.getMsg('DOC_ROOT_WARN').'
' : '') . (file_exists($_SERVER['DOCUMENT_ROOT'].'/.htaccess.restore') ? '
'.getMsg('HTACCESS_WARN').'
' : '') . ' '; $bottom = ''; showMsg(getMsg("FINISH", LANG), $text, $bottom); } } } elseif($Step == 4) { if ($_REQUEST['dump_name']) { @unlink($_SERVER["DOCUMENT_ROOT"]."/bitrix/backup/".$_REQUEST["dump_name"]); @unlink($_SERVER["DOCUMENT_ROOT"]."/bitrix/backup/".str_replace('.sql','_after_connect.sql',$_REQUEST["dump_name"])); } @unlink($_SERVER['DOCUMENT_ROOT'].'/bitrix8setup.php'); $ok = unlink($_SERVER["DOCUMENT_ROOT"]."/restore.php"); if($_REQUEST['arc_name']) { $ok = unlink($_SERVER["DOCUMENT_ROOT"]."/".$_REQUEST["arc_name"]) && $ok; $i = 0; while(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$_REQUEST['arc_name'].'.'.++$i)) $ok = unlink($_SERVER['DOCUMENT_ROOT'].'/'.$_REQUEST['arc_name'].'.'.$i) && $ok; } if (!$ok) showMsg(getMsg("FINISH_ERR_DELL_TITLE", LANG), getMsg("FINISH_ERR_DELL", LANG)); else { showMsg(getMsg("FINISH", LANG), getMsg("FINISH_MSG", LANG)); ?>db_Conn); } function CDBRestore($DBHost, $DBName, $DBLogin, $DBPassword, $DBdump, $d_pos) { $this->DBHost = $DBHost; $this->DBLogin = $DBLogin; $this->DBPassword = $DBPassword; $this->DBName = $DBName; $this->DBdump = $_SERVER["DOCUMENT_ROOT"]."/bitrix/backup/".$DBdump; $this->d_pos = $d_pos; } //Соединяется с базой данных function Connect() { $this->type="MYSQL"; if (!defined("DBPersistent")) define("DBPersistent",false); if (DBPersistent) { $this->db_Conn = @mysql_pconnect($this->DBHost, $this->DBLogin, $this->DBPassword); } else { $this->db_Conn = @mysql_connect($this->DBHost, $this->DBLogin, $this->DBPassword); } if(!($this->db_Conn)) { if (DBPersistent) $s = "mysql_pconnect"; else $s = "mysql_connect"; if(($str_err = mysql_error()) != "") $this->db_Error .= "
Error! ".$s."('-', '-', '-')
".$str_err."
"; return false; } mysql_query('SET FOREIGN_KEY_CHECKS = 0', $this->db_Conn); $after_file = str_replace('.sql','_after_connect.sql',$this->DBdump); if (file_exists($after_file)) { $rs = fopen($after_file,'rb'); $str = fread($rs,filesize($after_file)); fclose($rs); $arSql = explode(';',$str); foreach($arSql as $sql) mysql_query($sql, $this->db_Conn); } if(!@mysql_select_db($this->DBName, $this->db_Conn)) { if (@$_REQUEST["create_db"]=="Y") { if(!@mysql_query("CREATE DATABASE `".mysql_escape_string($this->DBName)."`", $this->db_Conn)) { $this->db_Error = getMsg("ERR_CREATE_DB", LANG).': '.mysql_error(); return false; } @mysql_select_db($this->DBName, $this->db_Conn); } if(($str_err = mysql_error($this->db_Conn)) != "") $this->db_Error = "
Error! mysql_select_db($this->DBName)
".$str_err."
"; return false; } return true; } function readSql() { $cache =""; while(!feof($this->_dFile) && (substr($cache, (strlen($cache)-2), 1) != ";")) $cache .= fgets($this->_dFile); if(!feof($this->_dFile)) return $cache; else { $this->f_end = true; return false; } } function restore() { $this->_dFile = @fopen($this->DBdump, 'r'); if($this->d_pos > 0) @fseek($this->_dFile, $this->d_pos); $sql = ""; while(($sql = $this->readSql()) && haveTime()) { if (defined('VMBITRIX')) // избавимся от MyISAM { if (preg_match('#^CREATE TABLE#i',$sql)) { $sql = preg_replace('#ENGINE=MyISAM#i','',$sql); $sql = preg_replace('#TYPE=MyISAM#i','',$sql); } } $result = @mysql_query($sql, $this->db_Conn); if(!$result) { $this->db_Error .= mysql_error().'

'.htmlspecialchars($sql); return false; } $sql = ""; } mysql_query('SET FOREIGN_KEY_CHECKS = 1', $this->db_Conn); if($sql != "") { $result = @mysql_query($sql, $this->db_Conn); if(!$result) { $this->db_Error .= mysql_error().'

'.htmlspecialchars($sql); return false; } $sql = ""; } if ($this->LocalCloud && $this->f_end) { $i = ''; while(file_exists($_SERVER['DOCUMENT_ROOT'].'/upload/'.($name = 'clouds'.$i))) $i++; if (!file_exists($f = $_SERVER['DOCUMENT_ROOT'].'/upload')) mkdir($f); if (rename($_SERVER['DOCUMENT_ROOT'].'/bitrix/backup/clouds', $_SERVER['DOCUMENT_ROOT'].'/upload/'.$name)) { $arFiles = scandir($_SERVER['DOCUMENT_ROOT'].'/upload/'.$name); foreach($arFiles as $file) { if ($id = intval($file)) mysql_query('UPDATE b_file SET SUBDIR = CONCAT("'.$name.'/'.$id.'/", SUBDIR), HANDLER_ID=NULL WHERE HANDLER_ID ='.$id); } } } return true; } function getError() { return $this->db_Error; } function getPos() { if (is_resource($this->_dFile)) { return @ftell($this->_dFile); } } function close() { unset($this->_dFile); return true; } function is_end() { return $this->f_end; } } function getDumpList() { $arDump = array(); if (is_dir($back_dir = $_SERVER["DOCUMENT_ROOT"]."/bitrix/backup")) { $handle = opendir($back_dir); while (false !== ($file = readdir($handle))) { if($file == "." || $file == "..") continue; if(is_dir($back_dir.'/'.$file)) continue; if (strpos($file,'_after_connect.sql')) continue; if(substr($file, strlen($file) - 3, 3) == "sql") $arDump[] = $file; } } return $arDump; } function getMsg($str_index, $str_lang='') { global $mArr_ru, $mArr_en; if(LANG == "ru") return $mArr_ru[$str_index]; else return $mArr_en[$str_index]; } function getArcList() { $arc = ""; global $strErrMsg; $handle = @opendir($_SERVER["DOCUMENT_ROOT"]); if (!$handle) return false; while (false !== ($file = @readdir($handle))) { if($file == "." || $file == "..") continue; if(is_dir($_SERVER["DOCUMENT_ROOT"]."/".$file)) continue; if(substr($file, strlen($file) - 6, 6) == "tar.gz" || substr($file, strlen($file) - 3, 3) == "tar") $arc .= "