Current Path : /var/www/html/clients/old.e-nkama.ru/e-nkama_bitrix/ |
Current File : /var/www/html/clients/old.e-nkama.ru/e-nkama_bitrix/restore.php |
<? error_reporting(E_ALL & ~E_NOTICE); if(str_replace(array('\\','/'),'',dirname(__FILE__)) != str_replace(array('\\','/'),'',$_SERVER['DOCUMENT_ROOT'])) die('Must be started from DOCUMENT_ROOT'); if(isset($_SERVER["BX_PERSONAL_ROOT"]) && $_SERVER["BX_PERSONAL_ROOT"] <> "") define("BX_PERSONAL_ROOT", $_SERVER["BX_PERSONAL_ROOT"]); else define("BX_PERSONAL_ROOT", "/bitrix"); if (!defined("BX_DIR_PERMISSIONS")) define("BX_DIR_PERMISSIONS", 0755); if (!defined("BX_FILE_PERMISSIONS")) define("BX_FILE_PERMISSIONS", 0644); if(!defined("START_EXEC_TIME")) define("START_EXEC_TIME", getmicrotime()); if (function_exists('mb_internal_encoding')) mb_internal_encoding('ISO-8859-1'); # http://bugs.php.net/bug.php?id=48886 - We have 2Gb file limit on Linux #@set_time_limit(0); ob_start(); $lang = $_REQUEST['lang']?($_REQUEST['lang']=='ru'?'ru':'en'):(preg_match('#ru#i',$_SERVER['HTTP_ACCEPT_LANGUAGE'])?'ru':'en'); if ($lang=='ru' && !headers_sent()) header("Content-type:text/html; charset=windows-1251"); $mArr_ru = array( "WINDOW_TITLE" => "Âîññòàíîâëåíèå àðõèâà", "BACK" => "Íàçàä", "BEGIN" => " <p> <ul> <li>Ïåðåéäèòå â àäìèíèñòðàòèâíóþ ïàíåëü ñâîåãî ñàéòà íà ñòðàíèöó <b>Íàñòðîéêè > Èíñòðóìåíòû > Ðåçåðâíîå êîïèðîâàíèå</b> <li>Ñîçäàéòå ïîëíóþ ðåçåðâíóþ êîïèþ, êîòîðàÿ áóäåò âêëþ÷àòü <b>ïóáëè÷íóþ ÷àñòü</b>, <b>ÿäðî</b> è <b>áàçó äàííûõ</b> </ul> <b>Äîêóìåíòàöèÿ:</b> <a href='http://dev.1c-bitrix.ru/api_help/main/going_remote.php' target='_blank'>http://dev.1c-bitrix.ru/api_help/main/going_remote.php</a> </p> ", "ARC_DOWN" => "Ñêà÷àòü àðõèâ ñ äàëüíåãî ñàéòà", "DB_SETTINGS" => "Äàííûå äëÿ ïîäêëþ÷åíèÿ ê áàçå äàííûõ:", "DB_DEF" => "ïî óìîë÷àíèþ äëÿ âûäåëåííîãî ñåðâåðà èëè âèðòóàëüíîé ìàøèíû", "DB_ENV" => "âîññòàíîâëåíèå â "Áèòðèêñ: Âåá-îêðóæåíèå"", "DB_OTHER" => "óñòàíîâèòü çíà÷åíèÿ âðó÷íóþ", "ARC_DOWN_SITE" => "àäðåñ ñàéòà (www.site.ru):", "ARC_DOWN_NAME" => "èìÿ àðõèâà (20090225_443e1.tar.gz):", "OR" => "ÈËÈ", "ARC_DOWN_URL" => "ïðÿìîé URL àðõèâà (http://site.ru/20090225_443e1.tar.gz):", "NO_FILES" => "íåò àðõèâîâ", "TITLE0" => "Øàã 1: Ïîäãîòîâêà àðõèâà", "TITLE1" => "Øàã 2: Ðàñïàêîâêà àðõèâà", "TITLE_PROCESS1" => "Øàã 2: Âûïîëíÿåòñÿ ðàñïàêîâêà àðõèâà", "TITLE_PROCESS2" => "Øàã 3: Âûïîëíÿåòñÿ âîññòàíîâëåíèå áàçû äàííûõ", "TITLE2" => "Øàã 3: Âîññòàíîâëåíèå áàçû äàííûõ", "SELECT_LANG" => "Âûáåðèòå ÿçûê", "ARC_SKIP" => "Àðõèâ óæå ðàñïàêîâàí", "ARC_SKIP_DESC" => "ïåðåõîä ê âîññòàíîâëåíèþ áàçû äàííûõ", "ARC_NAME" => "Àðõèâ çàãðóæåí â êîðíåâóþ ïàïêó ñåðâåðà", "ARC_LOCAL" => "Çàãðóçèòü ñ ëîêàëüíîãî äèñêà", "MAX_TIME" => "Øàã âûïîëíåíèÿ (ñåê.)", "ERR_NO_ARC" => "Íå âûáðàí àðõèâ äëÿ ðàñïàêîâêè!", "BUT_TEXT1" => "Äàëåå", "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" => "Îøèáêà ñîçäàíèÿ áàçû", "FINISH" => "Îïåðàöèÿ âûïîëíåíà óñïåøíî", "FINISH_MSG" => "Îïåðàöèÿ âîññòàíîâëåíèÿ ñèñòåìû çàâåðøåíà óñïåøíî!", "EXTRACT_FINISH_TITLE" => "Ðàñïàêîâêà àðõèâà", "EXTRACT_FINISH_MSG" => "Ðàñïàêîâêà àðõèâà çàâåðøåíà óñïåøíî!", "BASE_CREATE_DB" => "Ñîçäàòü áàçó äàííûõ", "EXTRACT_FINISH_DELL" => "Îáÿçàòåëüíî óäàëèòå ñêðèïò restore.php è ôàéë ðåçåðâíîé êîïèè èç êîðíåâîé äèðåêòîðèè ñàéòà.", "EXTRACT_FULL_FINISH_DELL" => "Îáÿçàòåëüíî óäàëèòå ñêðèïò restore.php, ôàéë ðåçåðâíîé êîïèè èç êîðíåâîé äèðåêòîðèè ñàéòà, à òàêæå äàìï áàçû.", "BUT_DELL" => "Óäàëèòü", "FINISH_ERR_DELL" => "Íå óäàëîñü óäàëèòü âñå âðåìåííûå ôàéëû! Îáÿçàòåëüíî óäàëèòå èõ âðó÷íóþ.", "FINISH_ERR_DELL_TITLE" => "Îøèáêà óäàëåíèÿ ôàéëîâ!", "NO_READ_PERMS" => "Íåò ïðàâ íà ÷òåíèå êîðíåâîé ïàïêè ñàéòà", ); $mArr_en = array( "WINDOW_TITLE" => "Restoring", "BACK" => "Back", "BEGIN" => " <p> <ul> <li>Step 1. Open Control Panel section of your old site and select <b>Settings > Tools > Backup</b> <li>Create full archive which contains <b>public site files</b>, <b>kernel files</b> and <b>database dump</b> </ul> <b>Documentation:</b> <a href='http://www.bitrixsoft.com/support/training/course/lesson.php?COURSE_ID=12&ID=441' target='_blank'>learning course</a> </p> ", "ARC_DOWN" => "Download from remote server", "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", "ARC_DOWN_SITE" => "Server URL (www.site.com):", "ARC_DOWN_NAME" => "Archive name (20090225_443e1.tar.gz):", "OR" => "OR", "ARC_DOWN_URL" => "Archive URL (http://www.site.com/20090225_443e1.tar.gz):", "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_LOCAL" => "Upload from local disk", "MAX_TIME" => "Step (sec.)", "ERR_NO_ARC" => "Archive for extracting is not specified!", "BUT_TEXT1" => "Continue", "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", "FINISH" => "Successfully completed", "FINISH_MSG" => "Restoring of the system was completed successfully!", "EXTRACT_FINISH_TITLE" => "Archive extracting", "EXTRACT_FINISH_MSG" => "Archive extracting was completed successfully!", "BASE_CREATE_DB" => "Create database", "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", ); $MESS = array(); if ($lang=="ru") { $MESS["LOADER_SUBTITLE1"] = "Çàãðóçêà àðõèâà"; $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"] = "Êîììåð÷åñêàÿ âåðñèÿ"; } else { $MESS["LOADER_SUBTITLE1"] = "Loading"; $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"] = "Establishing 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"; } if (!$_REQUEST['ajax_mode']) { ?> <html> <head> <title><?= getMsg("WINDOW_TITLE", $lang)?></title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <style type="text/css"> .tablebody1 {background-color:#f9fafd; padding:5px;font-family:Verdana,Arial, Helvetica, sans-serif;color:#616263;font-size:10px;} .tabletitle1 {background-color:#ffffff; font-family:Arial;color:#000000;font-size:17px;font-weight: bold;} .tableborder1 {background-color:#aeb8d7; padding:0;} .tableborder2 {background-color:#cccccc; padding:0;} .selectitem {width: 200;} </style> </head> <body> <table width=100% height=100%><tr><td align=center valign=middle> <form name="restore" id="restore" action="restore.php" enctype="multipart/form-data" method="POST"> <input type="hidden" name="Step" id="Step_id" value=""> <input type="hidden" name="lang" value="<?=$lang?>"> <script language="JavaScript"> function reloadPage(val, lang, delay) { document.getElementById('Step_id').value = val; document.getElementById('restore').action='restore.php?lang=<?=$lang?>'; if (null!=delay) window.setTimeout("document.getElementById('restore').submit()",1000); else document.getElementById('restore').submit(); } </script> <? } if ($_REQUEST['source']=='dump') $bSkipExtract = true; $Step = IntVal($_REQUEST["Step"]); if ($Step == 2 && !$bSkipExtract) { if ($_REQUEST['source']=='download') { $url = $_REQUEST['arc_down_url']; if (!$url) $url = $_REQUEST['arc_down_site'].'/bitrix/backup/'.$_REQUEST['arc_down_name']; if ($_REQUEST['ajax_mode']) { if (!preg_match('#http://#',$url)) $url = 'http://'.$url; $name = basename($url); if (!preg_match("#\.tar\.gz$#",$name)) $name = 'archive.tar.gz'; $strLog = ''; $status = ''; $res = LoadFile($url, $name, 2); if (!$res) { echo nl2br($strLog); echo '<p align=right><input type=button onClick="document.location=\'?Step=1\'" value=" '.getMsg('BACK').' "></p>'; die(); } elseif ($res==2) // ÷àñòè÷íàÿ çàêà÷êà { echo $status; ?><script>window.setTimeout('document.location="restore.php?ajax_mode=Y&lang=<?=$lang?>&Step=2&source=download&arc_down_url=<?=urlencode($url)?>"',1000);</script><? die(); } else { ?><script>parent.location='restore.php?lang=<?=$lang?>&Step=2&arc_name=<?=urlencode($name)?>';</script><? } } else { SetCurrentProgress(0); echo showMsg(LoaderGetMessage('LOADER_SUBTITLE1'),$status); ?> </form> <iframe width=1 height=1 style="display:none" onload="document.getElementById('msg').innerHTML=this.contentDocument.body.innerHTML" src="restore.php?ajax_mode=Y&lang=<?=$lang?>&Step=2&source=download&arc_down_url=<?=urlencode($url)?>"></iframe> </td></tr></table></body></html> <? die(); } } elseif($_REQUEST['source']=='upload') { $tmp = $_FILES['archive']; $arc_name = $_REQUEST['arc_name'] = 'archive.tar.gz'; if (!move_uploaded_file($tmp['tmp_name'],$_SERVER['DOCUMENT_ROOT'].'/'.$arc_name) || !filesize($_SERVER['DOCUMENT_ROOT'].'/'.$arc_name)) { echo showMsg(getMsg('ERR_EXTRACT'),getMsg('ERR_UPLOAD')); $Step = 1; } } } elseif($Step == 3) { $max_exec_time = 10; $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"], START_EXEC_TIME, $max_exec_time, $d_pos); if(!$oDB->Connect()) { echo showMsg(getMsg("ERR_DB_CONNECT", $lang), $oDB->getError()); $Step = 2; $bSkipExtract = true; } } if(!$Step) { ?> <table width="600" border="0" cellspacing="0" cellpadding="0" align=center> <tr><td colspan="5" class="tabletitle1" align="Left" nowrap="nowrap" valign="center"><?= getMsg("TITLE0", $lang)?></td></tr> <tr> <td colspan="5" class="tableborder2" height="1"></td> </tr> <tr> <td colspan="5" align="center"> </td> </tr> <tr> <td colspan="5" class="tableborder1" height="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td class="tablebody1" colspan=3 height="5"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1"> <?=getMsg('BEGIN')?> <br> <? $img = 'images/dump'.($lang=='ru'?'_ru':'').'.png'; if (file_exists($img)) echo '<img src="'.$img.'">'; ?> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> <tr> <td class="tableborder1" width="1"></td> <td colspan="3" class="tablebody1" height="3"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" align="right"><input type="button" class="selectitem" value="<?= getMsg("BUT_TEXT1", $lang)?>" onClick="reloadPage(1,'<?=$lang?>')"></td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td colspan="3" class="tablebody1" height="3"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td colspan="5" class="tableborder1" height="1"></td> </tr> </table> <? } elseif($Step == 1) { ?> <script> function div_show(i) { document.getElementById('div1').style.display='none'; document.getElementById('div2').style.display='none'; document.getElementById('div3').style.display='none'; document.getElementById('div4').style.display='none'; document.getElementById('div'+i).style.display='block'; } </script> <style type="text/css"> .div-tool { border:1px solid #CCCCCC; padding:10px; } </style> <table width="600" border="0" cellspacing="0" cellpadding="0" align=center> <tr><td colspan="5" class="tabletitle1" align="Left" nowrap="nowrap" valign="center"><?= getMsg("TITLE1", $lang)?></td></tr> <tr> <td colspan="5" class="tableborder2" height="1"></td> </tr> <tr> <td colspan="5" align="center"> </td> </tr> <tr> <td colspan="5" class="tableborder1" height="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td class="tablebody1" colspan=3 height="5"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1"> <input type=radio name=source value=download id=val1 onclick="div_show(1)"><label for=val1><?= getMsg("ARC_DOWN", $lang)?></label> <div id=div1 class="div-tool" style="display:none" align="right"> <?=getMsg("ARC_DOWN_SITE")?> <input name=arc_down_site size=20><br> <?=getMsg("ARC_DOWN_NAME")?> <input name=arc_down_name size=20><br> <?=getMsg("OR")?><br> <?=getMsg("ARC_DOWN_URL")?> <input name=arc_down_url size=40><br> </div> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" align="left"> <input type=radio name=source value=upload id=val2 onclick="div_show(2)"><label for=val2><?= getMsg("ARC_LOCAL", $lang)?></label> <div id=div2 class="div-tool" style="display:none"> <input type=file name=archive size=40> </div> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1"> <input type=radio name=source value=local id=val3 onclick="div_show(3)"><label for=val3><?= getMsg("ARC_NAME", $lang)?></label> <div id=div3 class="div-tool" style="display:none"> <? $option = getArcList(); echo ((strlen($option) > 0) ? '<select class="selectitem" name="arc_name">'.$option.'</select>' : '<span style="color:#999999">'.getMsg('NO_FILES', $lang).'</span>'); ?> </div> <? if ($option === false) echo '<div style="color:red">'.getMsg('NO_READ_PERMS', $lang).'</div>'; ?> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1"> <input type=radio name=source value=dump id=val4 onclick="div_show(4)"><label for=val4><?= getMsg("ARC_SKIP", $lang)?></label> <div id=div4 class="div-tool" style="display:none;color:#999999"><?=getMsg('ARC_SKIP_DESC')?><div> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td colspan="3" class="tablebody1" height="3"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" align="right"><input type="button" class="selectitem" id="start_button" value="<?= getMsg("BUT_TEXT1", $lang)?>" onClick="reloadPage(2,'<?=$lang?>')"></td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td colspan="3" class="tablebody1" height="3"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td colspan="5" class="tableborder1" height="1"></td> </tr> </table> <? } elseif($Step == 2) { if (!$arc_name) $arc_name = htmlspecialchars($_REQUEST["arc_name"]); $max_exec_time = 30; $pos = (double) $_REQUEST["pos"]; if ($pos < 0) $pos = 0; $oArc = new CArchiver($_SERVER["DOCUMENT_ROOT"]."/".$arc_name, true, START_EXEC_TIME, $max_exec_time, $pos, true); if(!$bSkipExtract && !$oArc->extractFiles($_SERVER["DOCUMENT_ROOT"]."/") && $oArc->end_time) { $pos = $oArc->getFilePos(); SetCurrentProgress($pos,filesize($_SERVER["DOCUMENT_ROOT"]."/".$arc_name)/0.3); echo showMsg(getMsg('TITLE_PROCESS1'),$status); ?> <input type="hidden" name="time" id="time_id" value="<?= $max_exec_time?>"> <input type="hidden" name="pos" id="pos_id" value="<?= $pos?>"> <input type="hidden" name="arc_name" id="arc_name_id" value="<?= $arc_name?>"> <script>reloadPage(2, '<?= $lang?>', 1);</script> <? } else { if(count($oArc->GetErrors()) > 0) { $earr = array(); $earr = $oArc->GetErrors(); $e_str = ""; foreach($earr as $val) { $e_str .= $val[1]."<br>"; } echo showMsg(getMsg("ERR_EXTRACT", $lang), $e_str); } else { $arDName = getDumpList(); $arc_name = $_REQUEST["arc_name"]; if(count($arDName)) { ?> <script> function s_display(val) { document.getElementById('settings').style.display = (val ? 'block' : 'none'); } </script> <table width="600" border="0" cellspacing="0" cellpadding="0" align=center> <tr> <td colspan="6" class="tabletitle1" align="Left" nowrap="nowrap" valign="center"><?= getMsg("TITLE2", $lang)?></td> </tr> <tr> <td colspan="6" class="tableborder2" height="1"></td> </tr> <tr> <td colspan="6" class="" align="center" nowrap="nowrap" valign="center"> </td> </tr> <tr> <td colspan="6" class="tableborder1" height="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td colspan="4" class="tablebody1" height="5"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" align="right" nowrap="nowrap"><?= getMsg("DUMP_NAME", $lang)?></td> <td class="tablebody1" width="240"> <? if (count($arDName)>1) echo '<select class="selectitem" name="dump_name"><option>'.(implode('</option><option>',$arDName)).'</option></select>'; else echo htmlspecialchars($arDName[0]).'<input type=hidden name=dump_name value="'.htmlspecialchars($arDName[0]).'">'; ?> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" align="right" nowrap="nowrap"><?= getMsg("DB_SETTINGS", $lang)?></td> <td class="tablebody1" width="240"> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" colspan=2> <p><input type=radio name=db_settings value=default id=default onClick="s_display(0)" <?=$_REQUEST['db_settings']=='default'?'checked':''?>><label for=default><?=getMsg("DB_DEF")?></label></p> <p><input type=radio name=db_settings value=env id=env onClick="s_display(0)" <?=$_REQUEST['db_settings']=='env'?'checked':''?>><label for=env><?=getMsg("DB_ENV")?></label></p> <p><input type=radio name=db_settings value=custom id=custom onClick="s_display(1)" <?=$_REQUEST['db_settings']=='custom'?'checked':''?>><label for=custom><?=getMsg("DB_OTHER")?></label></p> <div style="border:1px solid #aeb8d7;padding:5px;<?=$_REQUEST['db_settings']=='custom'?'':'display:none'?>" id=settings> <table width=100% cellspacing=0 cellpadding=2 border=0> <tr><td class="tablebody1" align=right><?= getMsg("BASE_HOST", $lang)?></td><td><input type="text" class="selectitem" name="db_host" id="db_host_id" value="<?echo (strlen($_REQUEST["db_host"])>0) ? htmlspecialchars($_REQUEST['db_host']) : "localhost"?>"></td></tr> <tr><td class="tablebody1" align=right><?= getMsg("USER_NAME", $lang)?></td><td><input type="text" class="selectitem" name="db_user" id="db_user_id" value="<?echo (strlen($_REQUEST["db_user"])>0) ? htmlspecialchars($_REQUEST["db_user"]) : ""?>"></td></tr> <tr><td class="tablebody1" align=right><?= getMsg("USER_PASS", $lang)?></td><td><input type="password" class="selectitem" name="db_pass" id="db_pass_id" value="<?echo (strlen($_REQUEST["db_pass"])>0) ? htmlspecialchars($_REQUEST["db_pass"]) : ""?>"></td></tr> <tr><td class="tablebody1" align=right><?= getMsg("BASE_NAME", $lang)?></td><td><input type="text" class="selectitem" name="db_name" id="db_name_id" value="<?echo (strlen($_REQUEST["db_name"])>0) ? htmlspecialchars($_REQUEST["db_name"]) : ""?>"></td></tr> <tr><td class="tablebody1" align=right><?= getMsg("BASE_CREATE_DB", $lang)?></td><td><input type="checkbox" name="create_db" id="create_db_id" value="Y" <? if($_REQUEST["create_db"]=="Y") echo "checked";?>></td></tr> </table> </div> </td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td width="1" class="tableborder1"></td> <td class="tablebody1" width="19"> </td> <td class="tablebody1" align="right" nowrap="nowrap"> </td> <td class="tablebody1" width="240"><input type="button" class="selectitem" id="start_button" value="<?= getMsg("BASE_RESTORE", $lang)?>" onClick="if(document.restore.dump_name.value=='') alert('<?= getMsg("ERR_NO_DUMP", $lang)?>'); else return reloadPage(3, '<?= $lang?>');"></td> <td class="tablebody1" width="19"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td class="tableborder1" width="1"></td> <td colspan="4" class="tablebody1" height="5"> </td> <td class="tableborder1" width="1"></td> </tr> <tr> <td colspan="6" class="tableborder1" height="1"></td> </tr> </table> <input type="hidden" name="time" id="time_id" value="<?= intVal($max_exec_time)?>"> <input type="hidden" name="arc_name" id="arc_name_id" value="<?= $arc_name?>"> <? } else echo showMsg(getMsg("EXTRACT_FINISH_TITLE", $lang), getMsg("EXTRACT_FINISH_MSG", $lang), 1); } } $oArc->_close(); } elseif($Step == 3) { $max_exec_time = 10; $d_pos = (double) $_REQUEST["d_pos"]; if ($d_pos < 0) $d_pos = 0; if ($d_pos==0) // start { $dbconn = $_SERVER['DOCUMENT_ROOT']."/bitrix/php_interface/dbconn.php"; if(file_exists($dbconn)) { $arReplace = array( 'DBHost' => 'db_host', 'DBLogin' => 'db_user', 'DBPassword' => 'db_pass', 'DBName' => 'db_name' ); include($dbconn); $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($new_val).'";'."\n\n"; } else $strFile.=$line; } else $strFile.=$line; if (preg_match('#BX_CRONTAB_SUPPORT#',$line)) // ïî÷òà óæå íà êðîíå $bCron = true; } if (defined('VM_BITRIX') && !$bCron) $strFile = '<'.'?define("BX_CRONTAB_SUPPORT", true);?>'.$strFile; $f = fopen($dbconn,"wb"); fputs($f,$strFile); fclose($f); } } if($oDB->restore() && !$oDB->is_end()) { $d_pos = $oDB->getPos(); $oDB->close(); $arc_name = $_REQUEST["arc_name"]; ?> <input type="hidden" name="time" id="time_id" value="<?= $max_exec_time?>"> <input type="hidden" name="arc_name" id="arc_name_id" value="<?= $arc_name?>"> <input type="hidden" name="d_pos" id="d_pos_id" value="<?= $d_pos?>"> <input type="hidden" name="db_user" id="db_user_id" value="<?= $_REQUEST["db_user"]?>"> <input type="hidden" name="db_pass" id="db_pass_id" value="<?= strlen($_REQUEST["db_pass"]) > 0 ? htmlspecialchars($_REQUEST["db_pass"]) : ""?>"> <input type="hidden" name="db_name" id="db_name_id" value="<?= $_REQUEST["db_name"]?>"> <input type="hidden" name="db_host" id="db_host_id" value="<?= $_REQUEST["db_host"]?>"> <input type="hidden" name="dump_name" id="dump_name_id" value="<?= $_REQUEST["dump_name"]?>"> <? SetCurrentProgress($d_pos,filesize($_SERVER['DOCUMENT_ROOT'].'/bitrix/backup/'.$_REQUEST['dump_name'])); echo showMsg(getMsg('TITLE_PROCESS2'),$status); ?> <script> reloadPage(3, '<?= $lang?>', 1); </script> <? } else { if($oDB->getError() != "") echo showMsg(getMsg("ERR_DUMP_RESTORE", $lang), $oDB->getError()); else echo showMsg(getMsg("FINISH", $lang), getMsg("FINISH_MSG", $lang), 2); } } elseif($Step == 4) { $Warn_a = !$_REQUEST['arc_name'] || unlink($_SERVER["DOCUMENT_ROOT"]."/".$_REQUEST["arc_name"]); $Warn_b = unlink($_SERVER["DOCUMENT_ROOT"]."/restore.php"); @unlink($_SERVER['DOCUMENT_ROOT'].'/bitrix8setup.php'); if(!$Warn_a || !$Warn_b) echo showMsg(getMsg("FINISH_ERR_DELL_TITLE", $lang), getMsg("FINISH_ERR_DELL", $lang)); else { echo showMsg(getMsg("FINISH", $lang), getMsg("FINISH_MSG", $lang)); echo '<script>window.setTimeout(function(){document.location="/";},3000);</script>'; } } elseif($Step == 5) { $Warn_a = unlink($_SERVER["DOCUMENT_ROOT"]."/".@$_REQUEST["arc_name"]); $Warn_b = unlink($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/backup/".@$_REQUEST["dump_name"]); $Warn_c = unlink($_SERVER["DOCUMENT_ROOT"]."/restore.php"); @unlink($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/backup/".str_replace('.sql','_after_connect.sql',@$_REQUEST["dump_name"])); @unlink($_SERVER['DOCUMENT_ROOT'].'/bitrix8setup.php'); if(!$Warn_a || !$Warn_b || !$Warn_c) echo showMsg(getMsg("FINISH_ERR_DELL_TITLE", $lang), getMsg("FINISH_ERR_DELL", $lang)); else { echo showMsg(getMsg("FINISH", $lang), getMsg("FINISH_MSG", $lang)); echo '<script>window.setTimeout(function(){document.location="/";},3000);</script>'; } } ?> </form> </td></tr></table> </body> </html> <? class CArchiver { var $_strArchiveName = ""; var $_bCompress = false; var $_strSeparator = " "; var $_dFile = 0; var $_arErrors = array(); var $max_execution_time = 0; var $start = 0; var $end = false; var $end_time = false; var $file_pos = 0; function CArchiver($strArchiveName, $bCompress = false, $start, $max_execution_time, $pos) { $this->_bCompress = false; $this->max_execution_time = $max_execution_time; $this->start = $start; $this->file_pos = $pos; if (!$bCompress) { if (@file_exists($strArchiveName)) { if ($fp = @fopen($strArchiveName, "rb")) { $data = fread($fp, 2); fclose($fp); if ($data == "\37\213") { $this->_bCompress = True; } } } else { if (substr($strArchiveName, -2) == 'gz') { $this->_bCompress = True; } } } else { $this->_bCompress = True; } $this->_strArchiveName = $strArchiveName; $this->_arErrors = array(); } function GetErrors() { return $this->_arErrors; } function extractFiles($strPath) { $this->_arErrors = array(); $v_result = true; if ($v_result = $this->_openRead()) { if($this->file_pos > 0) { if ($this->_bCompress) @gzseek($this->_dFile, $this->file_pos-512); else @fseek($this->_dFile, $this->file_pos-512); } $v_result = $this->_extractList($strPath, ''); } return $v_result; } function _extractList($p_path, $p_remove_path) { $v_result = true; $v_nb = 0; $v_extract_all = true; $v_listing = false; $p_path = str_replace("\\", "/", $p_path); if ($p_path == '' || (substr($p_path, 0, 1) != '/' && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) $p_path = "./".$p_path; $p_remove_path = str_replace("\\", "/", $p_remove_path); if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/')) $p_remove_path .= '/'; $p_remove_path_size = strlen($p_remove_path); clearstatcache(); while (strlen($v_binary_data = $this->_readBlock()) != 0) { if((getmicrotime() - $this->start) < round($this->max_execution_time * 0.8)) { $v_extract_file = FALSE; if (!$this->_readHeader($v_binary_data, $v_header)) return false; if ($v_header['filename'] == '') continue; // ----- Look for long filename if ($v_header['typeflag'] == 'L') if (!$this->_readLongHeader($v_header)) return false; if (($p_remove_path != '') && (substr($v_header['filename'], 0, $p_remove_path_size) == $p_remove_path)) $v_header['filename'] = substr($v_header['filename'], $p_remove_path_size); if (($p_path != './') && ($p_path != '/')) { while (substr($p_path, -1) == '/') $p_path = substr($p_path, 0, strlen($p_path)-1); if (substr($v_header['filename'], 0, 1) == '/') $v_header['filename'] = $p_path.$v_header['filename']; else $v_header['filename'] = $p_path.'/'.$v_header['filename']; } if (file_exists($v_header['filename'])) { if ((is_dir($v_header['filename'])) && ($v_header['typeflag'] == '')) { $this->_arErrors[] = array("DIR_EXISTS", "File '".$v_header['filename']."' already exists as a directory"); return false; } if ((is_file($v_header['filename'])) && ($v_header['typeflag'] == "5")) { $this->_arErrors[] = array("FILE_EXISTS", "Directory '".$v_header['filename']."' already exists as a file"); return false; } if (!is_writeable($v_header['filename'])) { $this->_arErrors[] = array("FILE_PERMS", "File '".$v_header['filename']."' already exists and is write protected"); return false; } } elseif (($v_result = $this->_dirCheck(($v_header['typeflag'] == "5" ? $v_header['filename'] : dirname($v_header['filename'])))) != 1) { $this->_arErrors[] = array("NO_DIR", "Unable to create path for '".$v_header['filename']."'"); return false; } if ($v_header['typeflag'] == "5") { if (!file_exists($v_header['filename'])) { if (!@mkdir($v_header['filename'], BX_DIR_PERMISSIONS)) { $this->_arErrors[] = array("ERR_CREATE_DIR", "Unable to create directory '".$v_header['filename']."'"); return false; } } } else { $bSkip = false; if ($v_header['filename']==$_SERVER['DOCUMENT_ROOT'].'/.htaccess' && file_exists($v_header['filename'])) { // skip /.htaccess $bSkip = true; $n = floor($v_header['size']/512); for ($i = 0; $i < $n; $i++) $v_content = $this->_readBlock(); if (($v_header['size'] % 512) != 0) $v_content = $this->_readBlock(); } elseif (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { $this->_arErrors[] = array("ERR_CREATE_FILE", "Error while opening '".$v_header['filename']."' in write binary mode"); return false; } else { $n = floor($v_header['size']/512); for ($i = 0; $i < $n; $i++) { $v_content = $this->_readBlock(); fwrite($v_dest_file, $v_content, 512); } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); fwrite($v_dest_file, $v_content, ($v_header['size'] % 512)); } @fclose($v_dest_file); chmod($v_header['filename'], BX_FILE_PERMISSIONS); touch($v_header['filename'], $v_header['mtime']); // To be completed //chmod($v_header[filename], DecOct($v_header[mode])); } clearstatcache(); if (!$bSkip && filesize($v_header['filename']) != $v_header['size']) { $this->_arErrors[] = array("ERR_SIZE_CHECK", "Extracted file '".$v_header['filename']."' have incorrect file size '".filesize($v_filename)."' (".$v_header['size']." expected). Archive may be corrupted"); return false; } } if (($v_file_dir = dirname($v_header['filename'])) == $v_header['filename']) $v_file_dir = ''; if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) $v_file_dir = '/'; } else { $this->end_time = true; return false; } } return true; } function _readBlock() { $v_block = ""; if (is_resource($this->_dFile)) { if ($this->_bCompress) $v_block = @gzread($this->_dFile, 512); else $v_block = @fread($this->_dFile, 512); } return $v_block; } function _readHeader($v_binary_data, &$v_header) { if (strlen($v_binary_data)==0) { $v_header['filename'] = ''; return true; } if (strlen($v_binary_data) != 512) { $v_header['filename'] = ''; $this->_arErrors[] = array("INV_BLOCK_SIZE", "Invalid block size : ".strlen($v_binary_data).""); return false; } $v_checksum = 0; for ($i = 0; $i < 148; $i++) $v_checksum+=ord(substr($v_binary_data, $i, 1)); for ($i = 148; $i < 156; $i++) $v_checksum += ord(' '); for ($i = 156; $i < 512; $i++) $v_checksum+=ord(substr($v_binary_data, $i, 1)); $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $v_binary_data); $v_header['checksum'] = OctDec(trim($v_data['checksum'])); if ($v_header['checksum'] != $v_checksum) { $v_header['filename'] = ''; if (($v_checksum == 256) && ($v_header['checksum'] == 0)) return true; $this->_arErrors[] = array("INV_BLOCK_CHECK", "Invalid checksum for file '".$v_data['filename']."' : ".$v_checksum." calculated, ".$v_header['checksum']." expected"); return false; } // ----- Extract the properties $v_header['filename'] = trim($v_data['filename']); $v_header['mode'] = OctDec(trim($v_data['mode'])); $v_header['uid'] = OctDec(trim($v_data['uid'])); $v_header['gid'] = OctDec(trim($v_data['gid'])); $v_header['size'] = OctDec(trim($v_data['size'])); $v_header['mtime'] = OctDec(trim($v_data['mtime'])); if (($v_header['typeflag'] = $v_data['typeflag']) == "5") $v_header['size'] = 0; return true; } function _readLongHeader(&$v_header) { $v_filename = ''; $n = floor($v_header['size']/512); for ($i = 0; $i < $n; $i++) { $v_content = $this->_readBlock(); $v_filename .= $v_content; } if (($tail = $v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); $v_filename .= substr($v_content, 0, $tail); } $v_binary_data = $this->_readBlock(); if (!$this->_readHeader($v_binary_data, $v_header)) return false; $v_header['filename'] = $v_filename; return true; } function &_parseFileParams(&$vFileList) { if (isset($vFileList) && is_array($vFileList)) return $vFileList; elseif (isset($vFileList) && strlen($vFileList)>0) return explode($this->_strSeparator, $vFileList); else return array(); } function _openRead() { if (filesize($this->_strArchiveName)==0) return false; if ($this->_bCompress) $this->_dFile = @gzopen($this->_strArchiveName, "rb"); else $this->_dFile = @fopen($this->_strArchiveName, "rb"); if (!$this->_dFile) { $this->_arErrors[] = array("ERR_OPEN", "Unable to open '".$this->_strArchiveName."' in read mode"); return false; } return true; } function _close() { if (is_resource($this->_dFile)) { if ($this->_bCompress) @gzclose($this->_dFile); else @fclose($this->_dFile); $this->_dFile = 0; } return true; } function _normalizePath($strPath) { $strResult = ""; if (strlen($strPath)>0) { $strPath = str_replace("\\", "/", $strPath); $arPath = explode('/', $strPath); for ($i = count($arPath)-1; $i>=0; $i--) { if ($arPath[$i] == ".") ; elseif ($arPath[$i] == "..") $i--; elseif (($arPath[$i] == '') && ($i!=(count($arPath)-1)) && ($i!=0)) ; else $strResult = $arPath[$i].($i!=(count($arPath)-1) ? '/'.$strResult : ''); } } return $strResult; } function _dirCheck($p_dir) { if ((@is_dir($p_dir)) || ($p_dir == '')) return true; $p_parent_dir = dirname($p_dir); if (($p_parent_dir != $p_dir) && ($p_parent_dir != '') && (!$this->_dirCheck($p_parent_dir))) return false; if (!@mkdir($p_dir, BX_DIR_PERMISSIONS)) { $this->_arErrors[] = array("CANT_CREATE_PATH", "Unable to create directory '".$p_dir."'"); return false; } return true; } function endTime() { return $this->end_time; } function getFilePos() { if (is_resource($this->_dFile)) { if ($this->_bCompress) return @gztell($this->_dFile); else return @ftell($this->_dFile); } } } class CDBRestore { var $type = ""; var $DBHost =""; var $DBName = ""; var $DBLogin = ""; var $DBPassword = ""; var $DBdump = ""; var $db_Conn = ""; var $db_Error = ""; var $f_end = false; var $start; var $d_pos; var $_dFile; function CDBRestore($DBHost, $DBName, $DBLogin, $DBPassword, $DBdump, $start, $max_exec_time, $d_pos) { $this->DBHost = $DBHost; $this->DBLogin = $DBLogin; $this->DBPassword = $DBPassword; $this->DBName = $DBName; $this->DBdump = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/backup/".$DBdump; $this->start = $start; $this->max_exec_time = $max_exec_time; $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 .= "<br><font color=#ff0000>Error! ".$s."('-', '-', '-')</font><br>".$str_err."<br>"; return false; } $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); } if (@$_REQUEST["create_db"]=="Y") { if(!@mysql_query("CREATE DATABASE ".@$_REQUEST["db_name"], $this->db_Conn)) { $this->db_Error = getMsg("ERR_CREATE_DB", $lang).' '.mysql_error(); return false; } } if(!mysql_select_db($this->DBName, $this->db_Conn)) { if(($str_err = mysql_error($this->db_Conn)) != "") $this->db_Error = "<br><font color=#ff0000>Error! mysql_select_db($this->DBName)</font><br>".$str_err."<br>"; 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()) && (getmicrotime() - $this->start) < round($this->max_exec_time * 0.6)) { if (defined('VM_BITRIX')) // èçáàâèìñÿ îò 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(); return false; } $sql = ""; } if($sql != "") { $result = @mysql_query($sql, $this->db_Conn); if(!$result) { $this->db_Error .= mysql_error(); return false; } $sql = ""; } 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 getmicrotime() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } function getDumpList() { $arDump = array(); $handle = @opendir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/backup"); while (false !== ($file = @readdir($handle))) { if($file == "." || $file == "..") continue; if(is_dir($_SERVER["DOCUMENT_ROOT"]."/".$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, $lang; if (!$str_lang) $str_lang=$lang; if($str_lang == "ru") return $mArr_ru[$str_index]; else return $mArr_en[$str_index]; } function getArcList() { $arc = ""; $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 .= "<option value=\"$file\"> ".$file; } return $arc; } function showMsg($title, $msg, $type = 0) { global $lang; $del_pos = ""; if($type == 1) { $del_pos = "<tr> <td class=\"tableborder1\" width=\"1\"></td> <td colspan=\"4\" class=\"tablebody1\" height=\"5\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td class=\"tableborder1\" width=\"1\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tablebody1\" colspan=\"2\" algin=\"center\" valign=\"center\">".getMsg("EXTRACT_FINISH_DELL", $lang)."</td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td width=\"1\" class=\"tableborder1\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tablebody1\"> </td> <td class=\"tablebody1\" width=\"240\"><input type=\"button\" class=\"selectitem\" id=\"del_button\" value=\"".getMsg("BUT_DELL", $lang)."\" onClick=\"reloadPage(4,'$lang');\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr>"; } elseif($type == 2) { $del_pos = "<tr> <td class=\"tableborder1\" width=\"1\"></td> <td colspan=\"4\" class=\"tablebody1\" height=\"5\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td class=\"tableborder1\" width=\"1\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tablebody1\" colspan=\"2\" algin=\"center\" valign=\"center\">".getMsg("EXTRACT_FULL_FINISH_DELL", $lang)."</td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td width=\"1\" class=\"tableborder1\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tablebody1\"> </td> <td class=\"tablebody1\" width=\"240\"><input type=\"button\" class=\"selectitem\" id=\"del_button\" value=\"".getMsg("BUT_DELL", $lang)."\" onClick=\"reloadPage(5,'$lang');\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr>"; } $res = "<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=center> <tr><td colspan=\"6\" class=\"tabletitle1\" align=\"Left\" nowrap=\"nowrap\" valign=\"center\">$title</td></tr> <tr> <td colspan=\"6\" class=\"tableborder2\" height=\"1\"></td> </tr> <tr> <td colspan=\"6\" align=\"center\" nowrap=\"nowrap\" valign=\"center\"> </td> </tr> <tr> <td colspan=\"6\" class=\"tableborder1\" height=\"1\"></td> </tr> <tr> <td class=\"tableborder1\" width=\"1\"></td> <td colspan=\"4\" class=\"tablebody1\" height=\"5\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td class=\"tableborder1\" width=\"1\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tablebody1\" colspan=\"2\" algin=\"center\" valign=\"center\" id=msg>$msg</td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> $del_pos <tr> <td width=\"1\" class=\"tableborder1\"></td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tablebody1\"> </td> <td class=\"tablebody1\" width=\"240\"> </td> <td class=\"tablebody1\" width=\"19\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td class=\"tableborder1\" width=\"1\"></td> <td colspan=\"4\" class=\"tablebody1\" height=\"5\"> </td> <td class=\"tableborder1\" width=\"1\"></td> </tr> <tr> <td colspan=\"6\" class=\"tableborder1\" height=\"1\"></td> </tr> </table> <input type=\"hidden\" name=\"arc_name\" id=\"arc_name_id\" value=\"".@$_REQUEST["arc_name"]."\"> <input type=\"hidden\" name=\"dump_name\" id=\"dump_name_id\" value=\"".@$_REQUEST["dump_name"]."\">"; return $res.'<br>'; } function LoadFile($strRequestedUrl, $strFilename, $iTimeOut = 10) { global $proxyaddr, $proxyport, $strUserAgent, $strRequestedSize; $iTimeOut = IntVal($iTimeOut); if ($iTimeOut>0) $start_time = getmicrotime(); $strRealUrl = $strRequestedUrl; $iStartSize = 0; $iRealSize = 0; $bCanContinueDownload = False; // ÈÍÈÖÈÀËÈÇÈÐÓÅÌ, ÅÑËÈ ÄÎÊÀ×ÊÀ $strRealUrl_tmp = ""; $iRealSize_tmp = 0; if (file_exists($strFilename.".tmp") && file_exists($strFilename.".log") && filesize($strFilename.".log")>0) { $fh = fopen($strFilename.".log", "rb"); $file_contents_tmp = fread($fh, filesize($strFilename.".log")); fclose($fh); list($strRealUrl_tmp, $iRealSize_tmp) = explode("\n", $file_contents_tmp); $strRealUrl_tmp = Trim($strRealUrl_tmp); $iRealSize_tmp = doubleval(Trim($iRealSize_tmp)); } if ($iRealSize_tmp<=0 || strlen($strRealUrl_tmp)<=0) { $strRealUrl_tmp = ""; $iRealSize_tmp = 0; if (file_exists($strFilename.".tmp")) @unlink($strFilename.".tmp"); if (file_exists($strFilename.".log")) @unlink($strFilename.".log"); } else { $strRealUrl = $strRealUrl_tmp; $iRealSize = $iRealSize_tmp; $iStartSize = filesize($strFilename.".tmp"); } // ÊÎÍÅÖ: ÈÍÈÖÈÀËÈÇÈÐÓÅÌ, ÅÑËÈ ÄÎÊÀ×ÊÀ SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_QUERY_SERVER")); // ÈÙÅÌ ÔÀÉË È ÇÀÏÐÀØÈÂÀÅÌ ÈÍÔÎ do { SetCurrentStatus(str_replace("#DISTR#", $strRealUrl, LoaderGetMessage("LOADER_LOAD_QUERY_DISTR"))); $lasturl = $strRealUrl; $redirection = ""; $parsedurl = @parse_url($strRealUrl); $useproxy = (($proxyaddr != "") && ($proxyport != "")); if (!$useproxy) { $host = $parsedurl["host"]; $port = $parsedurl["port"]; $hostname = $host; } else { $host = $proxyaddr; $port = $proxyport; $hostname = $parsedurl["host"]; } $port = $port ? $port : "80"; SetCurrentStatus(str_replace("#HOST#", $host, LoaderGetMessage("LOADER_LOAD_CONN2HOST"))); $sockethandle = @fsockopen($host, $port, $error_id, $error_msg, 30); if (!$sockethandle) { SetCurrentStatus(str_replace("#HOST#", $host, LoaderGetMessage("LOADER_LOAD_NO_CONN2HOST"))." [".$error_id."] ".$error_msg); return false; } else { if (!$parsedurl["path"]) $parsedurl["path"] = "/"; SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_QUERY_FILE")); $request = ""; if (!$useproxy) { $request .= "HEAD ".$parsedurl["path"].($parsedurl["query"] ? '?'.$parsedurl["query"] : '')." HTTP/1.0\r\n"; $request .= "Host: $hostname\r\n"; } else { $request .= "HEAD ".$strRealUrl." HTTP/1.0\r\n"; $request .= "Host: $hostname\r\n"; } if ($strUserAgent != "") $request .= "User-Agent: $strUserAgent\r\n"; $request .= "\r\n"; fwrite($sockethandle, $request); $result = ""; SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_WAIT")); $replyheader = ""; while (($result = fgets($sockethandle, 4096)) && $result!="\r\n") { $replyheader .= $result; } fclose($sockethandle); $ar_replyheader = explode("\r\n", $replyheader); $replyproto = ""; $replyversion = ""; $replycode = 0; $replymsg = ""; if (preg_match("#([A-Z]{4})/([0-9.]{3}) ([0-9]{3})#", $ar_replyheader[0], $regs)) { $replyproto = $regs[1]; $replyversion = $regs[2]; $replycode = IntVal($regs[3]); $replymsg = substr($ar_replyheader[0], strpos($ar_replyheader[0], $replycode) + strlen($replycode) + 1, strlen($ar_replyheader[0]) - strpos($ar_replyheader[0], $replycode) + 1); } if ($replycode!=200 && $replycode!=302) { if ($replycode==403) SetCurrentStatus(str_replace("#ANS#", $replycode." - ".$replymsg, LoaderGetMessage("LOADER_LOAD_SERVER_ANSWER1"))); else SetCurrentStatus(str_replace("#ANS#", $replycode." - ".$replymsg, LoaderGetMessage("LOADER_LOAD_SERVER_ANSWER"))); return false; } $strLocationUrl = ""; $iNewRealSize = 0; $strAcceptRanges = ""; for ($i = 1; $i < count($ar_replyheader); $i++) { if (strpos($ar_replyheader[$i], "Location") !== false) $strLocationUrl = trim(substr($ar_replyheader[$i], strpos($ar_replyheader[$i], ":") + 1, strlen($ar_replyheader[$i]) - strpos($ar_replyheader[$i], ":") + 1)); elseif (strpos($ar_replyheader[$i], "Content-Length") !== false) $iNewRealSize = IntVal(Trim(substr($ar_replyheader[$i], strpos($ar_replyheader[$i], ":") + 1, strlen($ar_replyheader[$i]) - strpos($ar_replyheader[$i], ":") + 1))); elseif (strpos($ar_replyheader[$i], "Accept-Ranges") !== false) $strAcceptRanges = Trim(substr($ar_replyheader[$i], strpos($ar_replyheader[$i], ":") + 1, strlen($ar_replyheader[$i]) - strpos($ar_replyheader[$i], ":") + 1)); } if (strlen($strLocationUrl)>0) { $redirection = $strLocationUrl; $redirected = true; if ((strpos($redirection, "http://")===false)) $strRealUrl = dirname($lasturl)."/".$redirection; else $strRealUrl = $redirection; } if (strlen($strLocationUrl)<=0) break; } } while (true); // ÊÎÍÅÖ: ÈÙÅÌ ÔÀÉË È ÇÀÏÐÀØÈÂÀÅÌ ÈÍÔÎ $bCanContinueDownload = ($strAcceptRanges == "bytes"); // ÅÑËÈ ÍÅËÜÇß ÄÎÊÀ×ÈÂÀÒÜ if (!$bCanContinueDownload || ($iRealSize>0 && $iNewRealSize != $iRealSize)) { // SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_NEED_RELOAD")); // $iStartSize = 0; die(LoaderGetMessage("LOADER_LOAD_NEED_RELOAD")); } // ÊÎÍÅÖ: ÅÑËÈ ÍÅËÜÇß ÄÎÊÀ×ÈÂÀÒÜ // ÅÑËÈ ÌÎÆÍÎ ÄÎÊÀ×ÈÂÀÒÜ if ($bCanContinueDownload) { $fh = fopen($strFilename.".log", "wb"); if (!$fh) { SetCurrentStatus(str_replace("#FILE#", $strFilename.".log", LoaderGetMessage("LOADER_LOAD_NO_WRITE2FILE"))); return false; } fwrite($fh, $strRealUrl."\n"); fwrite($fh, $iNewRealSize."\n"); fclose($fh); } // ÊÎÍÅÖ: ÅÑËÈ ÌÎÆÍÎ ÄÎÊÀ×ÈÂÀÒÜ SetCurrentStatus(str_replace("#DISTR#", $strRealUrl, LoaderGetMessage("LOADER_LOAD_LOAD_DISTR"))); $strRequestedSize = $iNewRealSize; // ÊÀ×ÀÅÌ ÔÀÉË $parsedurl = parse_url($strRealUrl); $useproxy = (($proxyaddr != "") && ($proxyport != "")); if (!$useproxy) { $host = $parsedurl["host"]; $port = $parsedurl["port"]; $hostname = $host; } else { $host = $proxyaddr; $port = $proxyport; $hostname = $parsedurl["host"]; } $port = $port ? $port : "80"; SetCurrentStatus(str_replace("#HOST#", $host, LoaderGetMessage("LOADER_LOAD_CONN2HOST"))); $sockethandle = @fsockopen($host, $port, $error_id, $error_msg, 30); if (!$sockethandle) { SetCurrentStatus(str_replace("#HOST#", $host, LoaderGetMessage("LOADER_LOAD_NO_CONN2HOST"))." [".$error_id."] ".$error_msg); return false; } else { if (!$parsedurl["path"]) $parsedurl["path"] = "/"; SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_QUERY_FILE")); $request = ""; if (!$useproxy) { $request .= "GET ".$parsedurl["path"].($parsedurl["query"] ? '?'.$parsedurl["query"] : '')." HTTP/1.0\r\n"; $request .= "Host: $hostname\r\n"; } else { $request .= "GET ".$strRealUrl." HTTP/1.0\r\n"; $request .= "Host: $hostname\r\n"; } if ($strUserAgent != "") $request .= "User-Agent: $strUserAgent\r\n"; if ($bCanContinueDownload && $iStartSize>0) $request .= "Range: bytes=".$iStartSize."-\r\n"; $request .= "\r\n"; fwrite($sockethandle, $request); $result = ""; SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_WAIT")); $replyheader = ""; while (($result = fgets($sockethandle, 4096)) && $result!="\r\n") $replyheader .= $result; $ar_replyheader = explode("\r\n", $replyheader); $replyproto = ""; $replyversion = ""; $replycode = 0; $replymsg = ""; if (preg_match("#([A-Z]{4})/([0-9.]{3}) ([0-9]{3})#", $ar_replyheader[0], $regs)) { $replyproto = $regs[1]; $replyversion = $regs[2]; $replycode = IntVal($regs[3]); $replymsg = substr($ar_replyheader[0], strpos($ar_replyheader[0], $replycode) + strlen($replycode) + 1, strlen($ar_replyheader[0]) - strpos($ar_replyheader[0], $replycode) + 1); } if ($replycode!=200 && $replycode!=302 && $replycode!=206) { SetCurrentStatus(str_replace("#ANS#", $replycode." - ".$replymsg, LoaderGetMessage("LOADER_LOAD_SERVER_ANSWER"))); return false; } $strContentRange = ""; $iContentLength = 0; $strAcceptRanges = ""; for ($i = 1; $i < count($ar_replyheader); $i++) { if (strpos($ar_replyheader[$i], "Content-Range") !== false) $strContentRange = trim(substr($ar_replyheader[$i], strpos($ar_replyheader[$i], ":") + 1, strlen($ar_replyheader[$i]) - strpos($ar_replyheader[$i], ":") + 1)); elseif (strpos($ar_replyheader[$i], "Content-Length") !== false) $iContentLength = doubleval(Trim(substr($ar_replyheader[$i], strpos($ar_replyheader[$i], ":") + 1, strlen($ar_replyheader[$i]) - strpos($ar_replyheader[$i], ":") + 1))); elseif (strpos($ar_replyheader[$i], "Accept-Ranges") !== false) $strAcceptRanges = Trim(substr($ar_replyheader[$i], strpos($ar_replyheader[$i], ":") + 1, strlen($ar_replyheader[$i]) - strpos($ar_replyheader[$i], ":") + 1)); } $bReloadFile = True; if (strlen($strContentRange)>0) { if (preg_match("# *bytes +([0-9]*) *- *([0-9]*) */ *([0-9]*)#i", $strContentRange, $regs)) { $iStartBytes_tmp = doubleval($regs[1]); $iEndBytes_tmp = doubleval($regs[2]); $iSizeBytes_tmp = doubleval($regs[3]); if ($iStartBytes_tmp==$iStartSize && $iEndBytes_tmp==($iNewRealSize-1) && $iSizeBytes_tmp==$iNewRealSize) { $bReloadFile = False; } } } if ($bReloadFile) { @unlink($strFilename.".tmp"); $iStartSize = 0; } if (($iContentLength+$iStartSize)!=$iNewRealSize) { SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_ERR_SIZE")); return false; } $fh = fopen($strFilename.".tmp", "ab"); if (!$fh) { SetCurrentStatus(str_replace("#FILE#", $strFilename.".tmp", LoaderGetMessage("LOADER_LOAD_CANT_OPEN_WRITE"))); return false; } $bFinished = True; $downloadsize = (double) $iStartSize; SetCurrentStatus(LoaderGetMessage("LOADER_LOAD_LOADING")); while (!feof($sockethandle)) { if ($iTimeOut>0 && (getmicrotime()-$start_time)>$iTimeOut) { $bFinished = False; break; } $result = fread($sockethandle, 40960); $downloadsize += strlen($result); if ($result=="") break; fwrite($fh, $result); } SetCurrentProgress($downloadsize,$iNewRealSize); fclose($fh); fclose($sockethandle); if ($bFinished) { @unlink($strFilename); if (!@rename($strFilename.".tmp", $strFilename)) { SetCurrentStatus(str_replace("#FILE2#", $strFilename, str_replace("#FILE1#", $strFilename.".tmp", LoaderGetMessage("LOADER_LOAD_ERR_RENAME")))); return false; } @unlink($strFilename.".tmp"); } else return 2; SetCurrentStatus(str_replace("#SIZE#", $downloadsize, str_replace("#FILE#", $strFilename, LoaderGetMessage("LOADER_LOAD_FILE_SAVED")))); @unlink($strFilename.".log"); return 1; } // ÊÎÍÅÖ: ÊÀ×ÀÅÌ ÔÀÉË } function SetCurrentStatus($str) { global $strLog; $strLog .= $str."\n"; } function LoaderGetMessage($name) { global $MESS; return $MESS[$name]; } function SetCurrentProgress($cur,$total=0) { global $status; if (!$total) { $total=100; $cur=0; } $val = intval($cur/$total*100); if ($val > 99) $val = 99; $status = '<table width=100% cellspacing=0 cellpadding=0 border=0 style="border:1px solid #aeb8d7"> <tr> <td style="width:'.$val.'%;height:10px" bgcolor="#aeb8d7"></td> <td style="width:'.(100-$val).'%"></td> </tr> </table> <div align=center>'.$val.'%</div>'; } ?>