i-Hmx

Database Backup Dumper

Feb 20th, 2012
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 39.18 KB | None | 0 0
  1. <?php
  2. /***************************************************************************\
  3. | Sypex Dumper Lite          version 1.0.8b                                 |
  4. | (c)2003-2006 zapimir       zapimir@zapimir.net       http://sypex.net/    |
  5. | (c)2005-2006 BINOVATOR     info@sypex.net                                 |
  6. |---------------------------------------------------------------------------|
  7. |     created: 2003.09.02 19:07              modified: 2006.10.27 03:30     |
  8. |---------------------------------------------------------------------------|
  9. | This program is free software; you can redistribute it and/or             |
  10. | modify it under the terms of the GNU General Public License               |
  11. | as published by the Free Software Foundation; either version 2            |
  12. | of the License, or (at your option) any later version.                    |
  13. |                                                                           |
  14. | This program is distributed in the hope that it will be useful,           |
  15. | but WITHOUT ANY WARRANTY; without even the implied warranty of            |
  16. | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             |
  17. | GNU General Public License for more details.                              |
  18. |                                                                           |
  19. | You should have received a copy of the GNU General Public License         |
  20. | along with this program; if not, write to the Free Software               |
  21. | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA. |
  22. \***************************************************************************/
  23.  
  24. // Ïóòü è URL ê ôàéëàì áåêàïà
  25. define('PATH', 'backup/');
  26. define('URL',  'backup/');
  27. // Ìàêñèìàëüíîå âðåìÿ âûïîëíåíèÿ ñêðèïòà â ñåêóíäàõ
  28. // 0 - áåç îãðàíè÷åíèé
  29. define('TIME_LIMIT', 0);
  30. // Îãðàíè÷åíèå ðàçìåðà äàííûõ äîñòàâàåìûõ çà îäíî îáðàùåíèÿ ê ÁÄ (â ìåãàáàéòàõ)
  31. // Íóæíî äëÿ îãðàíè÷åíèÿ êîëè÷åñòâà ïàìÿòè ïîæèðàåìîé ñåðâåðîì ïðè äàìïå î÷åíü îáúåìíûõ òàáëèö
  32. define('LIMIT', 1);
  33. // mysql ñåðâåð
  34. define('DBHOST', 'localhost:3306');
  35. // Áàçû äàííûõ, åñëè ñåðâåð íå ðàçðåøàåò ïðîñìàòðèâàòü ñïèñîê áàç äàííûõ,
  36. // è íè÷åãî íå ïîêàçûâàåòñÿ ïîñëå àâòîðèçàöèè. Ïåðå÷èñëèòå íàçâàíèÿ ÷åðåç çàïÿòóþ
  37. define('DBNAMES', '');
  38. // Êîäèðîâêà ñîåäèíåíèÿ ñ MySQL
  39. // auto - àâòîìàòè÷åñêèé âûáîð (óñòàíàâëèâàåòñÿ êîäèðîâêà òàáëèöû), cp1251 - windows-1251, è ò.ï.
  40. define('CHARSET', 'auto');
  41. // Êîäèðîâêà ñîåäèíåíèÿ ñ MySQL ïðè âîññòàíîâëåíèè
  42. // Íà ñëó÷àé ïåðåíîñà ñî ñòàðûõ âåðñèé MySQL (äî 4.1), ó êîòîðûõ íå óêàçàíà êîäèðîâêà òàáëèö â äàìïå
  43. // Ïðè äîáàâëåíèè 'forced->', ê ïðèìåðó 'forced->cp1251', êîäèðîâêà òàáëèö ïðè âîññòàíîâëåíèè áóäåò ïðèíóäèòåëüíî çàìåíåíà íà cp1251
  44. // Ìîæíî òàêæå óêàçûâàòü ñðàâíåíèå íóæíîå ê ïðèìåðó 'cp1251_ukrainian_ci' èëè 'forced->cp1251_ukrainian_ci'
  45. define('RESTORE_CHARSET', 'cp1251');
  46. // Âêëþ÷èòü ñîõðàíåíèå íàñòðîåê è ïîñëåäíèõ äåéñòâèé
  47. // Äëÿ îòêëþ÷åíèÿ óñòàíîâèòü çíà÷åíèå 0
  48. define('SC', 1);
  49. // Òèïû òàáëèö ó êîòîðûõ ñîõðàíÿåòñÿ òîëüêî ñòðóêòóðà, ðàçäåëåííûå çàïÿòîé
  50. define('ONLY_CREATE', 'MRG_MyISAM,MERGE,HEAP,MEMORY');
  51. // Ãëîáàëüíàÿ ñòàòèñòèêà
  52. // Äëÿ îòêëþ÷åíèÿ óñòàíîâèòü çíà÷åíèå 0
  53. define('GS', 1);
  54.  
  55.  
  56. // Äàëüøå íè÷åãî ðåäàêòèðîâàòü íå íóæíî
  57.  
  58. $is_safe_mode = ini_get('safe_mode') == '1' ? 1 : 0;
  59. if (!$is_safe_mode && function_exists('set_time_limit')) set_time_limit(TIME_LIMIT);
  60.  
  61. header("Expires: Tue, 1 Jul 2003 05:00:00 GMT");
  62. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  63. header("Cache-Control: no-store, no-cache, must-revalidate");
  64. header("Pragma: no-cache");
  65.  
  66. $timer = array_sum(explode(' ', microtime()));
  67. ob_implicit_flush();
  68. error_reporting(E_ALL);
  69.  
  70. $auth = 0;
  71. $error = '';
  72. if (!empty($_POST['login']) && isset($_POST['pass'])) {
  73.     if (@mysql_connect(DBHOST, $_POST['login'], $_POST['pass'])){
  74.         setcookie("sxd", base64_encode("SKD101:{$_POST['login']}:{$_POST['pass']}"));
  75.         header("Location: dumper.php");
  76.         mysql_close();
  77.         exit;
  78.     }
  79.     else{
  80.         $error = '#' . mysql_errno() . ': ' . mysql_error();
  81.     }
  82. }
  83. elseif (!empty($_COOKIE['sxd'])) {
  84.     $user = explode(":", base64_decode($_COOKIE['sxd']));
  85.     if (@mysql_connect(DBHOST, $user[1], $user[2])){
  86.         $auth = 1;
  87.     }
  88.     else{
  89.         $error = '#' . mysql_errno() . ': ' . mysql_error();
  90.     }
  91. }
  92.  
  93. if (!$auth || (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] == 'reload')) {
  94.     setcookie("sxd");
  95.     echo tpl_page(tpl_auth($error ? tpl_error($error) : ''), "<SCRIPT>if (jsEnabled) {document.write('<INPUT TYPE=submit VALUE=&#1583;&#1582;&#1608;&#1604;>');}</SCRIPT>");
  96.     echo "<SCRIPT>document.getElementById('timer').innerHTML = '" . round(array_sum(explode(' ', microtime())) - $timer, 4) . " seconds.'</SCRIPT>";
  97.     exit;
  98. }
  99. if (!file_exists(PATH) && !$is_safe_mode) {
  100.     mkdir(PATH, 0777) || trigger_error("Íå óäàëîñü ñîçäàòü êàòàëîã äëÿ áåêàïà", E_USER_ERROR);
  101. }
  102.  
  103. $SK = new dumper();
  104. define('C_DEFAULT', 1);
  105. define('C_RESULT', 2);
  106. define('C_ERROR', 3);
  107. define('C_WARNING', 4);
  108.  
  109. $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
  110. switch($action){
  111.     case 'backup':
  112.         $SK->backup();
  113.         break;
  114.     case 'restore':
  115.         $SK->restore();
  116.         break;
  117.     default:
  118.         $SK->main();
  119. }
  120.  
  121. mysql_close();
  122.  
  123. echo "<SCRIPT>document.getElementById('timer').innerHTML = '" . round(array_sum(explode(' ', microtime())) - $timer, 4) . " seconds.'</SCRIPT>";
  124.  
  125. class dumper {
  126.     function dumper() {
  127.         if (file_exists(PATH . "dumper.cfg.php")) {
  128.             include(PATH . "dumper.cfg.php");
  129.         }
  130.         else{
  131.             $this->SET['last_action'] = 0;
  132.             $this->SET['last_db_backup'] = '';
  133.             $this->SET['tables'] = '';
  134.             $this->SET['comp_method'] = 2;
  135.             $this->SET['comp_level']  = 7;
  136.             $this->SET['last_db_restore'] = '';
  137.         }
  138.         $this->tabs = 0;
  139.         $this->records = 0;
  140.         $this->size = 0;
  141.         $this->comp = 0;
  142.  
  143.         // Âåðñèÿ MySQL âèäà 40101
  144.         preg_match("/^(\d+)\.(\d+)\.(\d+)/", mysql_get_server_info(), $m);
  145.         $this->mysql_version = sprintf("%d%02d%02d", $m[1], $m[2], $m[3]);
  146.  
  147.         $this->only_create = explode(',', ONLY_CREATE);
  148.         $this->forced_charset  = false;
  149.         $this->restore_charset = $this->restore_collate = '';
  150.         if (preg_match("/^(forced->)?(([a-z0-9]+)(\_\w+)?)$/", RESTORE_CHARSET, $matches)) {
  151.             $this->forced_charset  = $matches[1] == 'forced->';
  152.             $this->restore_charset = $matches[3];
  153.             $this->restore_collate = !empty($matches[4]) ? ' COLLATE ' . $matches[2] : '';
  154.         }
  155.     }
  156.  
  157.     function backup() {
  158.         if (!isset($_POST)) {$this->main();}
  159.         set_error_handler("SXD_errorHandler");
  160.         $buttons = "<A ID=save HREF='' STYLE='display: none;'>&#1578;&#1581;&#1605;&#1610;&#1604; &#1575;&#1604;&#1605;&#1604;&#1601;</A> &nbsp; <INPUT ID=back TYPE=button VALUE='&#1585;&#1580;&#1608;&#1593; &#1604;&#1604;&#1582;&#1604;&#1601;' DISABLED onClick=\"history.back();\">";
  161.         echo tpl_page(tpl_process("&#1575;&#1604;&#1606;&#1587;&#1582; &#1575;&#1604;&#1575;&#1581;&#1578;&#1610;&#1575;&#1591;&#1610; &#1604;&#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;"), $buttons);
  162.  
  163.         $this->SET['last_action']     = 0;
  164.         $this->SET['last_db_backup']  = isset($_POST['db_backup']) ? $_POST['db_backup'] : '';
  165.         $this->SET['tables_exclude']  = !empty($_POST['tables']) && $_POST['tables']{0} == '^' ? 1 : 0;
  166.         $this->SET['tables']          = isset($_POST['tables']) ? $_POST['tables'] : '';
  167.         $this->SET['comp_method']     = isset($_POST['comp_method']) ? intval($_POST['comp_method']) : 0;
  168.         $this->SET['comp_level']      = isset($_POST['comp_level']) ? intval($_POST['comp_level']) : 0;
  169.         $this->fn_save();
  170.  
  171.         $this->SET['tables']          = explode(",", $this->SET['tables']);
  172.         if (!empty($_POST['tables'])) {
  173.             foreach($this->SET['tables'] AS $table){
  174.                 $table = preg_replace("/[^\w*?^]/", "", $table);
  175.                 $pattern = array( "/\?/", "/\*/");
  176.                 $replace = array( ".", ".*?");
  177.                 $tbls[] = preg_replace($pattern, $replace, $table);
  178.             }
  179.         }
  180.         else{
  181.             $this->SET['tables_exclude'] = 1;
  182.         }
  183.  
  184.         if ($this->SET['comp_level'] == 0) {
  185.             $this->SET['comp_method'] = 0;
  186.         }
  187.         $db = $this->SET['last_db_backup'];
  188.  
  189.         if (!$db) {
  190.             echo tpl_l("ÎØÈÁÊÀ! Íå óêàçàíà áàçà äàííûõ!", C_ERROR);
  191.             echo tpl_enableBack();
  192.             exit;
  193.         }
  194.         echo tpl_l("&#1575;&#1587;&#1605; &#1575;&#1604;&#1602;&#1575;&#1593;&#1583;&#1577; `{$db}`.");
  195.         mysql_select_db($db) or trigger_error ("Íå óäàåòñÿ âûáðàòü áàçó äàííûõ.<BR>" . mysql_error(), E_USER_ERROR);
  196.         $tables = array();
  197.         $result = mysql_query("SHOW TABLES");
  198.         $all = 0;
  199.         while($row = mysql_fetch_array($result)) {
  200.             $status = 0;
  201.             if (!empty($tbls)) {
  202.                 foreach($tbls AS $table){
  203.                     $exclude = preg_match("/^\^/", $table) ? true : false;
  204.                     if (!$exclude) {
  205.                         if (preg_match("/^{$table}$/i", $row[0])) {
  206.                             $status = 1;
  207.                         }
  208.                         $all = 1;
  209.                     }
  210.                     if ($exclude && preg_match("/{$table}$/i", $row[0])) {
  211.                         $status = -1;
  212.                     }
  213.                 }
  214.             }
  215.             else {
  216.                 $status = 1;
  217.             }
  218.             if ($status >= $all) {
  219.                 $tables[] = $row[0];
  220.             }
  221.         }
  222.  
  223.         $tabs = count($tables);
  224.         // Îïðåäåëåíèå ðàçìåðîâ òàáëèö
  225.         $result = mysql_query("SHOW TABLE STATUS");
  226.         $tabinfo = array();
  227.         $tab_charset = array();
  228.         $tab_type = array();
  229.         $tabinfo[0] = 0;
  230.         $info = '';
  231.         while($item = mysql_fetch_assoc($result)){
  232.             //print_r($item);
  233.             if(in_array($item['Name'], $tables)) {
  234.                 $item['Rows'] = empty($item['Rows']) ? 0 : $item['Rows'];
  235.                 $tabinfo[0] += $item['Rows'];
  236.                 $tabinfo[$item['Name']] = $item['Rows'];
  237.                 $this->size += $item['Data_length'];
  238.                 $tabsize[$item['Name']] = 1 + round(LIMIT * 1048576 / ($item['Avg_row_length'] + 1));
  239.                 if($item['Rows']) $info .= "|" . $item['Rows'];
  240.                 if (!empty($item['Collation']) && preg_match("/^([a-z0-9]+)_/i", $item['Collation'], $m)) {
  241.                     $tab_charset[$item['Name']] = $m[1];
  242.                 }
  243.                 $tab_type[$item['Name']] = isset($item['Engine']) ? $item['Engine'] : $item['Type'];
  244.             }
  245.         }
  246.         $show = 10 + $tabinfo[0] / 50;
  247.         $info = $tabinfo[0] . $info;
  248.         $name = $db . '_' . date("Y-m-d_H-i");
  249.         $fp = $this->fn_open($name, "w");
  250.         echo tpl_l("Create file with backup database:<BR>\\n  -  {$this->filename}");
  251.         $this->fn_write($fp, "#SKD101|{$db}|{$tabs}|" . date("Y.m.d H:i:s") ."|{$info}\n\n");
  252.         $t=0;
  253.         echo tpl_l(str_repeat("-", 60));
  254.         $result = mysql_query("SET SQL_QUOTE_SHOW_CREATE = 1");
  255.         // Êîäèðîâêà ñîåäèíåíèÿ ïî óìîë÷àíèþ
  256.         if ($this->mysql_version > 40101 && CHARSET != 'auto') {
  257.             mysql_query("SET NAMES '" . CHARSET . "'") or trigger_error ("Íåóäàåòñÿ èçìåíèòü êîäèðîâêó ñîåäèíåíèÿ.<BR>" . mysql_error(), E_USER_ERROR);
  258.             $last_charset = CHARSET;
  259.         }
  260.         else{
  261.             $last_charset = '';
  262.         }
  263.         foreach ($tables AS $table){
  264.             // Âûñòàâëÿåì êîäèðîâêó ñîåäèíåíèÿ ñîîòâåòñòâóþùóþ êîäèðîâêå òàáëèöû
  265.             if ($this->mysql_version > 40101 && $tab_charset[$table] != $last_charset) {
  266.                 if (CHARSET == 'auto') {
  267.                     mysql_query("SET NAMES '" . $tab_charset[$table] . "'") or trigger_error ("Íåóäàåòñÿ èçìåíèòü êîäèðîâêó ñîåäèíåíèÿ.<BR>" . mysql_error(), E_USER_ERROR);
  268.                     echo tpl_l("Óñòàíîâëåíà êîäèðîâêà ñîåäèíåíèÿ `" . $tab_charset[$table] . "`.", C_WARNING);
  269.                     $last_charset = $tab_charset[$table];
  270.                 }
  271.                 else{
  272.                     echo tpl_l('Êîäèðîâêà ñîåäèíåíèÿ è òàáëèöû íå ñîâïàäàåò:', C_ERROR);
  273.                     echo tpl_l('&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; `'. $table .'` -> ' . $tab_charset[$table] . ' (ñîåäèíåíèå '  . CHARSET . ')', C_ERROR);
  274.                 }
  275.             }
  276.             echo tpl_l("&#1580;&#1575;&#1585;&#1610; &#1578;&#1606;&#1601;&#1610;&#1584; &#1575;&#1604;&#1593;&#1605;&#1604;&#1610;&#1577; &#1593;&#1604;&#1609; `{$table}` [" . fn_int($tabinfo[$table]) . "].");
  277.             // Ñîçäàíèå òàáëèöû
  278.             $result = mysql_query("SHOW CREATE TABLE `{$table}`");
  279.             $tab = mysql_fetch_array($result);
  280.             $tab = preg_replace('/(default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP|DEFAULT CHARSET=\w+|COLLATE=\w+|character set \w+|collate \w+)/i', '/*!40101 \\1 */', $tab);
  281.             $this->fn_write($fp, "DROP TABLE IF EXISTS `{$table}`;\n{$tab[1]};\n\n");
  282.             // Ïðîâåðÿåì íóæíî ëè äàìïèòü äàííûå
  283.             if (in_array($tab_type[$table], $this->only_create)) {
  284.                 continue;
  285.             }
  286.             // Îïðåäåäåëÿåì òèïû ñòîëáöîâ
  287.             $NumericColumn = array();
  288.             $result = mysql_query("SHOW COLUMNS FROM `{$table}`");
  289.             $field = 0;
  290.             while($col = mysql_fetch_row($result)) {
  291.                 $NumericColumn[$field++] = preg_match("/^(\w*int|year)/", $col[1]) ? 1 : 0;
  292.             }
  293.             $fields = $field;
  294.             $from = 0;
  295.             $limit = $tabsize[$table];
  296.             $limit2 = round($limit / 3);
  297.             if ($tabinfo[$table] > 0) {
  298.             if ($tabinfo[$table] > $limit2) {
  299.                 echo tpl_s(0, $t / $tabinfo[0]);
  300.             }
  301.             $i = 0;
  302.             $this->fn_write($fp, "INSERT INTO `{$table}` VALUES");
  303.             while(($result = mysql_query("SELECT * FROM `{$table}` LIMIT {$from}, {$limit}")) && ($total = mysql_num_rows($result))){
  304.                     while($row = mysql_fetch_row($result)) {
  305.                         $i++;
  306.                         $t++;
  307.  
  308.                         for($k = 0; $k < $fields; $k++){
  309.                             if ($NumericColumn[$k])
  310.                                 $row[$k] = isset($row[$k]) ? $row[$k] : "NULL";
  311.                             else
  312.                                 $row[$k] = isset($row[$k]) ? "'" . mysql_escape_string($row[$k]) . "'" : "NULL";
  313.                         }
  314.  
  315.                         $this->fn_write($fp, ($i == 1 ? "" : ",") . "\n(" . implode(", ", $row) . ")");
  316.                         if ($i % $limit2 == 0)
  317.                             echo tpl_s($i / $tabinfo[$table], $t / $tabinfo[0]);
  318.                     }
  319.                     mysql_free_result($result);
  320.                     if ($total < $limit) {
  321.                         break;
  322.                     }
  323.                     $from += $limit;
  324.             }
  325.  
  326.             $this->fn_write($fp, ";\n\n");
  327.             echo tpl_s(1, $t / $tabinfo[0]);}
  328.         }
  329.         $this->tabs = $tabs;
  330.         $this->records = $tabinfo[0];
  331.         $this->comp = $this->SET['comp_method'] * 10 + $this->SET['comp_level'];
  332.         echo tpl_s(1, 1);
  333.         echo tpl_l(str_repeat("-", 60));
  334.         $this->fn_close($fp);
  335.         echo tpl_l("&#1606;&#1587;&#1582; &#1602;&#1575;&#1593;&#1583;&#1577; `{$db}` &#1578;&#1605;.", C_RESULT);
  336.         echo tpl_l("&#1581;&#1580;&#1605; &#1575;&#1604;&#1602;&#1575;&#1593;&#1583;&#1577;:       " . round($this->size / 1048576, 2) . " mb", C_RESULT);
  337.         $filesize = round(filesize(PATH . $this->filename) / 1048576, 2) . " mb";
  338.         echo tpl_l("&#1581;&#1580;&#1605; &#1575;&#1604;&#1605;&#1604;&#1601;: {$filesize}", C_RESULT);
  339.         echo tpl_l("&#1605;&#1580;&#1605;&#1608;&#1593; &#1575;&#1604;&#1580;&#1583;&#1575;&#1608;&#1604;: {$tabs}", C_RESULT);
  340.         echo tpl_l("Error found:   " . fn_int($tabinfo[0]), C_RESULT);
  341.         echo "<SCRIPT>with (document.getElementById('save')) {style.display = ''; innerHTML = '&#1585;&#1575;&#1576;&#1591; &#1575;&#1604;&#1605;&#1604;&#1601; ({$filesize})'; href = '" . URL . $this->filename . "'; }document.getElementById('back').disabled = 0;</SCRIPT>";
  342.  
  343.     }
  344.  
  345.     function restore(){
  346.         if (!isset($_POST)) {$this->main();}
  347.         set_error_handler("SXD_errorHandler");
  348.         $buttons = "<INPUT ID=back TYPE=button VALUE='&#1575;&#1604;&#1585;&#1580;&#1608;&#1593; &#1604;&#1604;&#1582;&#1604;&#1601;' DISABLED onClick=\"history.back();\">";
  349.         echo tpl_page(tpl_process("&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1602;&#1575;&#1593;&#1583;&#1577; &#1576;&#1610;&#1575;&#1606;&#1575;&#1578;"), $buttons);
  350.  
  351.         $this->SET['last_action']     = 1;
  352.         $this->SET['last_db_restore'] = isset($_POST['db_restore']) ? $_POST['db_restore'] : '';
  353.         $file                         = isset($_POST['file']) ? $_POST['file'] : '';
  354.         $this->fn_save();
  355.         $db = $this->SET['last_db_restore'];
  356.  
  357.         if (!$db) {
  358.             echo tpl_l("ÎØÈÁÊÀ! Íå óêàçàíà áàçà äàííûõ!", C_ERROR);
  359.             echo tpl_enableBack();
  360.             exit;
  361.         }
  362.         echo tpl_l("&#1575;&#1587;&#1605; &#1575;&#1604;&#1602;&#1575;&#1593;&#1583;&#1577; `{$db}`.");
  363.         mysql_select_db($db) or trigger_error ("Íå óäàåòñÿ âûáðàòü áàçó äàííûõ.<BR>" . mysql_error(), E_USER_ERROR);
  364.  
  365.         // Îïðåäåëåíèå ôîðìàòà ôàéëà
  366.         if(preg_match("/^(.+?)\.sql(\.(bz2|gz))?$/", $file, $matches)) {
  367.             if (isset($matches[3]) && $matches[3] == 'bz2') {
  368.                 $this->SET['comp_method'] = 2;
  369.             }
  370.             elseif (isset($matches[2]) &&$matches[3] == 'gz'){
  371.                 $this->SET['comp_method'] = 1;
  372.             }
  373.             else{
  374.                 $this->SET['comp_method'] = 0;
  375.             }
  376.             $this->SET['comp_level'] = '';
  377.             if (!file_exists(PATH . "/{$file}")) {
  378.                 echo tpl_l("ÎØÈÁÊÀ! Ôàéë íå íàéäåí!", C_ERROR);
  379.                 echo tpl_enableBack();
  380.                 exit;
  381.             }
  382.             echo tpl_l("&#1575;&#1587;&#1605; &#1575;&#1604;&#1605;&#1604;&#1601; `{$file}`.");
  383.             $file = $matches[1];
  384.         }
  385.         else{
  386.             echo tpl_l("&#1604;&#1605; &#1578;&#1602;&#1605; &#1576;&#1575;&#1582;&#1578;&#1610;&#1575;&#1585; &#1605;&#1604;&#1601; &#1604;&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593;&#1607;", C_ERROR);
  387.             echo tpl_enableBack();
  388.             exit;
  389.         }
  390.         echo tpl_l(str_repeat("-", 60));
  391.         $fp = $this->fn_open($file, "r");
  392.         $this->file_cache = $sql = $table = $insert = '';
  393.         $is_skd = $query_len = $execute = $q =$t = $i = $aff_rows = 0;
  394.         $limit = 300;
  395.         $index = 4;
  396.         $tabs = 0;
  397.         $cache = '';
  398.         $info = array();
  399.  
  400.         // Óñòàíîâêà êîäèðîâêè ñîåäèíåíèÿ
  401.         if ($this->mysql_version > 40101 && (CHARSET != 'auto' || $this->forced_charset)) { // Êîäèðîâêà ïî óìîë÷àíèþ, åñëè â äàìïå íå óêàçàíà êîäèðîâêà
  402.             mysql_query("SET NAMES '" . $this->restore_charset . "'") or trigger_error ("Íåóäàåòñÿ èçìåíèòü êîäèðîâêó ñîåäèíåíèÿ.<BR>" . mysql_error(), E_USER_ERROR);
  403.             echo tpl_l("Óñòàíîâëåíà êîäèðîâêà ñîåäèíåíèÿ `" . $this->restore_charset . "`.", C_WARNING);
  404.             $last_charset = $this->restore_charset;
  405.         }
  406.         else {
  407.             $last_charset = '';
  408.         }
  409.         $last_showed = '';
  410.         while(($str = $this->fn_read_str($fp)) !== false){
  411.             if (empty($str) || preg_match("/^(#|--)/", $str)) {
  412.                 if (!$is_skd && preg_match("/^#SKD101\|/", $str)) {
  413.                     $info = explode("|", $str);
  414.                     echo tpl_s(0, $t / $info[4]);
  415.                     $is_skd = 1;
  416.                 }
  417.                 continue;
  418.             }
  419.             $query_len += strlen($str);
  420.  
  421.             if (!$insert && preg_match("/^(INSERT INTO `?([^` ]+)`? .*?VALUES)(.*)$/i", $str, $m)) {
  422.                 if ($table != $m[2]) {
  423.                     $table = $m[2];
  424.                     $tabs++;
  425.                     $cache .= tpl_l("&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; `{$table}`.");
  426.                     $last_showed = $table;
  427.                     $i = 0;
  428.                     if ($is_skd)
  429.                         echo tpl_s(100 , $t / $info[4]);
  430.                 }
  431.                 $insert = $m[1] . ' ';
  432.                 $sql .= $m[3];
  433.                 $index++;
  434.                 $info[$index] = isset($info[$index]) ? $info[$index] : 0;
  435.                 $limit = round($info[$index] / 20);
  436.                 $limit = $limit < 300 ? 300 : $limit;
  437.                 if ($info[$index] > $limit){
  438.                     echo $cache;
  439.                     $cache = '';
  440.                     echo tpl_s(0 / $info[$index], $t / $info[4]);
  441.                 }
  442.             }
  443.             else{
  444.                 $sql .= $str;
  445.                 if ($insert) {
  446.                     $i++;
  447.                     $t++;
  448.                     if ($is_skd && $info[$index] > $limit && $t % $limit == 0){
  449.                         echo tpl_s($i / $info[$index], $t / $info[4]);
  450.                     }
  451.                 }
  452.             }
  453.  
  454.             if (!$insert && preg_match("/^CREATE TABLE (IF NOT EXISTS )?`?([^` ]+)`?/i", $str, $m) && $table != $m[2]){
  455.                 $table = $m[2];
  456.                 $insert = '';
  457.                 $tabs++;
  458.                 $is_create = true;
  459.                 $i = 0;
  460.             }
  461.             if ($sql) {
  462.                 if (preg_match("/;$/", $str)) {
  463.                     $sql = rtrim($insert . $sql, ";");
  464.                     if (empty($insert)) {
  465.                         if ($this->mysql_version < 40101) {
  466.                             $sql = preg_replace("/ENGINE\s?=/", "TYPE=", $sql);
  467.                         }
  468.                         elseif (preg_match("/CREATE TABLE/i", $sql)){
  469.                             // Âûñòàâëÿåì êîäèðîâêó ñîåäèíåíèÿ
  470.                             if (preg_match("/(CHARACTER SET|CHARSET)[=\s]+(\w+)/i", $sql, $charset)) {
  471.                                 if (!$this->forced_charset && $charset[2] != $last_charset) {
  472.                                     if (CHARSET == 'auto') {
  473.                                         mysql_query("SET NAMES '" . $charset[2] . "'") or trigger_error ("Íåóäàåòñÿ èçìåíèòü êîäèðîâêó ñîåäèíåíèÿ.<BR>{$sql}<BR>" . mysql_error(), E_USER_ERROR);
  474.                                         $cache .= tpl_l("Óñòàíîâëåíà êîäèðîâêà ñîåäèíåíèÿ `" . $charset[2] . "`.", C_WARNING);
  475.                                         $last_charset = $charset[2];
  476.                                     }
  477.                                     else{
  478.                                         $cache .= tpl_l('Êîäèðîâêà ñîåäèíåíèÿ è òàáëèöû íå ñîâïàäàåò:', C_ERROR);
  479.                                         $cache .= tpl_l('&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; `'. $table .'` -> ' . $charset[2] . ' (ñîåäèíåíèå '  . $this->restore_charset . ')', C_ERROR);
  480.                                     }
  481.                                 }
  482.                                 // Ìåíÿåì êîäèðîâêó åñëè óêàçàíî ôîðñèðîâàòü êîäèðîâêó
  483.                                 if ($this->forced_charset) {
  484.                                     $sql = preg_replace("/(\/\*!\d+\s)?((COLLATE)[=\s]+)\w+(\s+\*\/)?/i", '', $sql);
  485.                                     $sql = preg_replace("/((CHARACTER SET|CHARSET)[=\s]+)\w+/i", "\\1" . $this->restore_charset . $this->restore_collate, $sql);
  486.                                 }
  487.                             }
  488.                             elseif(CHARSET == 'auto'){ // Âñòàâëÿåì êîäèðîâêó äëÿ òàáëèö, åñëè îíà íå óêàçàíà è óñòàíîâëåíà auto êîäèðîâêà
  489.                                 $sql .= ' DEFAULT CHARSET=' . $this->restore_charset . $this->restore_collate;
  490.                                 if ($this->restore_charset != $last_charset) {
  491.                                     mysql_query("SET NAMES '" . $this->restore_charset . "'") or trigger_error ("Íåóäàåòñÿ èçìåíèòü êîäèðîâêó ñîåäèíåíèÿ.<BR>{$sql}<BR>" . mysql_error(), E_USER_ERROR);
  492.                                     $cache .= tpl_l("Óñòàíîâëåíà êîäèðîâêà ñîåäèíåíèÿ `" . $this->restore_charset . "`.", C_WARNING);
  493.                                     $last_charset = $this->restore_charset;
  494.                                 }
  495.                             }
  496.                         }
  497.                         if ($last_showed != $table) {$cache .= tpl_l("&#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; `{$table}`."); $last_showed = $table;}
  498.                     }
  499.                     elseif($this->mysql_version > 40101 && empty($last_charset)) { // Óñòàíàâëèâàåì êîäèðîâêó íà ñëó÷àé åñëè îòñóòñòâóåò CREATE TABLE
  500.                         mysql_query("SET $this->restore_charset '" . $this->restore_charset . "'") or trigger_error ("Íåóäàåòñÿ èçìåíèòü êîäèðîâêó ñîåäèíåíèÿ.<BR>{$sql}<BR>" . mysql_error(), E_USER_ERROR);
  501.                         echo tpl_l("Óñòàíîâëåíà êîäèðîâêà ñîåäèíåíèÿ `" . $this->restore_charset . "`.", C_WARNING);
  502.                         $last_charset = $this->restore_charset;
  503.                     }
  504.                     $insert = '';
  505.                     $execute = 1;
  506.                 }
  507.                 if ($query_len >= 65536 && preg_match("/,$/", $str)) {
  508.                     $sql = rtrim($insert . $sql, ",");
  509.                     $execute = 1;
  510.                 }
  511.                 if ($execute) {
  512.                     $q++;
  513.                     mysql_query($sql) or trigger_error ("Íåïðàâèëüíûé çàïðîñ.<BR>" . mysql_error(), E_USER_ERROR);
  514.                     if (preg_match("/^insert/i", $sql)) {
  515.                         $aff_rows += mysql_affected_rows();
  516.                     }
  517.                     $sql = '';
  518.                     $query_len = 0;
  519.                     $execute = 0;
  520.                 }
  521.             }
  522.         }
  523.         echo $cache;
  524.         echo tpl_s(1 , 1);
  525.         echo tpl_l(str_repeat("-", 60));
  526.         echo tpl_l("ÁÄ âîññòàíîâëåíà èç ðåçåðâíîé êîïèè.", C_RESULT);
  527.         if (isset($info[3])) echo tpl_l("Äàòà ñîçäàíèÿ êîïèè: {$info[3]}", C_RESULT);
  528.         echo tpl_l("Çàïðîñîâ ê ÁÄ: {$q}", C_RESULT);
  529.         echo tpl_l("Òàáëèö ñîçäàíî: {$tabs}", C_RESULT);
  530.         echo tpl_l("Ñòðîê äîáàâëåíî: {$aff_rows}", C_RESULT);
  531.  
  532.         $this->tabs = $tabs;
  533.         $this->records = $aff_rows;
  534.         $this->size = filesize(PATH . $this->filename);
  535.         $this->comp = $this->SET['comp_method'] * 10 + $this->SET['comp_level'];
  536.         echo "<SCRIPT>document.getElementById('back').disabled = 0;</SCRIPT>";
  537.         // Ïåðåäà÷à äàííûõ äëÿ ãëîáàëüíîé ñòàòèñòèêè
  538.  
  539.         $this->fn_close($fp);
  540.     }
  541.  
  542.     function main(){
  543.         $this->comp_levels = array('9' => '9 (&#1602;&#1608;&#1610;)', '8' => '8', '7' => '7', '6' => '6', '5' => '5 (&#1605;&#1578;&#1608;&#1587;&#1591;)', '4' => '4', '3' => '3', '2' => '2', '1' => '1 (&#1582;&#1601;&#1610;&#1601;)','0' => 'sql');
  544.  
  545.         if (function_exists("bzopen")) {
  546.             $this->comp_methods[2] = 'BZip2';
  547.         }
  548.         if (function_exists("gzopen")) {
  549.             $this->comp_methods[1] = 'GZip';
  550.         }
  551.         $this->comp_methods[0] = 'sql';
  552.         if (count($this->comp_methods) == 1) {
  553.             $this->comp_levels = array('0' =>'sql');
  554.         }
  555.  
  556.         $dbs = $this->db_select();
  557.         $this->vars['db_backup']    = $this->fn_select($dbs, $this->SET['last_db_backup']);
  558.         $this->vars['db_restore']   = $this->fn_select($dbs, $this->SET['last_db_restore']);
  559.         $this->vars['comp_levels']  = $this->fn_select($this->comp_levels, $this->SET['comp_level']);
  560.         $this->vars['comp_methods'] = $this->fn_select($this->comp_methods, $this->SET['comp_method']);
  561.         $this->vars['tables']       = $this->SET['tables'];
  562.         $this->vars['files']        = $this->fn_select($this->file_select(), '');
  563.         $buttons = "<INPUT TYPE=submit VALUE=&#1578;&#1606;&#1601;&#1610;&#1584;><INPUT TYPE=button VALUE=&#1585;&#1580;&#1608;&#1593; onClick=\"location.href = 'dumper.php?reload'\">";
  564.         echo tpl_page(tpl_main(), $buttons);
  565.     }
  566.  
  567.     function db_select(){
  568.         if (DBNAMES != '') {
  569.             $items = explode(',', trim(DBNAMES));
  570.             foreach($items AS $item){
  571.                 if (mysql_select_db($item)) {
  572.                     $tables = mysql_query("SHOW TABLES");
  573.                     if ($tables) {
  574.                         $tabs = mysql_num_rows($tables);
  575.                         $dbs[$item] = "{$item} ({$tabs})";
  576.                     }
  577.                 }
  578.             }
  579.         }
  580.         else {
  581.             $result = mysql_query("SHOW DATABASES");
  582.             $dbs = array();
  583.             while($item = mysql_fetch_array($result)){
  584.                 if (mysql_select_db($item[0])) {
  585.                     $tables = mysql_query("SHOW TABLES");
  586.                     if ($tables) {
  587.                         $tabs = mysql_num_rows($tables);
  588.                         $dbs[$item[0]] = "{$item[0]} ({$tabs})";
  589.                     }
  590.                 }
  591.             }
  592.         }
  593.         return $dbs;
  594.     }
  595.  
  596.     function file_select(){
  597.         $files = array('' => ' ');
  598.         if (is_dir(PATH) && $handle = opendir(PATH)) {
  599.             while (false !== ($file = readdir($handle))) {
  600.                 if (preg_match("/^.+?\.sql(\.(gz|bz2))?$/", $file)) {
  601.                     $files[$file] = $file;
  602.                 }
  603.             }
  604.             closedir($handle);
  605.         }
  606.         ksort($files);
  607.         return $files;
  608.     }
  609.  
  610.     function fn_open($name, $mode){
  611.         if ($this->SET['comp_method'] == 2) {
  612.             $this->filename = "{$name}.sql.bz2";
  613.             return bzopen(PATH . $this->filename, "{$mode}b{$this->SET['comp_level']}");
  614.         }
  615.         elseif ($this->SET['comp_method'] == 1) {
  616.             $this->filename = "{$name}.sql.gz";
  617.             return gzopen(PATH . $this->filename, "{$mode}b{$this->SET['comp_level']}");
  618.         }
  619.         else{
  620.             $this->filename = "{$name}.sql";
  621.             return fopen(PATH . $this->filename, "{$mode}b");
  622.         }
  623.     }
  624.  
  625.     function fn_write($fp, $str){
  626.         if ($this->SET['comp_method'] == 2) {
  627.             bzwrite($fp, $str);
  628.         }
  629.         elseif ($this->SET['comp_method'] == 1) {
  630.             gzwrite($fp, $str);
  631.         }
  632.         else{
  633.             fwrite($fp, $str);
  634.         }
  635.     }
  636.  
  637.     function fn_read($fp){
  638.         if ($this->SET['comp_method'] == 2) {
  639.             return bzread($fp, 4096);
  640.         }
  641.         elseif ($this->SET['comp_method'] == 1) {
  642.             return gzread($fp, 4096);
  643.         }
  644.         else{
  645.             return fread($fp, 4096);
  646.         }
  647.     }
  648.  
  649.     function fn_read_str($fp){
  650.         $string = '';
  651.         $this->file_cache = ltrim($this->file_cache);
  652.         $pos = strpos($this->file_cache, "\n", 0);
  653.         if ($pos < 1) {
  654.             while (!$string && ($str = $this->fn_read($fp))){
  655.                 $pos = strpos($str, "\n", 0);
  656.                 if ($pos === false) {
  657.                     $this->file_cache .= $str;
  658.                 }
  659.                 else{
  660.                     $string = $this->file_cache . substr($str, 0, $pos);
  661.                     $this->file_cache = substr($str, $pos + 1);
  662.                 }
  663.             }
  664.             if (!$str) {
  665.                 if ($this->file_cache) {
  666.                     $string = $this->file_cache;
  667.                     $this->file_cache = '';
  668.                     return trim($string);
  669.                 }
  670.                 return false;
  671.             }
  672.         }
  673.         else {
  674.             $string = substr($this->file_cache, 0, $pos);
  675.             $this->file_cache = substr($this->file_cache, $pos + 1);
  676.         }
  677.         return trim($string);
  678.     }
  679.  
  680.     function fn_close($fp){
  681.         if ($this->SET['comp_method'] == 2) {
  682.             bzclose($fp);
  683.         }
  684.         elseif ($this->SET['comp_method'] == 1) {
  685.             gzclose($fp);
  686.         }
  687.         else{
  688.             fclose($fp);
  689.         }
  690.         $this->fn_index();
  691.     }
  692.  
  693.     function fn_select($items, $selected){
  694.         $select = '';
  695.         foreach($items AS $key => $value){
  696.             $select .= $key == $selected ? "<OPTION VALUE='{$key}' SELECTED>{$value}" : "<OPTION VALUE='{$key}'>{$value}";
  697.         }
  698.         return $select;
  699.     }
  700.  
  701.     function fn_save(){
  702.         if (SC) {
  703.             $ne = !file_exists(PATH . "dumper.cfg.php");
  704.             $fp = fopen(PATH . "dumper.cfg.php", "wb");
  705.             fwrite($fp, "<?php\n\$this->SET = " . fn_arr2str($this->SET) . "\n?>");
  706.             fclose($fp);
  707.             $this->fn_index();
  708.         }
  709.     }
  710.  
  711.     function fn_index(){
  712.         if (!file_exists(PATH . 'index.html')) {
  713.             $fh = fopen(PATH . 'index.html', 'wb');
  714.             fwrite($fh, tpl_backup_index());
  715.             fclose($fh);
  716.         }
  717.     }
  718. }
  719.  
  720. function fn_int($num){
  721.     return number_format($num, 0, ',', ' ');
  722. }
  723.  
  724. function fn_arr2str($array) {
  725.     $str = "array(\n";
  726.     foreach ($array as $key => $value) {
  727.         if (is_array($value)) {
  728.             $str .= "'$key' => " . fn_arr2str($value) . ",\n\n";
  729.         }
  730.         else {
  731.             $str .= "'$key' => '" . str_replace("'", "\'", $value) . "',\n";
  732.         }
  733.     }
  734.     return $str . ")";
  735. }
  736.  
  737. // Øàáëîíû
  738.  
  739. function tpl_page($content = '', $buttons = ''){
  740. return <<<HTML
  741. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  742. <HTML>
  743. <HEAD>
  744. <TITLE>Sypex Dumper Lite 1.0.8 | &copy; 2006 zapimir|&#1578;&#1593;&#1585;&#1610;&#1576; &#1587;&#1608;&#1601;&#1578; &#1575;&#1585;</TITLE>
  745. <META HTTP-EQUIV=Content-Type CONTENT="text/html; charset=windows-1251">
  746. <html dir="rtl">
  747. <STYLE TYPE="TEXT/CSS">
  748. <!--
  749. body{
  750.     overflow: auto;
  751. }
  752. td {
  753.     font: 11px tahoma, verdana, arial;
  754.     cursor: default;
  755. }
  756. input, select, div {
  757.     font: 11px tahoma, verdana, arial;
  758. }
  759. input.text, select {
  760.     width: 100%;
  761. }
  762. fieldset {
  763.     margin-bottom: 10px;
  764. }
  765. -->
  766. </STYLE>
  767. </HEAD>
  768.  
  769. <BODY BGCOLOR=#ECE9D8 TEXT=#000000>
  770. <TABLE WIDTH=100% HEIGHT=100% BORDER=0 CELLSPACING=0 CELLPADDING=0 ALIGN=CENTER>
  771. <TR>
  772. <TD HEIGHT=60% ALIGN=CENTER VALIGN=MIDDLE>
  773. <TABLE WIDTH=360 BORDER=0 CELLSPACING=0 CELLPADDING=0>
  774. <TR>
  775. <TD VALIGN=TOP STYLE="border: 1px solid #919B9C;">
  776. <TABLE WIDTH=100% HEIGHT=100% BORDER=0 CELLSPACING=1 CELLPADDING=0>
  777. <TR>
  778. <TD ID=Header HEIGHT=20 BGCOLOR=#7A96DF STYLE="font-size: 13px; color: white; font-family: verdana, arial;
  779. padding-left: 5px; FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=1,startColorStr=#7A96DF,endColorStr=#FBFBFD)"
  780. TITLE='&copy; 2003-2006 zapimir'>
  781. <B><A HREF=http://sypex.net/products/dumper/ STYLE="color: white; text-decoration: none;">Sypex Dumper Lite 1.0.8</A></B><IMG ID=GS WIDTH=1 HEIGHT=1 STYLE="visibility: hidden;"></TD>
  782. </TR>
  783. <TR>
  784. <FORM NAME=skb METHOD=POST ACTION=dumper.php>
  785. <TD VALIGN=TOP BGCOLOR=#F4F3EE STYLE="FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#FCFBFE,endColorStr=#F4F3EE); padding: 8px 8px;">
  786. {$content}
  787. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  788. <TR>
  789. <TD STYLE='color: #CECECE' ID=timer></TD>
  790. <TD ALIGN=RIGHT>{$buttons}</TD>
  791. </TR>
  792. </TABLE></TD>
  793. </FORM>
  794. </TR>
  795. </TABLE></TD>
  796. </TR>
  797. </TABLE></TD>
  798. </TR>
  799. </TABLE>
  800. </TD>
  801. </TR>
  802. </TABLE>
  803. </BODY>
  804. </HTML>
  805. HTML;
  806. }
  807.  
  808. function tpl_main(){
  809. global $SK;
  810. return <<<HTML
  811. <FIELDSET onClick="document.skb.action[0].checked = 1;">
  812. <LEGEND>
  813. <INPUT TYPE=radio NAME=action VALUE=backup>
  814. Backup / &#1575;&#1604;&#1606;&#1587;&#1582; &#1575;&#1604;&#1575;&#1581;&#1578;&#1610;&#1575;&#1591;&#1610; &#1604;&#1602;&#1608;&#1575;&#1593;&#1583; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;&nbsp;</LEGEND>
  815. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  816. <TR>
  817. <TD WIDTH=35%>&#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;:</TD>
  818. <TD WIDTH=65%><SELECT NAME=db_backup>
  819. {$SK->vars['db_backup']}
  820. </SELECT></TD>
  821. </TR>
  822. <TR>
  823. <TD>&#1604;&#1606;&#1587;&#1582; &#1580;&#1583;&#1608;&#1604; &#1601;&#1602;&#1591; &#1602;&#1605; &#1576;&#1575;&#1583;&#1585;&#1575;&#1580; &#1575;&#1587;&#1605; &#1575;&#1604;&#1580;&#1583;&#1608;&#1604;:</TD>
  824. <TD><INPUT NAME=tables TYPE=text CLASS=text VALUE='{$SK->vars['tables']}'></TD>
  825. </TR>
  826. <TR>
  827. <TD>&#1582;&#1610;&#1575;&#1585;&#1575;&#1578; &#1575;&#1604;&#1606;&#1587;&#1582;:</TD>
  828. <TD><SELECT NAME=comp_method>
  829. {$SK->vars['comp_methods']}
  830. </SELECT></TD>
  831. </TR>
  832. <TR>
  833. <TD>&#1582;&#1610;&#1575;&#1585;&#1575;&#1578;gzip:</TD>
  834. <TD><SELECT NAME=comp_level>
  835. {$SK->vars['comp_levels']}
  836. </SELECT></TD>
  837. </TR>
  838. </TABLE>
  839. </FIELDSET>
  840. <FIELDSET onClick="document.skb.action[1].checked = 1;">
  841. <LEGEND>
  842. <INPUT TYPE=radio NAME=action VALUE=restore>
  843. Restore / &#1575;&#1587;&#1578;&#1585;&#1580;&#1575;&#1593; &#1602;&#1575;&#1593;&#1583;&#1577; &#1576;&#1610;&#1575;&#1606;&#1575;&#1578;&nbsp;</LEGEND>
  844. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  845. <TR>
  846. <TD>&#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;:</TD>
  847. <TD><SELECT NAME=db_restore>
  848. {$SK->vars['db_restore']}
  849. </SELECT></TD>
  850. </TR>
  851. <TR>
  852. <TD WIDTH=35%>&#1575;&#1582;&#1578;&#1585; &#1575;&#1604;&#1605;&#1604;&#1601;:</TD>
  853. <TD WIDTH=65%><SELECT NAME=file>
  854. {$SK->vars['files']}
  855. </SELECT></TD>
  856. </TR>
  857. </TABLE>
  858. </FIELDSET>
  859. </SPAN>
  860. <SCRIPT>
  861. document.skb.action[{$SK->SET['last_action']}].checked = 1;
  862. </SCRIPT>
  863.  
  864. HTML;
  865. }
  866.  
  867. function tpl_process($title){
  868. return <<<HTML
  869. <FIELDSET>
  870. <LEGEND>{$title}&nbsp;</LEGEND>
  871. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  872. <TR><TD COLSPAN=2><DIV ID=logarea STYLE="width: 100%; height: 140px; border: 1px solid #7F9DB9; padding: 3px; overflow: auto;"></DIV></TD></TR>
  873. <TR><TD WIDTH=31%>&#1580;&#1575;&#1585;&#1610; &#1606;&#1587;&#1582; &#1575;&#1604;&#1580;&#1583;&#1608;&#1604; :</TD><TD WIDTH=69%><TABLE WIDTH=100% BORDER=1 CELLPADDING=0 CELLSPACING=0>
  874. <TR><TD BGCOLOR=#FFFFFF><TABLE WIDTH=1 BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR=#5555CC ID=st_tab
  875. STYLE="FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#CCCCFF,endColorStr=#5555CC);
  876. border-right: 1px solid #AAAAAA"><TR><TD HEIGHT=12></TD></TR></TABLE></TD></TR></TABLE></TD></TR>
  877. <TR><TD>&#1580;&#1575;&#1585;&#1610; &#1606;&#1587;&#1582; &#1602;&#1575;&#1593;&#1583;&#1577; &#1575;&#1604;&#1576;&#1610;&#1575;&#1606;&#1575;&#1578;:</TD><TD><TABLE WIDTH=100% BORDER=1 CELLSPACING=0 CELLPADDING=0>
  878. <TR><TD BGCOLOR=#FFFFFF><TABLE WIDTH=1 BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR=#00AA00 ID=so_tab
  879. STYLE="FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#CCFFCC,endColorStr=#00AA00);
  880. border-right: 1px solid #AAAAAA"><TR><TD HEIGHT=12></TD></TR></TABLE></TD>
  881. </TR></TABLE></TD></TR></TABLE>
  882. </FIELDSET>
  883. <SCRIPT>
  884. var WidthLocked = false;
  885. function s(st, so){
  886.     document.getElementById('st_tab').width = st ? st + '%' : '1';
  887.     document.getElementById('so_tab').width = so ? so + '%' : '1';
  888. }
  889. function l(str, color){
  890.     switch(color){
  891.         case 2: color = 'navy'; break;
  892.         case 3: color = 'red'; break;
  893.         case 4: color = 'maroon'; break;
  894.         default: color = 'black';
  895.     }
  896.     with(document.getElementById('logarea')){
  897.         if (!WidthLocked){
  898.             style.width = clientWidth;
  899.             WidthLocked = true;
  900.         }
  901.         str = '<FONT COLOR=' + color + '>' + str + '</FONT>';
  902.         innerHTML += innerHTML ? "<BR>\\n" + str : str;
  903.         scrollTop += 14;
  904.     }
  905. }
  906. </SCRIPT>
  907. HTML;
  908. }
  909.  
  910. function tpl_auth($error){
  911. return <<<HTML
  912. <SPAN ID=error>
  913. <FIELDSET>
  914. <LEGEND>Îøèáêà</LEGEND>
  915. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  916. <TR>
  917. <TD>Äëÿ ðàáîòû Sypex Dumper Lite òðåáóåòñÿ:<BR> - Internet Explorer 5.5+, Mozilla ëèáî Opera 8+ (<SPAN ID=sie>-</SPAN>)<BR> - âêëþ÷åíî âûïîëíåíèå JavaScript ñêðèïòîâ (<SPAN ID=sjs>-</SPAN>)</TD>
  918. </TR>
  919. </TABLE>
  920. </FIELDSET>
  921. </SPAN>
  922. <SPAN ID=body STYLE="display: none;">
  923. {$error}
  924. <FIELDSET>
  925. <LEGEND>&#1578;&#1587;&#1580;&#1610;&#1604; &#1583;&#1582;&#1608;&#1604; </LEGEND>
  926. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  927. <TR>
  928. <TD WIDTH=41%>&#1575;&#1587;&#1605; &#1575;&#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605; :</TD>
  929. <TD WIDTH=59%><INPUT NAME=login TYPE=text CLASS=text></TD>
  930. </TR>
  931. <TR>
  932. <TD>&#1603;&#1604;&#1605;&#1577; &#1575;&#1604;&#1605;&#1585;&#1608;&#1585; :</TD>
  933. <TD><INPUT NAME=pass TYPE=password CLASS=text></TD>
  934. </TR>
  935. </TABLE>
  936. </FIELDSET>
  937. </SPAN>
  938. <SCRIPT>
  939. document.getElementById('sjs').innerHTML = '+';
  940. document.getElementById('body').style.display = '';
  941. document.getElementById('error').style.display = 'none';
  942. var jsEnabled = true;
  943. </SCRIPT>
  944. HTML;
  945. }
  946.  
  947. function tpl_l($str, $color = C_DEFAULT){
  948. $str = preg_replace("/\s{2}/", " &nbsp;", $str);
  949. return <<<HTML
  950. <SCRIPT>l('{$str}', $color);</SCRIPT>
  951.  
  952. HTML;
  953. }
  954.  
  955. function tpl_enableBack(){
  956. return <<<HTML
  957. <SCRIPT>document.getElementById('back').disabled = 0;</SCRIPT>
  958.  
  959. HTML;
  960. }
  961.  
  962. function tpl_s($st, $so){
  963. $st = round($st * 100);
  964. $st = $st > 100 ? 100 : $st;
  965. $so = round($so * 100);
  966. $so = $so > 100 ? 100 : $so;
  967. return <<<HTML
  968. <SCRIPT>s({$st},{$so});</SCRIPT>
  969.  
  970. HTML;
  971. }
  972.  
  973. function tpl_backup_index(){
  974. return <<<HTML
  975. <CENTER>
  976. <H1>&#1575;&#1604;&#1608;&#1589;&#1608;&#1604; &#1573;&#1604;&#1609; &#1607;&#1584;&#1607; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577; &#1594;&#1610;&#1585; &#1605;&#1587;&#1605;&#1608;&#1581; &#1576;&#1607;!<br>
  977. Access to the requested URL is not allowed!
  978. </H1>
  979. </CENTER>
  980.  
  981. HTML;
  982. }
  983.  
  984. function tpl_error($error){
  985. return <<<HTML
  986. <FIELDSET>
  987. <LEGEND>&#1604;&#1602;&#1583; &#1571;&#1583;&#1582;&#1604;&#1578; &#1575;&#1587;&#1605; &#1575;&#1604;&#1605;&#1587;&#1578;&#1582;&#1583;&#1605;  &#1571;&#1608; &#1603;&#1604;&#1605;&#1577; &#1605;&#1585;&#1608;&#1585; &#1582;&#1575;&#1591;&#1574;&#1577;</LEGEND>
  988. <TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2>
  989. <TR>
  990. <TD ALIGN=center>{$error}</TD>
  991. </TR>
  992. </TABLE>
  993. </FIELDSET>
  994.  
  995. HTML;
  996. }
  997.  
  998. function SXD_errorHandler($errno, $errmsg, $filename, $linenum, $vars) {
  999.     if ($errno == 2048) return true;
  1000.     return true;
  1001.     $dt = date("Y.m.d H:i:s");
  1002.     $errmsg = addslashes($errmsg);
  1003.  
  1004.     echo tpl_l("{$dt}<BR><B>Âîçíèêëà îøèáêà!</B>", C_ERROR);
  1005.     echo tpl_l("{$errmsg} ({$errno})", C_ERROR);
  1006.     echo tpl_enableBack();
  1007.     die();
  1008. }
  1009. ?>
Add Comment
Please, Sign In to add comment