View file engine/classes/database.class.php

File size: 3.01Kb
<?
//Класс для резервирование базы данных

define('MSB_NL', "\r\n");
define('MSB_STRING', 0);
define('MSB_DOWNLOAD', 1);
define('MSB_SAVE', 2);

class MySQL_Backup {

    var $characters = '';
    var $backup_dir = '';
    var $returnSQL = '';
    

    function Execute() {
	    global $db;	
            return $this->_active();
    }

    function _active(){
	    global $db;
        $return = $this->_Query('SHOW TABLES');
            while($catch = $db->get_array($return)){
                $value[] = $catch['Tables_in_'.$this->database];
            }
        $this->_createTable($value);
             
		if($t12ake = $this->_SaveToFile()){
            echo $this->returnSQL;
        }
        else {
            die(Lang::__('Не могу сохранить файл, не стоят права на папку.'));
        }
 
    }


    function _createTable($val) {
	    global $db; 
		foreach($val as $a){
            @$create = $db->get_array($this->_Query("SHOW CREATE TABLE `{$a}`"));
            $this->returnSQL .= '
            --
            -- Структура таблицы `' . $a . '`;
            --'.MSB_NL;
            $this->returnSQL .= 'DROP TABLE IF EXISTS `' . $a . '`;'.MSB_NL;
            $this->returnSQL .= $create[1].';'.MSB_NL.MSB_NL.MSB_NL;
            $this->returnSQL .= $this->createInsert($a);
        }
    }

    function createInsert($table) {
	    global $db;
		$value = '';
            if (!($result = $this->_Query("SELECT * FROM  `{$table}`"))) {
                return false;
            }
        while ($row = $db->fetch_row($result)){
            $values = '';
                foreach ($row as $data){ 
                    $values .= '\'' . addslashes($data) . '\', ';
                }
            $values = substr($values, 0, -2);
            $value .= 'INSERT INTO ' . $table . ' VALUES (' . $values . ');' . MSB_NL;
        }
		
      return $value;
    }


    /* Функции для соеденения и запросов */
    function _Connect() {
	    global $db;
        $db->query('SET NAMES '.$this->characters);
    }

    function _Query($sql){
	    global $db;
            $result = $db->query($sql);
			
        return $result;
    }

	/* END Функции для соеденения и запросов */
    function _SaveToFile(){ 
	    global $db;
        $fname = $this->backup_dir.''.time().'_'.DBNAME.'.sql';
            
			if (!($f = fopen($fname, 'w+')))
                return false;
 
                fwrite($f, $this->returnSQL);
                    fclose($f);
                    $this->_DownloadFile($fname);
        return $fname;
    }


    function _DownloadFile($fname) {
            echo engine::success(Lang::__('Бекап сайта успешно сохранено в папке sql/'));
            echo engine::home(array(Lang::__('Назад'),'index.php?do=sql&act=backup'));		
            exit;
			
        return true;
    }

}
?>